Jenetics图书馆默认初始人口和健康计算

时间:2018-02-13 11:42:43

标签: java genetic-algorithm

我正在使用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;
}

1 个答案:

答案 0 :(得分: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)。