2

我实现了jenes库提供的 Java 示例(教程 5:ObjectChromosome‎</a>)。我发现人群中的个体都是相同的(即没有发生随机化);

我在 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,(红色)] [6,20,0.5623470035526044,false,false,(红色)] [6,20,0.56234700355526044 )] [6,20,0.5623470035526044,false,(红色)] [6,20,0.5623470035526044,false,false,(red)] [6,20,0.5623470035526044 (红色) ] [ 6 ,20 , 0.5623470035526044 , 假 , (红色) ] [ 6 , 20 ,0.5623470035526044 , 假 , (红色) ]

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

4

2 回答 2

0

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

尽管如此,我还是大胆猜测一下:

1)你得到的每个循环:

ObjectChromosome chrom = individual.getChromosome();

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

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

ETC...

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

于 2012-07-20T14:20:02.610 回答
0

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

ga.addStage(new SimpleMutator(0.02));

对于这样的事情:

ga.addStage(new SimpleMutator(0.2));

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

于 2016-07-20T17:14:39.600 回答