我有一个相当大且复杂的Python应用程序,最近我在其中添加了使用Mystic (https://github.com/uqfoundation/mystic)执行非线性优化的功能。优化在独立于主(GUI)线程的单独线程中运行。我天真地使用fmin_powell和diffev来运行优化。
由于目标函数的评估可能很长,因此用户能够点击“停止”按钮并停止模拟。
也就是说,我还没有找到一种智能的方法来实际停止优化线程,因为似乎不需要停止fmin_powell或diffev函数。我不需要在模拟过程中停止当前函数求值,我也很乐意等到当前函数求值完成后再停止优化。
有没有人知道这是否真的可行?
提前感谢您的帮助。
安德里亚。
发布于 2019-07-31 10:11:22
我是mystic的作者。一般来说,有两种方法。
如果使用的是function接口(即mystic.solvers.diffev2(...)),则可以使用关键字handler=True。如果您执行信号中断,它将暂停已启用处理程序的正在运行的求解器。需要注意的两件事:(1)调用求解器时必须启用处理程序,(2)对于并行运行的求解器,它可能不会立即生效。
类接口(即solver = mystic.solvers.DifferentialEvolutionSolver(...))允许您使用处理程序(即solver.enable_signal_handler()),并且/或者您也可以使用solver.Step()来使用您自己的解决方案--异步地进行优化。如果使用Step,则它一次仅运行一个迭代,因此您可以编写自己的控件来控制解算器的进度。
https://stackoverflow.com/questions/57279034
复制相似问题