我正在使用GALib2.4遗传库中的GA1DArrayGenome类。我的目标是优化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类,默认的Initializer是一个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 :(得分:0)
前面没有命名空间的::Foo
意味着选择了在全局命名空间中声明的Foo
(即没有命名空间)。使用此命令从当前命名空间“转义”回全局空间。另一个示例是::std::string
,即string
命名空间中不能嵌套的std
类。
GA1DArrayGenome<T>
非常通用,对T
不了解。它不了解可接受的值,也不知道如何处理这些值。因此,您需要提供初始化程序,变更程序等。如果您只想“开箱即用”float
优化,请考虑使用derived class GARealGenome
that comes with good defaults。有关演示代码,请参阅GALib页面上的示例21.