我只想确保我有资格使用Bonmin和Couenne来解决NLP问题(我仍然没有整数变量),并且我渴望获得全局最优,而不是局部最优。我还读到Ipopt首先搜索全局答案,如果没有找到,它将提供本地答案。当我使用Ipopt时,我如何理解我的答案是一个全局的答案。另外,我想知道对于这些可以与Pyomo合并的问题,最好的NLP和MINLP开源pythonic解决方案是什么?我提出这个问题的主要原因是以下使用Bonmin的输出:
注意:默认情况下,您将在MUMPS线性解算器中使用Ipopt。其他线性解算器可能更有效(请参见Ipopt文档)。
问候
发布于 2019-03-11 17:30:33
一些注意事项:
(1) "Ipopt首先搜索全局答案,如果没有找到,将提供局部答案“
这可能不是我的表达方式。IPOPT找到本地解决方案。对于某些问题,这些将是全局解决方案。对于凸问题,通常都是这种情况(数值问题除外)。
(2) Bonmin是局部MINLP求解器,Couenne是全局NLP/MINLP求解器。通常情况下,Bonmin可以解决比Couenne更大的问题,但您可以获得本地解决方案。
(3)“注意:默认情况下,您将在MUMPS线性解算器中使用Ipopt。其他线性解算器可能更有效(请参阅Ipopt文档)。”
这只是一个通知,说明您正在使用IPOPT和来自MUMPS的线性代数例程。IPOPT还可以使用其他线性子求解器,它们在大型问题上的性能可能会更好。通常,HARWELL例程(通常称为MAnn)可以提供更好的性能。MUMPS是免费的,而Harwell例程需要许可证。
在后续的回答中(好吧,根本不是答案),它是这样说的:
关于Ipopt,我如何理解它是在寻找全局最优解还是局部最优解?代码会通知吗?关于Bonmin,根据AMPL page AMPL,它提供了凸问题的全局解,“找到连续变量和离散变量的凸非线性问题的全局最优解,并可启发式地应用于非凸问题。”你说它是得到局部解的,我对这部分有点困惑。但是关于所有这些代码的一般问题是,我如何找到答案是全局最优的?
(a) Ipopt不知道一个解是局部最优解还是全局最优解。对于凸问题,局部最优解是全局最优解。您需要说服自己,您传递给Ipopt的问题是凸的(Ipopt不会为您做到这一点)。
(b) Bonmin:相同:如果问题是凸的,它将找到全局解。否则,您将得到一个本地解决方案。你不会得到一个解是否是全局解的通知: Bonmin不知道一个解是否是全局最优解。
(c)在寻找有保证的全局解时,只有当问题是凸的时,才能使用局部求解器。对于其他问题,您需要一个全局求解器。另一种方法是使用具有局部求解器的多起点算法。这给了你信心,相信你不会得到一个糟糕的局部最优。
如果可能的话,我建议和你的老师讨论这个问题。理解这些概念很重要(大多数求解器手册都假定您了解它们)。
https://stackoverflow.com/questions/55098127
复制相似问题