|
|
|
@ -28,8 +28,8 @@ void print_data(Gene_set gene_group[GENE_NUM]) /* データの表示 */ |
|
|
|
worst = gene_group[i].length; /* 最悪値 */ |
|
|
|
worst = gene_group[i].length; /* 最悪値 */ |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
//printf("best = %g, ave = %g, worst = %g\n", best, sum/GENE_NUM, worst);
|
|
|
|
printf("best = %g, ave = %g, worst = %g\n", best, sum/GENE_NUM, worst); |
|
|
|
printf("%g, %g, %g\n", best, sum/GENE_NUM, worst); |
|
|
|
//printf("%g, %g, %g\n", best, sum/GENE_NUM, worst);
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
int main(int argc, char *argv[]) |
|
|
|
int main(int argc, char *argv[]) |
|
|
|
@ -78,26 +78,19 @@ int main(int argc, char *argv[]) |
|
|
|
fclose(fp); |
|
|
|
fclose(fp); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
printf("# Trial, MutationRate, SelectNum, BestLength, GenToBest\n"); |
|
|
|
|
|
|
|
for (int aaa = 0; aaa < 10; aaa++) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* 各種データの初期化 */ |
|
|
|
/* 各種データの初期化 */ |
|
|
|
initial_gene(gene_group); /* 遺伝子集団の生成 */ |
|
|
|
initial_gene(gene_group); /* 遺伝子集団の生成 */ |
|
|
|
initial_fitness(gene_group, city); /* 初期適合度の計算 */ |
|
|
|
initial_fitness(gene_group, city); /* 初期適合度の計算 */ |
|
|
|
|
|
|
|
|
|
|
|
/* 初期データの表示 */ |
|
|
|
/* 初期データの表示 */ |
|
|
|
//print_city(city);
|
|
|
|
print_city(city); |
|
|
|
#if PRINT_GENE /* 1/2 */ |
|
|
|
#if PRINT_GENE /* 1/2 */ |
|
|
|
print_gene_group(gene_group); |
|
|
|
print_gene_group(gene_group); |
|
|
|
#endif /* PRINT_GENE 1/2 */ |
|
|
|
#endif /* PRINT_GENE 1/2 */ |
|
|
|
|
|
|
|
|
|
|
|
// printf("INITIAL RESULT\n");
|
|
|
|
printf("INITIAL RESULT\n"); |
|
|
|
// print_best_data(gene_group);
|
|
|
|
print_best_data(gene_group); |
|
|
|
|
|
|
|
|
|
|
|
double best = gene_group[0].length; |
|
|
|
|
|
|
|
int bg = 0; |
|
|
|
|
|
|
|
for(i = 0; i < GENERATION; i++) { |
|
|
|
for(i = 0; i < GENERATION; i++) { |
|
|
|
/* 選択 */ |
|
|
|
/* 選択 */ |
|
|
|
selection(gene_group); /* この関数を実験で作成 */ |
|
|
|
selection(gene_group); /* この関数を実験で作成 */ |
|
|
|
@ -107,29 +100,21 @@ int main(int argc, char *argv[]) |
|
|
|
|
|
|
|
|
|
|
|
/* 適合度計算 */ |
|
|
|
/* 適合度計算 */ |
|
|
|
calculate_fitness(gene_group, city); |
|
|
|
calculate_fitness(gene_group, city); |
|
|
|
if (gene_group[0].length < best) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
best = gene_group[0].length; |
|
|
|
|
|
|
|
bg = i; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#if PRINT_PROCESS |
|
|
|
#if PRINT_PROCESS |
|
|
|
/* 進化中のデータ表示 */ |
|
|
|
/* 進化中のデータ表示 */ |
|
|
|
//printf("GENERATION %d\n", i);
|
|
|
|
printf("GENERATION %d\n", i); |
|
|
|
//print_data(gene_group);
|
|
|
|
print_data(gene_group); |
|
|
|
/* print_best_data(gene_group); */ |
|
|
|
/* print_best_data(gene_group); */ |
|
|
|
#endif /* PRINT_PROCESS */ |
|
|
|
#endif /* PRINT_PROCESS */ |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
printf("%d, %.2f, %d, %.2f, %d\n", aaa, MUTATION_RATIO, SELECT_NUM, best, bg); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* 進化終了時のデータ表示 */ |
|
|
|
/* 進化終了時のデータ表示 */ |
|
|
|
//printf("FINAL RESULT\n");
|
|
|
|
printf("FINAL RESULT\n"); |
|
|
|
#if PRINT_GENE /* 2/2 */ |
|
|
|
#if PRINT_GENE /* 2/2 */ |
|
|
|
print_gene_group(gene_group); |
|
|
|
print_gene_group(gene_group); |
|
|
|
#endif /* PRINT_GENE 2/2 */ |
|
|
|
#endif /* PRINT_GENE 2/2 */ |
|
|
|
//print_best_data(gene_group);
|
|
|
|
print_best_data(gene_group); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return 0; |
|
|
|
return 0; |
|
|
|
} |
|
|
|
} |