首页 > 解决方案 > Mystic - 如何正确停止优化

问题描述

我有一个相当大且复杂的 Python 应用程序,我最近添加了使用 Mystic ( https://github.com/uqfoundation/mystic )执行非线性优化的能力。优化在与主 (GUI) 线程不同的线程中运行。我天真地使用fmin_powellanddiffev来运行优化。

由于目标函数的评估可能很长,因此用户可以单击“停止”按钮并停止模拟。

也就是说,我还没有找到一种智能方法来实际停止优化线程,因为似乎没有停止fmin_powellordiffev函数。我不需要能够在模拟中间停止当前函数评估,我也很乐意等到当前函数评估完成后再停止优化。

有谁知道这是否真的可能?

预先感谢您的帮助。

安德里亚。

标签: pythonnonlinear-optimizationmystic

解决方案


我是mystic作者。一般有两种方式。

如果您使用的是函数接口(即mystic.solvers.diffev2(...)),那么您可以使用关键字handler=True。如果您执行信号中断,它将暂停已启用处理程序的正在运行的求解器。需要注意两点:(1)您必须在调用求解器时启用处理程序,以及(2)对于并行运行的求解器,它可能不会立即生效。

类接口 (ie solver = mystic.solvers.DifferentialEvolutionSolver(...)) 允许您使用处理程序 (ie solver.enable_signal_handler()),和/或您也可以滚动您自己的解决方案solver.Step()-- 异步进行优化。如果您使用Step,它将一次只运行一次迭代,因此您可以编写自己的控件来控制求解器如何进行。


推荐阅读