遗传算法排序,重复数据交叉

Sorting By Genetic Algorithm, Duplicate Data In Cross Over

我的问题是如何进行交叉,避免重复?

考虑 p1 = {1, 2, 5, 6, 3, 4}p2 = {2, 6, 5, 4, 1, 3}

交叉之一是res = {1, 2, 5 , 6, 1 ,3}

如您所见,存在重复...

我们能避免吗?



这是我的代码

private static Chromosome crossover(Chromosome chromosome1, Chromosome chromosome2) {
    Chromosome newChromosome = new Chromosome();
    for (int i = 0; i < chromosome1.size(); i++) {
        if (Math.random() < uniformRate) {
            newChromosome.addGene(chromosome1.getGene(i));
        } else {
            newChromosome.addGene(chromosome2.getGene(i));
        }
    }
    return newChromosome;
}

根据不同的问题,有不同的交叉技术。

问题是是否可以有重复值。

您使用的方法允许重复值。为避免这种情况,我建议遵循各种算法:

p1={1,2,3,4,5,6} 和 p2={a,b,c,d,e,f}

  1. 第一种方法:

    • select一个随机索引,限制为染色体长度p(mid)

    • 将 p1 从 0 索引复制到 mid 索引到 p3

    • 然后遍历 p2 并复制 p3 中不存在的值

  2. 第二种方法

    • select 2个随机索引(开始,结束)

    • 将 p1 值从 start 复制到 p3 到 end 索引

    • 遍历 p2 并复制 p3 中不存在的值

因此,避免重复值的基本思想就是循环并检查该值是否已存在于数组中。

第二种方法比较困难,因为你必须将 p1 从 start 索引复制到 end 索引并将其粘贴到 p3 的相同索引处,然后循环 p3 到 for empty/null p3 中不存在的 p2 的值和复制值。

如果您真的对人工智能感兴趣,我想我会关注 Artificial Intelligence StackExchange,尽管它仍在筹备中。