在DEAP算法(see documentation here)中,我注意到我们需要指定代数(NGEN)。有人告诉我,如果帕累托曲线平滑,就已经实现了收敛。
可以通过指定"平滑度"来监控收敛。统计数据中的值。但是,我仍然对如何定义"平滑度感到困惑。例如,考虑Knapsack problem specified here。在这个例子中,我们如何监控平滑度?一般来说,如何监控DEAP的收敛?
答案 0 :(得分:2)
您可以使用日志统计信息来监控各种措施。 只需定义"平滑度"作为一个可观察的,一旦它达到你想要的价值就退出迭代。
def smoothness(pop):
pareto = tools.ParetoFront()
pareto.update(pop)
return xxx # <-- need to fill you measure here
stats = tools.Statistics()
stats.register("smoothness", smoothness)
如果您使用deap进行符号回归,可能需要查看https://github.com/Ambrosys/glyph。尽管如此,它仍处于早期阶段。 Glyph目前构建在deap之上,并试图隐藏样板代码。您也可以设置自定义中断条件:https://github.com/Ambrosys/glyph/blob/master/glyph/application.py#L131