【问题标题】:Jenetics library default initial population and fitness calculationJenetics 库默认初始种群和适应度计算
【发布时间】:2018-07-23 18:39:57
【问题描述】:

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

【问题讨论】:

    标签: java genetic-algorithm jenetics


    【解决方案1】:

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

    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)。

    【讨论】:

    • 谢谢,是的,我混淆了个人和人口。如果有工厂,我如何指定我的工厂,和/或如何在我的引擎中包含人口。以前我有一个 Factory> gtf = Genotype.of(chromossomes)
    • 基因型工厂只创造一个个体。因此,在您的示例中,您将像 Factory> gtf = Genotype.of(IntegerChromosome.of(0, 100)) 一样创建它。从初始种群创建进化流将如下所示: ISeq> genotypes = ...; engine.stream(genotpyes) ...
    • 我实际上是在谈论在 Engine 类的 .builder() 中使用什么
    • 只写Engine.builder(MainClass::eval, gtf);
    • 所以如果要使用初始种群,我还是要使用“Factory> gtf = Genotype.of(IntegerChromosome.of(0, 100))”,然后指定在 engine.stream() 中,我最初的个人流。我猜对了吗?
    猜你喜欢
    • 2022-01-08
    • 1970-01-01
    • 2014-10-15
    • 2018-07-27
    • 2019-10-04
    • 1970-01-01
    • 1970-01-01
    • 2012-11-29
    • 1970-01-01
    相关资源
    最近更新 更多