Как определить инициализатор для GA1DArrayGenome & lt; float & gt; в Галибе?

Я использую класс 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);
// ...

Я не совсем понимаю, что это значит, не используя пространство имен перед ‘::’.

Может ли кто-нибудь помочь мне в этом? Спасибо.

0

Решение

Пространства имен

::Foo без пространства имен перед означает, что Foo объявлено в глобальном пространстве имен (то есть без пространства имен). Используйте это для «выхода» из вашего текущего пространства имен обратно в глобальное пространство. Другой пример будет ::std::stringто есть string класс в std пространство имен, которое не должно быть вложенным.

Инициализаторы

GA1DArrayGenome<T> очень общий и не знает ничего о T, Он не знает ни о приемлемых значениях, ни о том, как работать с этими значениями. Поэтому вам нужно предоставить инициализаторы, мутаторы и т. Д. Если вы просто хотите «из коробки» float оптимизации, рассмотрите возможность использования производный класс GARealGenome это идет с хорошими значениями по умолчанию. Смотрите пример 21 на странице GALib для демонстрационного кода.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]