通过遗传算法进行排序,跨越重复数据
问题描述:
我的问题是如何执行交叉并避免重复?
考虑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}
-
第一种方法:
选择不限于染色体p(
mid
)拷贝P1从0索引的长度的数量的随机索引索引到p3
然后遍历p2和复制值,该值已经不在P3
-
第二方法
选择2随机指数(开始,结束)
将p1值从
start
复制到end
指数遍历P2和复制值已经不在P3
所以基本思想,以避免重复的值会简单地遍历并检查是否值已经存在该数组或不。
第二种方法是比较困难的,因为你必须在同一指标从start
指数复制P1到end
指数并粘贴在P3,然后遍历P3为空/空值和P2复制值尚未在第3页。
如果你真的对人工智能感兴趣,我猜想Artificial Intelligence StackExchange虽然仍处于分期阶段。
嗯 - 没有。在两个唯一值数组中,如果交换的元素是相同的,则只能交换元素并且不会在结果中有重复项,从而导致交换没有意义。如果这是一个练习,我们可以看看问题的表达方式吗? –
@ 500-InternalServerError nope这不是一个家庭作业,它只是为了学习...问题是使用遗传算法对数组进行排序,就是这样,此外,在遗传算法中使用交叉是必要的... –
什么让你认为排序是GAs的一个很好的应用程序? –