optimization - 使用 Bonmin Counne 和 Ipopt 进行 NLP
问题描述
我只想确定我有资格使用 Bonmin 和 Couenne 来解决 NLP 问题(我仍然没有整数变量)并且我渴望获得全局最优而不是局部。我还读到 Ipopt 首先搜索全局答案,如果没有找到,它将提供本地答案。当我使用 Ipopt 时,我如何理解我的答案是一个全球性的答案。另外,我想针对可以与 Pyomo 合并的这些问题,最好的 NLP 和 MINLP 开源 pythonic 求解器是什么?我的问题的主要原因是使用 Bonmin 的以下输出:
注意:默认情况下,您将 Ipopt 与 MUMPS 线性求解器一起使用。其他线性求解器可能更有效(请参阅 Ipopt 文档)。
问候
解决方案
一些注意事项:
(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) 在寻找有保证的全局解决方案时,您只能在问题是凸问题时使用局部求解器。对于其他问题,您需要一个全局求解器。另一种方法是使用带有本地求解器的多启动算法。这让您确信您最终不会得到一个糟糕的局部最优值。
如果可能的话,我建议和你的老师讨论这个问题。这些概念对于理解很重要(大多数求解器手册都假设您了解它们)。
推荐阅读
- javascript - 如何在 GAS 中将原始值转换为日期对象
- dart - Flutter 将 Hive 数据库与 Riverpod 集成
- angular - 取消选择 Angular 中的 Mat 选定值
- r - 根据列中以逗号分隔的多个值过滤数据
- firebase - 使用填充了虚拟数据的默认数据库启动 firebase 模拟器
- flutter - 有条件的 Flutter 全屏
- javascript - 重用内置数组方法 - JS - 困惑
- python - 无法使用 OpenCV 使用 cv2.CAP_FFMPEG 在 GPU 上解码视频
- c - 尽管没有显示输出,但编码正在运行。也许这将是scanf问题?我不确定
- javascript - RxJs - 不能从合并的 Observable 中创建两个新的 Observable