遗传算法染色体交叉python实现
【代码】遗传算法染色体交叉python。遗传算法中两条染色体交叉思想简单,实现略微复杂,所以借鉴https://blog.csdn.net/weixin_41606064/article/details/100862016重新封装了一下,并对其中不完善的地方做了修改
·
遗传算法中两条染色体交叉思想简单,实现略微复杂,所以借鉴https://blog.csdn.net/weixin_41606064/article/details/100862016重新封装了一下,并对其中不完善的地方做了修改,步骤如下:
- step1:从采用自然数编码的种群中,获取两条染色体,作为父代染色体;
- step2:随机产生两个随机数满足
0≤k1<k2≤LIND
,LIND
为染色体的长度,如k1 = 3
,k2 =6
作为截取染色体片段的起始位置,再将截取到的两个片段进行位置交换 - step3: 解决编码重复性的冲突问题。根据映射关系,对重复基因进行修改。
def cross(chrom1: [], chrom2: []):
i = np.random.randint(low=0, high=len(chrom1) - 3)
j = i + 2
chrom1 = chrom1.tolist()
chrom2 = chrom2.tolist()
key = chrom1[i:j]
val = chrom2[i:j]
duplicates = []
for e in key:
if e in val:
duplicates.append(e)
for e in duplicates:
key.remove(e)
val.remove(e)
chrom1[i:j], chrom2[i:j] = chrom2[i:j], chrom1[i:j]
for k in range(i):
if chrom1[k] in val:
chrom1[k] = key[val.index(chrom1[k])]
if chrom2[k] in key:
chrom2[k] = val[key.index(chrom2[k])]
for l in range(j, len(chrom1)):
if chrom1[l] in val:
chrom1[l] = key[val.index(chrom1[l])]
if chrom2[l] in key:
chrom2[l] = val[key.index(chrom2[l])]
更多推荐
已为社区贡献2条内容
所有评论(0)