首页 > 解决方案 > Pyomo-IPOPT:求解器陷入局部最小值,如何避免这种情况?

问题描述

我试图解决一个优化问题,包括找到一个高维(10+)单调函数的全局最大值(如在每个方向上都是单调的)。约束使得它们用平面切割搜索空间。

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

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

编辑:

解决方案的两个提示:

到目前为止,这让我对融合感到满意。

标签: optimizationpyomoipopt

解决方案


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

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


推荐阅读