【问题标题】:GA Jgap: Avoid duplicates (doublettes) chromosomes where the order doesn't countGA Jgap:避免不计算顺序的重复(双峰)染色体
【发布时间】:2014-05-01 06:44:42
【问题描述】:

我正在使用 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

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

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

我怎样才能删除代表相同解决方案的染色体,不管它的表示顺序如何?

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

【问题讨论】:

    标签: genetic-algorithm jgap


    【解决方案1】:

    在存储染色体之前只需对它们进行排序。 由于同一组整数的不同排列将排序到相同的序列中,因此您可以使用您已经使用的代码来删除重复项。

    【讨论】:

    • 谢谢你,Pragy,我已经想到了,我想知道如何在 JGAP 中做到这一点,是否可以不扩展 JGAP 染色体,或者,如果不能,在哪里订购基因正确的方法,同时扩展它。但是您的回答还可以,谢谢.. 如果没有更好的结果,我会将其标记为正确。
    猜你喜欢
    • 2013-11-11
    • 2012-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-01
    • 1970-01-01
    相关资源
    最近更新 更多