首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DEAP进化模块,总是评估整个种群

DEAP进化模块,总是评估整个种群
EN

Stack Overflow用户
提问于 2020-06-13 17:19:26
回答 2查看 242关注 0票数 1

我试着用DEAP解决一个不确定的问题。问题是,该模块只对新染色体进行评估,并将保留在记忆中的分数用于旧染色体。

我如何设置模块,这样每一代都将评估整个群体,而不仅仅是新的群体?

Thx

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-21 13:52:20

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

例如,如果您使用的是易趣程序或eaMuPlusLambda,您可以在以下文件中找到该函数:https://github.com/DEAP/deap/blob/master/deap/algorithms.py#L85

这里的第0代情况可能不会改变(但无论如何也可以改变,除非您的个人已经具备了健身能力,并且您希望跳过评估):

代码语言:javascript
复制
#(line 149 in above URL)
invalid_ind = [ind for ind in population if not ind.fitness.valid]

然后在分代过程循环中:

代码语言:javascript
复制
#(line 171 in url above):
invalid_ind = [ind for ind in offspring if not ind.fitness.valid]

删除无效的检查将导致将所有项传递给评估:

代码语言:javascript
复制
invalid_ind = [ind for ind in population] #149
...
invalid_ind = [ind for ind in offspring] #171

但是保持算法的导入!注意,还需要将varAnd(易易用的情况)更改为algorithms.varAnd,以防止中断。

代码语言:javascript
复制
offspring = algorithms.varAnd(offspring, toolbox, cxpb, mutpb)
票数 1
EN

Stack Overflow用户

发布于 2020-07-11 06:52:21

我不认为DEAP包能做到这一点。您只需自己实现该算法或找到新的包。

无论如何,看看我的图书馆包含了大多数最先进的元启发式算法。它还对每一代人的全部人口进行评估。https://github.com/thieunguyen5991/mealpy

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62363270

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档