python - Mystic - 如何正确停止优化
问题描述
我有一个相当大且复杂的 Python 应用程序,我最近添加了使用 Mystic ( https://github.com/uqfoundation/mystic )执行非线性优化的能力。优化在与主 (GUI) 线程不同的线程中运行。我天真地使用fmin_powell
anddiffev
来运行优化。
由于目标函数的评估可能很长,因此用户可以单击“停止”按钮并停止模拟。
也就是说,我还没有找到一种智能方法来实际停止优化线程,因为似乎没有停止fmin_powell
ordiffev
函数。我不需要能够在模拟中间停止当前函数评估,我也很乐意等到当前函数评估完成后再停止优化。
有谁知道这是否真的可能?
预先感谢您的帮助。
安德里亚。
解决方案
我是mystic
作者。一般有两种方式。
如果您使用的是函数接口(即mystic.solvers.diffev2(...)
),那么您可以使用关键字handler=True
。如果您执行信号中断,它将暂停已启用处理程序的正在运行的求解器。需要注意两点:(1)您必须在调用求解器时启用处理程序,以及(2)对于并行运行的求解器,它可能不会立即生效。
类接口 (ie solver = mystic.solvers.DifferentialEvolutionSolver(...)
) 允许您使用处理程序 (ie solver.enable_signal_handler()
),和/或您也可以滚动您自己的解决方案solver.Step()
-- 异步进行优化。如果您使用Step
,它将一次只运行一次迭代,因此您可以编写自己的控件来控制求解器如何进行。
推荐阅读
- google-chrome - HTTP 200 和 Chromium 中的空响应 >=94
- javascript - VideoJS 错误:提供的元素或 ID 无效
- spring-boot - camunda spring boot 外部任务不并行运行
- java - 如何在 Eclipse 中替换行数超过 25 的多个类文件?
- node.js - 如何使用 JSON-server 提供抓取的数据
- modelica - 在 Dymola 中同时放大绘图
- swiftui - SwiftUI:为什么 ForEach 需要一个 ID?
- python - 难以在 manim 中更改 Axes 的轴长度
- python - 具有内容类型的 Python 请求是 application/x-www-form-urlencoded 不起作用
- video - FFmpeg 将一个视频叠加到另一个视频上,混音,缩放叠加的视频并将其定位在右下角