如何在 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
在 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