首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jenetics,如何用遗传算法找到集合的子集

Jenetics,如何用遗传算法找到集合的子集
EN

Stack Overflow用户
提问于 2017-04-04 11:50:35
回答 1查看 281关注 0票数 1

我想找出最好的子集。假设我们需要找到对象的子集。我们得到了这个子集的一些适应度函数。因此,在开始时,我们应该建立一个子集的总体,然后使用遗传算法,我们应该试图找到最好的子集。

我想使用Jenetics.io,但在这种情况下我不知道如何使用它。对我来说,问题是染色体的数据结构和子集有很大的不同。

我想有一个功能(人口,健身功能),使所有需要的工作。

我试着去了解杰尼提斯到底是怎么工作的。也许我错了,但我认为没有办法让它以我想要的方式运作。

请给我一些建议,也许在这种情况下可以选择使用Jenetics?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-04 12:13:57

子集库中有一个杰尼提斯示例。从本质上讲,它有以下形式:

代码语言:javascript
复制
class SubsetExample
    implements Problem<ISeq<MyObject>, EnumGene<MyObject>, Double>
{
    // Define your basic set here.
    private final ISeq<MyObject> basicSet = ISeq.empty();
    private final int subSetSize = 5;

    @Override
    public Function<ISeq<MyObject>, Double> fitness() {
        return subSet -> {
            assert(subset.size() == subSetSize);
            double fitness = 0;
            for (MyObject obj : subSet) {
                // Do some fitness calculation
            }

            return fitness;
        };
    }

    @Override
    public Codec<ISeq<MyObject>, EnumGene<MyObject>> codec() {
        return codecs.ofSubSet(basicSet, subSetSize);
    }

    public static void main(final String[] args) {
        final SubsetExample problem = new SubsetExample()

        final Engine<EnumGene<MyObject>, Double> engine = Engine.builder(problem)
            .minimizing()
            .maximalPhenotypeAge(5)
            .alterers(
                new PartiallyMatchedCrossover<>(0.4),
                new Mutator<>(0.3))
            .build();

        final Phenotype<EnumGene<MyObject>, Double> result = engine.stream()
            .limit(limit.bySteadyFitness(55))
            .collect(EvolutionResult.toBestPhenotype());

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

https://stackoverflow.com/questions/43206429

复制
相关文章

相似问题

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