我正在运行一个遗传算法程序,可以在运行结束时找到最好的个体(hof[0]),但我想知道是哪一代产生了它。hof[0] 是否有任何属性可以帮助打印个人和创建它的一代。我尝试查看手册和谷歌寻找答案,但在任何地方都找不到。我也找不到可以打印的个人属性列表。有人可以指向正确的链接和文档。
谢谢
我正在运行一个遗传算法程序,可以在运行结束时找到最好的个体(hof[0]),但我想知道是哪一代产生了它。hof[0] 是否有任何属性可以帮助打印个人和创建它的一代。我尝试查看手册和谷歌寻找答案,但在任何地方都找不到。我也找不到可以打印的个人属性列表。有人可以指向正确的链接和文档。
谢谢
这篇糟糕的帖子建议跟踪日志,或者明确地将一代与健身一起添加到个人: https ://groups.google.com/g/deap-users/c/r7fZbMwHg3I/m/BAzHh2ogBAAJ
对于后者:如果您在本地使用算法(建议在超出教程范围的情况下工作,因为总是会出现添加绘图或这个问题的问题),那么您可以修改适应度更新行以类似于:
fitnesses = toolbox.map(toolbox.evaluate, invalid_ind)
for ind, fit in zip(invalid_ind, fitnesses):
ind.fitness.values = fit
ind.generation = gen # now we can: print(hof[0].gen)
if halloffame is not None:
halloffame.update(population)
没有内置的方法可以做到这一点(但/据我所知),因此实现这一点可能是一项相当大的任务。其中最简单的(在思想上最简单,而不是在实现上)是将个体更改为元组,其中tup[0]
个体和 tup[1] 是产生它的一代,或类似的东西。
如果您正在寻找一种 hacky 方式,您可以尝试将每一代的子代写入一个文本文件,并使用文本文件交叉检查您的最终解决方案;但除此之外,我不确定。
您可以随时尝试在他们的Google Group上发帖,但可能需要几天时间才能回复。
祝你好运!