我试着用DEAP解决一个不确定的问题。问题是,该模块只对新染色体进行评估,并将保留在记忆中的分数用于旧染色体。
我如何设置模块,这样每一代都将评估整个群体,而不仅仅是新的群体?
Thx
发布于 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代情况可能不会改变(但无论如何也可以改变,除非您的个人已经具备了健身能力,并且您希望跳过评估):
#(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)发布于 2020-07-11 06:52:21
我不认为DEAP包能做到这一点。您只需自己实现该算法或找到新的包。
无论如何,看看我的图书馆包含了大多数最先进的元启发式算法。它还对每一代人的全部人口进行评估。https://github.com/thieunguyen5991/mealpy
https://stackoverflow.com/questions/62363270
复制相似问题