Pyomo-IPOPT:求解器陷入局部最小值,如何避免?

Pyomo-IPOPT: solver falls into local minima, how to avoid that?

我正在尝试解决一个优化问题,该问题包括寻找高维 (10+) 单调函数(如在每个方向上的单调函数)的全局最大值。这些约束使得它们用平面减少搜索 space。

我已经在 pyomo 中编写了整个代码,并且我正在使用 ipopt 求解器。在大多数情况下,我相信它会成功收敛到全局最优。但是,如果我稍微调整一下约束条件,我会发现它有时会收敛到局部最小值。

这看起来像是一种探索与开发的权衡。 我研究了可以传递给 ipopt 的选项,但列表太长了,我无法理解要使用哪些参数来帮助收敛到全局最小值。

编辑:

解决方案的两个提示:

到目前为止,这让我对收敛感到满意。

抱歉,IPOPT 是本地求解器。如果您真的想找到全局解决方案,可以使用全局求解器,例如 Baron、Couenne 或 Antigone。有一个权衡:全局求解器速度较慢,可能不适用于大问题。

或者,您可以帮助本地求解器找到一个好的初始点。请注意,在这方面,活动集方法通常比内点方法更好。有时使用多起点算法来防止局部最优:使用一堆不同的起点。 Pyomo 有一些工具可以做到这一点(请参阅文档)。