Я заинтересован в применении генетического алгоритма с использованием DEAP в Python. Пример реализации для knapasack can be seen here. Я пытаюсь создать свою собственную функцию кроссовера, и я хочу, чтобы сохранить длину родителей следующим образом:Как сохранить переменную длину
# 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,
Какой тип индивидуума? похоже, что это 'set'? '.add' будет no-op, если операнд уже существует. –
Да, отдельные функции как набор. Что вы подразумеваете под no-op? – meraxes