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



在DEAP算法中(请参阅此处的文档(,我注意到我们需要指定代数(NGEN(。有人告诉我,如果帕累托曲线是平滑的,就实现了收敛。

可以通过在统计信息中指定"平滑度"值来监视收敛性。但是,我仍然对如何定义"平滑度"感到困惑。例如,考虑此处指定的背包问题。在这个例子中,我们如何监控平滑度?通常,如何监视 DEAP 中的收敛?

您可以使用日志统计信息来监视各种度量值。只需将"平滑度"定义为可观察值,并在达到所需值时立即停止迭代。

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 。不过,它仍处于早期阶段。字形目前建立在 deap 之上,并试图隐藏样板代码。您也可以设置自定义中断条件:https://github.com/Ambrosys/glyph/blob/master/glyph/application.py#L131

最新更新