individual ace; // aceのcostとして有り得ない大きさの値を初期値とする。 ace.cost = PENALTY * PENALTY; for(i = 0; 1; ga_next_genelation(), i++) { ga_ranking(); printf("%3d: cost %4d\n", i, population[0]->cost); // 20世代に1度、最優秀個体を調べる。 if(i % 20 == 0) { // 過去のaceより優秀なら、新たなaceとして採用する。 if(ace.cost > population[0]->cost) { for(j = 0; j < TOWN_COUNT) ace.pathway[j] = population[0]->pathway[j]; ace.cost = population[0]->cost; } // 過去のaceより優秀でなければ、これ以上の進化を期待できないと考え終了する。 else break; } }