Итак, я реализую генетический алгоритм для TSP в Python.Чтобы вычислить следующее поколение, я реализую эту функцию:
def nextGen(currPop, distDict, numChrome, mutRate):
genFit = {}
for i in currPop:
tmp = fitness(i, distDict)
genFit[tuple(i)] = tmp
print(tmp)
genFitCum = dictCum(genFit)
print(len(genFit), len(currPop))
parentSelection = parents(genFitCum, numChrome)
children = breedPopulation(parentSelection, numChrome)
nextGeneration = mutatePop(children, mutRate)
return nextGeneration
distDict
- это словарь с расстояниями между различными городами.numChrome
- количество хромосом.mutRate
- скорость мутации.
Теперь, после первого поколения, я получаю ошибку за пределами, которых не должно быть, поскольку все это в циклах.
Проблема в том, что длина currPop постоянна (numChrome), но длина genFit уменьшается.Это после того, как цикл запускается в течение времени numChrome.
Я подумал, что, возможно, моя реализация копит пространство на диске.Я пытался использовать del
, но тщетно.