嗨,我正在研究遗传算法。我想知道是否有人可以帮助我完成交叉步骤。
例子:
dad=[1,2,3,4,5,6,7]
mom=[2,3,6,1,7,5,4]
我想在dad中选择一个随机子集,子集的大小也可以是随机的。例如,[1,2,3] 或 [3,4,5] 或 [2,3,4] 或 [1,2] 或 [4,5] 或 [1,2,3,4] 但它们必须按照爸爸的原始顺序。
例如,随机子集是 [2,3,4,5] 那么我希望我的后代是 [,2,3,4,5,,]。然后我想用妈妈的名单来填补空缺的地方。我想迭代妈妈的名单。首先考虑 2,2 已经在列表中,所以我跳过 2。然后考虑 3,3 也已经在列表后代中,所以我跳过 3。然后 6,6 不在后代列表中,所以我将添加 6第一个可用的位置。所以后代现在是 [6,2,3,4,5,,]。最终,offspring
应该是[6,2,3,4,5,1,7]
任何帮助将不胜感激!我认为我需要帮助的最困难的部分是如何到达这一步[,2,3,4,5,,]
通过妈妈的列表进行迭代可能对我来说是可行的。
更新代码
dad=[1,2,3,4,5,6,7]
mom=[2,3,6,1,7,5,4]
upper=random.randint(0,len(dad)-1)
lower=random.randint(0,len(dad)-1)
slice=dad[lower:upper]
child=copy.deepcopy(dad)
j =0
for i in child:
if i not in slice:
child[j] = 0
j+=1
n=len(child)
h=0
k=0
while k <= len(child)-1:
if child[k] == 0:
if mom[h] not in slice:
child[k]=mom[h]
h+=1
k+=1
else:
h+=1
else:
k+=1