如何在DEAP中测试收敛(Pareto前沿的平滑度)

时间:2017-02-08 00:26:36

标签: python genetic-algorithm deap

在DEAP算法(see documentation here)中,我注意到我们需要指定代数(NGEN)。有人告诉我,如果帕累托曲线平滑,就已经实现了收敛。

可以通过指定"平滑度"来监控收敛。统计数据中的值。但是,我仍然对如何定义"平滑度感到困惑。例如,考虑Knapsack problem specified here。在这个例子中,我们如何监控平滑度?一般来说,如何监控DEAP的收敛?

1 个答案:

答案 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