重复的人口在同一人口中

时间:2012-07-20 13:35:02

标签: java genetic-algorithm genetic-programming

我实现了jenes库(Tutorial 5: ObjectChromosome‎)提供的Java示例。 我发现人口中的个体都是一样的(即没有发生随机化);

我在OCProblem类的ga.evolve();之后添加了以下代码,以便在人口中打印每个人:

ga.evolve();
Population pop= ga.getCurrentPopulation();
ArrayList population_test= pop.getIndividuals();

for(int n=0; n < population_test.size(); n++){
    Individual<ObjectChromosome> individual=(Individual<ObjectChromosome>) population_test.get(n);
    ObjectChromosome chrom = individual.getChromosome();

    int i1 = (Integer)chrom.getValue(0);
    int i2 = (Integer)chrom.getValue(1);
    double i3= (double)chrom.getValue(2);
    boolean i4= (boolean)chrom.getValue(3);
    Color i5= (Color)chrom.getValue(4);

    System.out.println("[ "+ i1+" , "+ i2+" , "+ i3+" , "+ i4+" , "+ i5+" ] "); 
}

输出令人震惊,个人被重复! 这是前一个代码的输出

  

指南5:找到最接近目标的颜色序列。 [6   ,20,0.5623470035526044,false,(RED)] [6,20   ,0.5623470035526044,false,(RED)] [6,20,0.5623470035526044,   false,(RED)] [6,20,0.5623470035526044,false,(RED)] [6   ,20,0.5623470035526044,false,(RED)] [6,20   ,0.5623470035526044,false,(RED)] [6,20,0.5623470035526044,   false,(RED)] [6,20,0.5623470035526044,false,(RED)] [6   ,20,0.5623470035526044,false,(RED)] [6,20   ,0.5623470035526044,false,(RED)]

有谁知道为什么jenes库中的随机方法对人口不起作用?

2 个答案:

答案 0 :(得分:0)

声明: 我对遗传算法,特别是这个库没有丝毫(好吧,也许是一些)想法。

然而,我会猜测:

1)你得到的每个循环:

ObjectChromosome chrom = individual.getChromosome();

然后高兴地使用一些名为 template 的变量丢弃此信息,该变量未在此范围内定义:

int i1 = (Integer)template.getValue(0);

等...

2)这个猜测有点超出了我的直接知识:检查所有人群。是否真的不可能将所有标本进化成具有相同的遗传指纹?

答案 1 :(得分:0)

显然,突变率太低(如果我正确理解他们的API,则为2%)。如果您更改此行:

  

ga.addStage(new SimpleMutator(0.02));

对于这样的事情:

  

ga.addStage(new SimpleMutator(0.2));

这会增加突变率。它应该解决问题。至于为什么他们在教程中有这种方式,我不知道,但我认为该教程与他们的最新版本有点过时。