簡體   English   中英

Jenetics ,如何使用 GA 找到集合的子集

[英]Jenetics , how to find subset of set using GA

我試圖找到集合的最佳子集。 想象一下,我們需要找到對象的子集。 我們已經得到了這個子集的一些適應度函數。 所以一開始我們應該做一個子集的總體,然后使用GA我們應該嘗試找到最好的子集。

我想使用 Jenetics.io,但我不知道在這種情況下如何使用它。 對我來說問題是染色體與子集的數據結構大不相同。

我想要一個函數(人口,適應度函數)來完成所有需要的工作。

我試圖了解 Jenetics 究竟是如何運作的。 也許我錯了,但我認為沒有辦法讓它按照我想要的方式工作。

請給我建議,也許在這種情況下可以選擇使用 Jenetics?

Jenetics庫中有一個子集示例。 本質上,它具有以下形式:

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);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM