我使用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;
}发布于 2018-02-13 12:10:53
第一个问题的答案是肯定的。人口中失踪的个体是随机产生的。但更重要的是,在从文件创建初始填充时,您犯了一个错误。我想你会喜欢这样做的。
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)的适应度。
https://stackoverflow.com/questions/48766037
复制相似问题