for 循环创建一个包含 x 个条目的字典,但在循环之后,字典的长度为 < x

for loop creates a dictionary with x entries but after the loop, length of dictionary is < x

因此,我正在 Python 中实现 TSP 的遗传算法。为了计算下一代,我实现了这个函数:

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 次之后。

我想也许我的实现是在磁盘上囤积 space。我尝试使用 del 但没有成功。

在为它分配值之前检查您的键是否已经存在。

# 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