Я использую класс GA1DArrayGenome в Генетической библиотеке GALib2.4. Моя цель состоит в том, чтобы оптимизировать список из 6 чисел с плавающей запятой, поэтому хромосомы должны выглядеть примерно так: [0,3 0,5 0,1 0,2 0,4 0,1], [0,03 0,04 0,1 0,2 0,05 0,8] …
У меня проблемы с инициализацией популяции, так как после вызова GASimpleGA :: evolve () я обнаружил, что независимо от того, какое случайное семя я использовал, гены каждой хромосомы равны [0 0 0 0 0 0].
Я проверил документацию и обнаружил, что для класса GA1DArrayGenome инициализатором по умолчанию является GAGenome :: NoInitializer, что, как я предполагаю, означает, что я должен найти другой инициализатор для этого класса генома?
void main() {
// ...
GARandomSeed(1);
GA1DArrayGenome<float> genome(6, &Objective);
genome.initializer(/* ?? */);
GASimpleGA ga(genome);
ga.populationSize(100);
ga.nGenerations(100);
ga.pMutation(0.001);
ga.pCrossover(0.6);
ga.evolve();
cout << ga.statistics().bestIndividual() << endl;
// ...
}
Выше процедура, которую я использую GALib. Он имитирует то, что было сделано в примере кода ex27.C вместе с библиотекой. Тем не менее, образец делал что-то вроде
// ...
GA1DArrayGenome<float> genome(2, Objective);
genome.initializer(::Initializer);
genome.mutator(::Mutator);
genome.comparator(::Comparator);
genome.crossover(::Crossover);
// ...
Я не совсем понимаю, что это значит, не используя пространство имен перед ‘::’.
Может ли кто-нибудь помочь мне в этом? Спасибо.
::Foo
без пространства имен перед означает, что Foo
объявлено в глобальном пространстве имен (то есть без пространства имен). Используйте это для «выхода» из вашего текущего пространства имен обратно в глобальное пространство. Другой пример будет ::std::string
то есть string
класс в std
пространство имен, которое не должно быть вложенным.
GA1DArrayGenome<T>
очень общий и не знает ничего о T
, Он не знает ни о приемлемых значениях, ни о том, как работать с этими значениями. Поэтому вам нужно предоставить инициализаторы, мутаторы и т. Д. Если вы просто хотите «из коробки» float
оптимизации, рассмотрите возможность использования производный класс GARealGenome
это идет с хорошими значениями по умолчанию. Смотрите пример 21 на странице GALib для демонстрационного кода.
Других решений пока нет …