Я работаю с GAlib из http://lancet.mit.edu/ga/ библиотека в C ++. Я создал типичный генетический алгоритм с этим кодом:
GA1DBinaryStringGenome genoma(trips.size(), Genotype::evaluator);
GASimpleGA ga(genoma);
ga.populationSize(popSize);
ga.nGenerations(genCant);
ga.pMutation(0.03);
ga.pCrossover(0.90);
ga.evolve(); // Launch
Тогда я получаю лучшего человека с
wladi << ga.statistics().bestIndividual();
Который является довольно стандартом. Но мой вопрос:
Как я могу получить Массив с лучшим фитнесом каждого поколения?
Я имею дело с той же проблемой прямо сейчас. Единственный обходной путь, который я придумал, — это создать собственную функцию терминатора (в основном):
GABoolean GATerminateUponGenerationWithStatePrintout(GAGeneticAlgorithm &ga)
{
cout << "Generation " << ga.generation() << " - best individual " << ga.statistics().bestIndividual() << endl;
return(ga.generation() < ga.nGenerations() ? gaFalse : gaTrue);
}
А затем свяжите настроенное завершение с вашим объектом GA:
GASimpleGA ga(genoma);
ga.terminator(GATerminateUponGenerationWithStatePrintout);
Таким образом, я могу получить ссылку на то, когда GA проверяет условие завершения в конце каждого поколения.
Других решений пока нет …