Mystic - 如何正确停止优化

Mystic - how to properly stop an optimization

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

由于 objective 函数的计算可能很长,用户可以单击“停止”按钮停止模拟。

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

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

预先感谢您的帮助。

安德里亚

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

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

class 接口(即 solver = mystic.solvers.DifferentialEvolutionSolver(...))允许您使用处理程序(即 solver.enable_signal_handler()),and/or 您也可以使用 solver.Step() -- 异步进行优化。如果您使用 Step,它一次只会 运行 一次迭代,因此您可以编写自己的控件来控制求解器的运行方式。