DEAP 进化模块,始终评估整个种群

DEAP evolutionary module, always evaluate entire population

我正在尝试用 DEAP 解决一个非确定性问题。问题是该模块只评估新染色体并使用保存在内存中的旧染色体分数。

我如何设置模块,以便在每一代都对整个种群进行评估,而不仅仅是新种群?

感谢

我不认为 DEAP 包可以做到这一点。 您可以简单地自己实现算法或找到新的包。

无论如何,请查看我的库,其中包含大多数最先进的元启发式算法。它还评估每一代的整个人口。 https://github.com/thieunguyen5991/mealpy

您可以修改当前所选算法中的 2-3 行,如下所示,以强制对所有项目进行评估。这可以通过从源代码复制到您的本地脚本,然后编辑 invalid_individual 标记的项目检查预评估来完成。确保在 main 中调用 local easimple 而不是 algorithms.easimple 以切换到本地代码。

如果您使用 easimple 或 eaMuPlusLambda,例如,您可以在此文件中找到该函数: https://github.com/DEAP/deap/blob/master/deap/algorithms.py#L85

这里的第 0 代案例可能不会改变(但无论如何都可以改变,除非你的个人已经具备健康并且你想跳过评估​​):

#(line 149 in above URL)
invalid_ind = [ind for ind in population if not ind.fitness.valid]

然后在生成过程循环中:

#(line 171 in url above):
invalid_ind = [ind for ind in offspring if not ind.fitness.valid]

删除无效检查将导致所有项目都通过评估:

invalid_ind = [ind for ind in population] #149
...
invalid_ind = [ind for ind in offspring] #171

但保留算法导入!请注意,您还需要将 varAnd(简单的情况) 更改为 algorithms.varAnd 以防止中断。

offspring = algorithms.varAnd(offspring, toolbox, cxpb, mutpb)