0
私はJenetics
ライブラリを使用してgaの問題を解決しています。Jeneticsを使用して1つの染色体のみが良好な結果を示します
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);
そして正確に8 1と8 0持ってeval
機能を変更します:
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());
私は、この評価関数を最大化する3つの染色体を生成することを期待していましたが、私は得ています:
[01110010|00010111,01000000|00000100,10011101|01110110]
ご覧のとおり、最初の結果のみが条件を満たしています。すべての染色体が評価関数を最大にするように、この例をどのように拡張できますか?