【发布时间】:2019-07-25 06:57:47
【问题描述】:
我正在尝试解决一个优化问题,该问题包括找到一个高维 (10+) 单调函数的全局最大值(如每个方向的单调函数)。约束使得它们用平面切割搜索空间。
我已经在pyomo 中编写了整个代码,并且我正在使用ipopt 求解器。在大多数情况下,我相信它会成功收敛到全局最优值。但是,如果我稍微调整一下约束,我会发现它有时会收敛到局部最小值。
这看起来像是一种探索与开发的权衡。
我查看了可以传递给 ipopt 的选项,但列表太长了,以至于我无法理解要使用哪些参数来帮助收敛到全局最小值。
编辑:
解决方案的两个提示:
我的变量曾经被定义为非常无限的界限,例如
bounds=(0,None)在无限半线上移动。我对它们实施了两个有限界限。-
我现在使用多个开头:
opt = SolverFactory('multistart') results = opt.solve(self.model, solver='ipopt', strategy='midpoint_guess_and_bound')
到目前为止,这让我对融合感到满意。
【问题讨论】:
-
只是一个问题。您如何在 Pyomo(或其他数字)中检查解决方案是否收敛到局部或全局最优?
-
在我的具体情况下,我知道使用 Gurobi 解决它的全局最小值,这与 IP-OPT 相比非常慢。
标签: optimization pyomo ipopt