0

我正在使用Jenetics以获取最大程度地解决问题的最佳个人。人口规模如何影响个人?

想象一下,我有从文件中读取的初始人口放入列表中

while( (line = bf.readLine())!=null){
String[] tokens = line.split(",");
chromossomes.add(IntegerChromosome.of(
  IntegerGene.of(Integer.parseInt(tokens[0]),0,100),                                            
  IntegerGene.of(Integer.parseInt(tokens[1]),0,100),                                                  
  IntegerGene.of(Integer.parseInt(tokens[2]),0,100)); 
}

如果文件包含即 10 条染色体,然后我将人口设置为 100,那么剩余的 90 个人是随机创建的吗?

我也想知道这个适应度函数是否正确

private static int eval(Genotype<IntegerGene> gt) {
   int best=0,fitness=0;
   for(int i=0;i<gt.length();i++) {
       fitness = getFitness(gt.getChromosome(i));
       if (fitness > best){
           best = fitness;
       }
   }
 return best;
}
4

1 回答 1

0

第一个问题的答案是肯定的。人口中的失踪个体是随机创建的。但更重要的是,您在从文件创建初始人口时犯了一个错误。我想你想做如下的事情。

final String[] lines = ...;
final ISeq<Genotype<IntegerGene>> population = Arrays.stream(lines)
    .mapToInt(Integer::parseInt)
    .mapToObj(i -> IntegerChromosome.of(IntegerGene.of(i, 0, 100)))
    .map(ch -> Genotype.of(ch))
    .collect(ISeq.toISeq());

Genotype这将在每行创建一个单独的 ( )。

您的第二个代码被剪断,看起来您正试图从一个人的染色体中计算出最佳值。我认为您将Genotype(一个人)与人口(基因型列表)混淆了。适应度函数总是计算一个个体的适应度 ( Genotype)。

于 2018-02-13T12:10:53.500 回答