首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Jenetics图书馆

使用Jenetics图书馆
EN

Stack Overflow用户
提问于 2018-12-02 20:17:24
回答 1查看 175关注 0票数 2

假设我想使用Jenetics库来解决一个问题,我打算使用20代。但是,我希望为前10代应用Elitism,并在其余的代中禁用它。我该怎么做?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-02 21:16:20

您可以通过使用ConcatEngine (可在io.jenetics.ext模块中获得)来完成这一任务。

代码语言:javascript
复制
import io.jenetics.DoubleGene;
import io.jenetics.EliteSelector;
import io.jenetics.MeanAlterer;
import io.jenetics.Mutator;
import io.jenetics.RouletteWheelSelector;
import io.jenetics.engine.Engine;
import io.jenetics.engine.EvolutionResult;
import io.jenetics.engine.EvolutionStreamable;
import io.jenetics.engine.Limits;
import io.jenetics.engine.Problem;

import io.jenetics.ext.engine.ConcatEngine;

public class Elite {
    public static void main(final String[] args) {
        // Your problem definition.
        final Problem<double[], DoubleGene, Double> problem = null;

        // Evolution Engine with elitism selector.
        final Engine<DoubleGene, Double> eliteEngine = Engine.builder(problem)
            .minimizing()
            .selector(new EliteSelector<>())
            .build();

        // Evolution Engine with RouletteWheelSelector.
        final Engine<DoubleGene, Double> remainingEngine = Engine.builder(problem)
            .minimizing()
            .selector(new RouletteWheelSelector<>())
            .build();

        // Concatenation of the two engine.
        final EvolutionStreamable<DoubleGene, Double> engine = ConcatEngine.of(
            eliteEngine.limit(10),
            remainingEngine.limit(() -> Limits.bySteadyFitness(30))
        );

        final EvolutionResult<DoubleGene, Double> result = engine.stream()
            .collect(EvolutionResult.toBestEvolutionResult());

        System.out.println(result);
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53584225

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档