GA Jgap:避免重复(双重)染色体,其顺序不计算在内

时间:2014-04-22 12:51:48

标签: genetic-algorithm jgap

我用JGAP实现遗传算法来解决染色体是整数列表的问题(我希望在结果中保留N个合适的解决方案,而不仅仅是最适合的解决方案)。

每个整数必须在染色体中只出现一次(我是通过将fitness = 0设置为具有重复等位基因的染色体来实现的,并且它可以......)

我的问题:

在我的问题中,数字出现在染色体中的顺序并不算数(1 2 3与2 1 3相同)。

因此,在执行结束时,我列出了可能的解决方案

我使用此处报告的解决方案(using JGAp (genetic algorithm library) and the duplicated chromosomes)以这种方式删除重复的染色体:

      conf.getNaturalSelectors(false).clear();
      BestChromosomesSelector bcs = new BestChromosomesSelector(conf, 0.8d);
      bcs.setDoubletteChromosomesAllowed(false);
      conf.addNaturalSelector(bcs, false);

但是它只删除了相同的染色体,例如它并没有删除:

A B C D 
A C B D 
B A C D

我问题中的那些染色体代表了相同的解决方案

所以我最终得到的染色体列表具有相同的适应性和相同的含义,但基因的顺序不同。

我怎样才能删除代表相同解决方案的染色体,尽管它的表示顺序是什么?

谢谢你,祝你有个美好的一天。

1 个答案:

答案 0 :(得分:0)

在存储之前简单地对染色体进行分类。 由于同一组整数的不同排列将排序为相同的序列,因此您可以使用已经使用的代码来删除重复项。