通过遗传算法进行排序,跨越重复数据

通过遗传算法进行排序,跨越重复数据

问题描述:

我的问题是如何执行交叉并避免重复?

考虑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; 
} 
+0

嗯 - 没有。在两个唯一值数组中,如果交换的元素是相同的,则只能交换元素并且不会在结果中有重复项,从而导致交换没有意义。如果这是一个练习,我们可以看看问题的表达方式吗? –

+0

@ 500-InternalServerError nope这不是一个家庭作业,它只是为了学习...问题是使用遗传算法对数组进行排序,就是这样,此外,在遗传算法中使用交叉是必要的... –

+0

什么让你认为排序是GAs的一个很好的应用程序? –

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

问题在于是否存在重复值。

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

P1 = {1,2,3,4,5,6}和p2 = {A,B,C,d,E,F}

  1. 第一种方法:

    • 选择不限于染色体p(mid

    • 拷贝P1从0索引的长度的数量的随机索引索引到p3

    • 然后遍历p2和复制值,该值已经不在P3

  2. 第二方法

    • 选择2随机指数(开始,结束)

    • 将p1值从start复制到end指数

    • 遍历P2和复制值已经不在P3

所以基本思想,以避免重复的值会简单地遍历并检查是否值已经存在该数组或不。

第二种方法是比较困难的,因为你必须在同一指标从start指数复制P1到end指数并粘贴在P3,然后遍历P3为空/空值和P2复制值尚未在第3页。

如果你真的对人工智能感兴趣,我猜想Artificial Intelligence StackExchange虽然仍处于分期阶段。