Mystic - 如何正确停止优化
Mystic - how to properly stop an optimization
我有一个相当大且复杂的 Python 应用程序,我最近添加了使用 Mystic (https://github.com/uqfoundation/mystic) 执行非线性优化的功能。优化 运行 在与主 (GUI) 线程不同的线程中进行。我天真地使用 fmin_powell
和 diffev
来 运行 优化。
由于 objective 函数的计算可能很长,用户可以单击“停止”按钮停止模拟。
也就是说,我还没有找到真正停止优化线程的智能方法,因为似乎无法停止 fmin_powell
或 diffev
函数。我不需要能够在模拟中间停止当前函数评估,我也很乐意等到当前函数评估完成后再停止优化。
有谁知道这是否真的可行?
预先感谢您的帮助。
安德里亚
我是 mystic
作者。一般有两种方式。
如果您使用的是函数接口(即mystic.solvers.diffev2(...)
),那么您可以使用关键字handler=True
。如果您执行信号中断,它将暂停启用了处理程序的 运行ning 求解器。需要注意两点:(1) 调用求解器时必须启用处理程序,以及 (2) 并行求解器 运行ning 可能不会立即生效。
class 接口(即 solver = mystic.solvers.DifferentialEvolutionSolver(...)
)允许您使用处理程序(即 solver.enable_signal_handler()
),and/or 您也可以使用 solver.Step()
-- 异步进行优化。如果您使用 Step
,它一次只会 运行 一次迭代,因此您可以编写自己的控件来控制求解器的运行方式。
我有一个相当大且复杂的 Python 应用程序,我最近添加了使用 Mystic (https://github.com/uqfoundation/mystic) 执行非线性优化的功能。优化 运行 在与主 (GUI) 线程不同的线程中进行。我天真地使用 fmin_powell
和 diffev
来 运行 优化。
由于 objective 函数的计算可能很长,用户可以单击“停止”按钮停止模拟。
也就是说,我还没有找到真正停止优化线程的智能方法,因为似乎无法停止 fmin_powell
或 diffev
函数。我不需要能够在模拟中间停止当前函数评估,我也很乐意等到当前函数评估完成后再停止优化。
有谁知道这是否真的可行?
预先感谢您的帮助。
安德里亚
我是 mystic
作者。一般有两种方式。
如果您使用的是函数接口(即mystic.solvers.diffev2(...)
),那么您可以使用关键字handler=True
。如果您执行信号中断,它将暂停启用了处理程序的 运行ning 求解器。需要注意两点:(1) 调用求解器时必须启用处理程序,以及 (2) 并行求解器 运行ning 可能不会立即生效。
class 接口(即 solver = mystic.solvers.DifferentialEvolutionSolver(...)
)允许您使用处理程序(即 solver.enable_signal_handler()
),and/or 您也可以使用 solver.Step()
-- 异步进行优化。如果您使用 Step
,它一次只会 运行 一次迭代,因此您可以编写自己的控件来控制求解器的运行方式。