繁体   English   中英

使用 Jenetics,只有一条染色体显示出良好的结果

[英]Only one chromosome shows good results using Jenetics

我正在使用Jenetics库来解决 ga 问题。 我正在扩展官方示例以使用这样的几个染色体:

    List<BitChromosome> arr = new ArrayList<>();
    arr.add(BitChromosome.of(16, 0.5));
    arr.add(BitChromosome.of(16, 0.5));
    arr.add(BitChromosome.of(16, 0.5));
    Factory<Genotype<BitGene>> gtf = Genotype.of(arr);

并将eval函数更改为正好有 8 个 1 和 8 个 0:

    private static int eval(Genotype<BitGene> gt) {
    return 10 - Math.abs(gt.getChromosome()
            .as(BitChromosome.class)
            .bitCount()-8);

其他部分保持不变:

    // 3.) Create the execution environment.
    Engine<BitGene, Integer> engine = Engine
            .builder(Test1::eval, gtf)
            .build();

    // 4.) Start the execution (evolution) and
    //     collect the result.
    Genotype<BitGene> result = engine.stream()
            .limit(100)
            .collect(EvolutionResult.toBestGenotype());

我期待 ga go 产生 3 条染色体,使这个 eval 函数最大化,但我得到:

[01110010|00010111,01000000|00000100,10011101|01110110]

如您所见,只有第一个结果满足条件。 我怎样才能扩展这个例子,让所有染色体都最大化评估函数?

这正是我在查看适应度函数后所期望的。 您仅使用第一条染色体来计算适应度。 Genotype.getChromosome()方法返回第一条染色体。 它是Genotype.getChromosome(0)的快捷方式。 您的适应度函数中不考虑其他两条染色体。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM