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)
我正在尝试用 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)