遗传算法排序,重复数据交叉
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}
第一种方法:
select一个随机索引,限制为染色体长度p(mid
)
将 p1 从 0 索引复制到 mid
索引到 p3
然后遍历 p2 并复制 p3 中不存在的值
第二种方法
select 2个随机索引(开始,结束)
将 p1 值从 start
复制到 p3 到 end
索引
遍历 p2 并复制 p3 中不存在的值
因此,避免重复值的基本思想就是循环并检查该值是否已存在于数组中。
第二种方法比较困难,因为你必须将 p1 从 start
索引复制到 end
索引并将其粘贴到 p3 的相同索引处,然后循环 p3 到 for empty/null p3 中不存在的 p2 的值和复制值。
如果您真的对人工智能感兴趣,我想我会关注 Artificial Intelligence StackExchange,尽管它仍在筹备中。
我的问题是如何进行交叉,避免重复?
考虑 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}
第一种方法:
select一个随机索引,限制为染色体长度p(
mid
)将 p1 从 0 索引复制到
mid
索引到 p3然后遍历 p2 并复制 p3 中不存在的值
第二种方法
select 2个随机索引(开始,结束)
将 p1 值从
start
复制到 p3 到end
索引遍历 p2 并复制 p3 中不存在的值
因此,避免重复值的基本思想就是循环并检查该值是否已存在于数组中。
第二种方法比较困难,因为你必须将 p1 从 start
索引复制到 end
索引并将其粘贴到 p3 的相同索引处,然后循环 p3 到 for empty/null p3 中不存在的 p2 的值和复制值。
如果您真的对人工智能感兴趣,我想我会关注 Artificial Intelligence StackExchange,尽管它仍在筹备中。