4

我正在运行一个遗传算法程序,可以在运行结束时找到最好的个体(hof[0]),但我想知道是哪一代产生了它。hof[0] 是否有任何属性可以帮助打印个人和创建它的一代。我尝试查看手册和谷歌寻找答案,但在任何地方都找不到。我也找不到可以打印的个人属性列表。有人可以指向正确的链接和文档。

谢谢

4

2 回答 2

1

这篇糟糕的帖子建议跟踪日志,或者明确地将一代与健身一起添加到个人: 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)
于 2020-11-23T13:40:02.097 回答
0

没有内置的方法可以做到这一点(但/据我所知),因此实现这一点可能是一项相当大的任务。其中最简单的(在思想上最简单,而不是在实现上)是将个体更改为元组,其中tup[0]个体和 tup[1] 是产生它的一代,或类似的东西。

如果您正在寻找一种 hacky 方式,您可以尝试将每一代的子代写入一个文本文件,并使用文本文件交叉检查您的最终解决方案;但除此之外,我不确定。

您可以随时尝试在他们的Google Group上发帖,但可能需要几天时间才能回复。

祝你好运!

于 2015-01-16T23:36:28.857 回答