Jenetics 库默认的初始种群和适应度计算
Jenetics library default initial population and fitness calculation
我正在使用 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;
}
第一个问题的答案是肯定的。种群中缺失的个体是随机产生的。但更重要的是,您在从文件创建初始种群时犯了一个错误。我想你会喜欢做如下的事情。
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
)的适应度。
我正在使用 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;
}
第一个问题的答案是肯定的。种群中缺失的个体是随机产生的。但更重要的是,您在从文件创建初始种群时犯了一个错误。我想你会喜欢做如下的事情。
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
)的适应度。