首页 > 解决方案 > 使用 Bonmin Counne 和 Ipopt 进行 NLP

问题描述

我只想确定我有资格使用 Bonmin 和 Couenne 来解决 NLP 问题(我仍然没有整数变量)并且我渴望获得全局最优而不是局部。我还读到 Ipopt 首先搜索全局答案,如果没有找到,它将提供本地答案。当我使用 Ipopt 时,我如何理解我的答案是一个全球性的答案。另外,我想针对可以与 Pyomo 合并的这些问题,最好的 NLP 和 MINLP 开源 pythonic 求解器是什么?我的问题的主要原因是使用 Bonmin 的以下输出:

注意:默认情况下,您将 Ipopt 与 MUMPS 线性求解器一起使用。其他线性求解器可能更有效(请参阅 Ipopt 文档)。

问候

标签: optimizationpyomoipoptcoin-or

解决方案


一些注意事项:

(1)“ Ipopt 首先搜索全局答案,如果没有找到,它将提供本地答案
这可能不是我的措辞。IPOPT 寻找本地解决方案。对于某些问题,这些将是全球解决方案。对于凸问题,情况总是如此(数值问题除外)。

(2) Bonmin 是局部 MINLP 求解器,Couenne 是全局 NLP/MINLP 求解器。通常,Bonmin 可以解决比 Couenne 更大的问题,但您可以获得本地解决方案。

(3) "注意:默认情况下,您将 Ipopt 与 MUMPS 线性求解器一起使用。其他线性求解器可能更有效(请参阅 Ipopt 文档)。
这只是一个通知,表明您正在将 IPOPT 与 MUMPS 的线性代数例程一起使用。IPOPT 可以使用其他线性子求解器,它们在处理大型问题时可能会表现得更好。通常,HARWELL 例程(通常称为 MANN)提供更好的性能。MUMPS 是免费的,而 Harwell 例程需要许可证。


在后续答案(它根本不是答案)中指出:

关于 Ipopt,我怎么能理解它是在寻找全局解决方案还是局部最优解?代码会通知吗?关于根据 AMPL 页面 AMPL 的 Bonmin 它提供了凸问题的全局解决方案“在连续和离散变量中找到凸非线性问题的全局最优解,并且可以启发式地应用于非凸问题。” 你说它是本地解决方案,我在这方面有点困惑。但是关于所有这些代码的一般问题是,我如何才能发现答案是全局最优的?

(a) Ipopt 不知道一个解是局部最优解还是全局最优解。对于凸问题,局部最优解是全局最优解。您需要说服自己传递给 Ipopt 的问题是凸的(Ipopt 不会为您这样做)。

(b) Bonmin:同理:如果问题是凸的,它将找到全局解决方案。否则,您将获得本地解决方案。您将不会收到解决方案是否是全局解决方案的通知:Bonmin 不知道解决方案是否是全局最优解。

(c) 在寻找有保证的全局解决方案时,您只能在问题是凸问题时使用局部求解器。对于其他问题,您需要一个全局求解器。另一种方法是使用带有本地求解器的多启动算法。这让您确信您最终不会得到一个糟糕的局部最优值。

如果可能的话,我建议和你的老师讨论这个问题。这些概念对于理解很重要(大多数求解器手册都假设您了解它们)。


推荐阅读