我正在用JGAP实现一个遗传算法来解决染色体是一个整数列表的问题(我希望在结果中保持N个良好的拟合解,而不仅仅是最合适的)。
每个整数必须在染色体上出现一次(我将fitness=0设置为具有重复等位基因的染色体,这样就可以了.)
我的问题是:
在我的问题中,数字出现在染色体上的顺序是不计数的(12,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
我问题中的那些染色体代表着同样的解决方案。
因此,我最终得到了一份染色体列表,这些染色体具有相同的适配性和相同的含义,但基因的顺序不同。
我怎样才能删除代表同样的解决方案的染色体,尽管其代表的顺序如何?
谢谢,祝你今天愉快。
发布于 2014-04-30 22:44:42
只需先对染色体进行排序,然后再储存。由于同一组整数的不同排列将排序为相同的序列,所以可以使用已经使用的代码删除重复的序列。
https://stackoverflow.com/questions/23220166
复制相似问题