我对在 Python 中使用 DEAP 应用遗传算法很感兴趣。可以在此处查看背包的示例实现。我正在尝试创建自己的交叉函数,并且我想保留父母的长度如下:
# Crossover
def crossover(ind1, ind2):
print len(ind1), len(ind2) #<------ length at the beginning
temp1 = copy.deepcopy(set(ind1))
temp2 = copy.deepcopy(set(ind2))
uniform = list(temp1.union(temp2))
while len(ind1) > 0:
ind1.pop()
while len(ind2) > 0:
ind2.pop()
for i in range(max_no):
ind1.add(random.choice(uniform))
ind2.add(random.choice(uniform))
print len(ind1), len(ind2) #<---- length at the end
return ind1, ind2
但是,函数开头的 ind1 和 in2 的长度与末尾的 ind1 和 ind2 的长度不同。ind1 和 ind2 开头的长度都应该等于 max_no。我希望有人能给我一个暗示为什么会这样。我很困惑。
谢谢,任何帮助将不胜感激。
编辑:这是我的突变功能。如您所见,我还试图在此处保留个人的可变长度
def mutation(individual):
if len(individual) > 0:
individual.remove(random.choice(list(individual)))
individual.add(random.choice(nodes))
return individual,