如何在 DEAP 中测试收敛性(帕累托前沿的平滑度)

How to test for convergence (smoothness of Pareto front) in DEAP

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

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

您可以使用日志统计来监控各种措施。 只需将 "smoothness" 定义为可观察对象,并在达到所需值后立即退出迭代。

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 . It is still in its early stages though. Glyph is build on top of deap currently and tries to hide the boilerplate code. You can set custom break conditions too: https://github.com/Ambrosys/glyph/blob/master/glyph/application.py#L131