我只想确保我有资格使用Bonmin和Couenne来解决NLP问题(仍然没有整数变量),并且我渴望获得全局最优值而不是局部最优值。我还读到Ipopt首先搜索全局答案,如果找不到,它将提供本地答案。当我使用Ipopt时,如何理解我的答案是一个全球性的答案。另外,对于这些可以与Pyomo合并的问题,我想最好的NLP和MINLP开源pythonic解决方案是什么? 我的问题的主要原因是使用Bonmin的以下输出:
注意:默认情况下,您将Ipopt与MUMPS线性求解器一起使用。 其他线性求解器可能更有效(请参阅Ipopt文档)。
致谢
答案 0 :(得分:1)
一些注意事项:
(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)寻找有保证的全局解决方案时,仅当问题凸出时才可以使用局部求解器。对于其他问题,您需要全局求解器。另一种方法是将多启动算法与本地求解器一起使用。这使您确信自己不会以糟糕的局部最优值结束。
如果可能,我建议与您的老师讨论一下。了解这些概念很重要(大多数求解器手册都假定您了解它们)。