цикл for создает словарь с x записями, но после цикла длина словаря составляет <x - PullRequest
0 голосов
/ 23 января 2019

Итак, я реализую генетический алгоритм для 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, но тщетно.

1 Ответ

0 голосов
/ 23 января 2019

Проверьте, существует ли ваш Ключ, прежде чем присваивать ему значение.

# Not sure if str(tuple(i)) will work - regardless apply logic like this to make the Key unique
counter = 0
while((str(tuple(i)) + '_' + str(counter)) in genFit.keys()):
  counter += 1
genFit[str(tuple(i) + '_' + str(counter)] = tmp
...