热线电话:13121318867

登录
2019-01-23 阅读量: 1878
循环之后,字典的长度为

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

我想也许我的实现是在磁盘空间上囤积。我尝试使用del但是徒劳无功。

0.0000
3
关注作者
收藏
评论(1)

发表评论
啊啊啊啊啊吖
2019-01-23

问题找到了,在为其分配值之前,我需要检查的密钥是否已存在。

# 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

0.0000 0 0 回复