我正在使用Jenetics尝试多目标优化问题(MOP)。我创建的一个玩具问题是从给定的集合中选择两个子集,在每个子集都有限制的情况下最大化它们的总和。但是我想确保这两个子集是互斥的。创建两条染色体的基因型时如何设置此约束?
我用于解决玩具问题的套装是:
private static final ISeq<Integer> SET = ISeq.of( IntStream.rangeClosed( 1, 10 ) .boxed() .collect( Collectors.toList() ) );
我的问题的签名是:
Problem<List<ISeq<Integer>>, BitGene, Vec<int[]>>
编解码器是:
@Override public Codec<List<ISeq<Integer>>, BitGene> codec() {
Objects.requireNonNull( SET );
final Genotype<BitGene> g =
Genotype.of( BitChromosome.of( SET.length() ), BitChromosome.of( SET.length() ) );
return Codec.of(
g,
gc -> gc.stream().map( z -> z.as( BitChromosome.class ).ones().mapToObj( SET )
.collect( ISeq.toISeq() ) ).collect( Collectors.toList() )
);
}
我为第一个子集指定了 9 个限制,为第二个子集指定了 4 个限制。
我预计两个染色体的初始群体具有互斥的基因,这样表型最终将产生不具有从 . 中复制的项目的个体SET。
我当前得到的示例输出是:
[[4,5], [4]]
但我希望两个人都有互斥的物品。如何通过 Jenetics 实现这一目标?
LEATH
繁花如伊
相关分类