我正在尝试实现基于统一顺序的交叉,应该使用洗牌逻辑,如:
首字母:
a =[5, 1, 4, 6, 7, 8, 2, 3]
b =[6, 7, 5, 2, 8, 3, 4, 1]
随机选择不再改变的位置。剩下的 位置用按顺序复制的缺失元素填充 出现在另一个父对象中
a' =[ , 7, , 2, 8, , , 1]
b' =[ , 1, , 6, 7, , , 3]
从第二个交叉点开始计算尚未计算的值 存在于另一个父母的后代中 其值在初始阶段被子代复制的对象) 它们出现的顺序 输出:
a = [5, 7, 4, 2, 8, 6, 3, 1]
b = [5, 1, 2, 6, 7, 8, 4, 3]
我试图实现这个,但我的代码无法保存固定索引。你知道吗
你知道吗交叉.py你知道吗
import random
def uniformCrossover(indA, indB):
"""
Your Uniform Crossover Implementation
"""
crossprob = 0.1
size = min(len(indA), len(indB))
for i in range(size):
if random.random() < crossprob:
indA[i], indB[i] = indB[i], indA[i]
return indA, indB
a,b = uniformCrossover([5, 1, 4, 6, 7, 8, 2, 3], [6, 7, 5, 2, 8, 3, 4, 1])
目前没有回答
相关问题 更多 >
编程相关推荐