实现cxPartialyMatched 部分匹配交叉确保两个染色体变异之后没有重复的基因写出代码
以下是Python实现:
import random
def cxPartialyMatched(ind1, ind2):
size = min(len(ind1), len(ind2))
p1, p2 = [0]*size, [0]*size
# 初始化交叉点位置
cxpoint1 = random.randint(0, size)
cxpoint2 = random.randint(0, size - 1)
if cxpoint2 >= cxpoint1:
cxpoint2 += 1
else:
cxpoint1, cxpoint2 = cxpoint2, cxpoint1
# 部分匹配交叉
for i in range(cxpoint1, cxpoint2):
# 交换父代中的基因
p1[i], p2[i] = ind2[i], ind1[i]
# 处理重复基因
for i in range(size):
if i < cxpoint1 or i >= cxpoint2:
# 从父代中获取重复基因的位置
gene1, gene2 = ind1[i], ind2[i]
pos1, pos2 = p1.index(gene1), p2.index(gene2)
# 交换重复基因的位置
p1[pos1], p1[i] = p1[i], p1[pos1]
p2[pos2], p2[i] = p2[i], p2[pos2]
return (p1, p2)
该函数接受两个染色体作为输入,返回交叉后的两个染色体。实现方式是先随机选择两个交叉点,然后将交叉点之间的基因进行交换。接着,处理交叉点之外的重复基因,将相同的基因按照另一个父代中的位置进行交换。最后,返回交叉后的染色体。
原文地址: https://www.cveoy.top/t/topic/bV6v 著作权归作者所有。请勿转载和采集!