IPOPT 求解器自动将我的二进制变量转换为连续变量

计算科学 软件 优化
2021-11-29 18:05:53

我希望这是这个问题的正确 stackexchange;如果没有,请指导我!

我在Linux上。我已经安装了 IPOPT 和 AMPL,以及所需的所有第三方东西:ASL、HSL、Lapack、Metis、Mumps。

当我使用二进制或整数变量从 AMPL 运行求解器时,IPOPT 将它们转换为连续的。有谁知道为什么或如何解决它?这是一个最小的例子。

文件 test.mod:

option solver ipopt;
var x, integer;

maximize best: x;
s.t. cons1: x <= 5;

solve;

当我运行它时(第二行输出是问题):

$ ampl t2.mod
Ipopt 3.10.2: 
==> Warning: Treating 0 binary and 1 integer variables as continous.


******************************************************************************
This program contains Ipopt, a library for large-scale nonlinear optimization.
 Ipopt is released as open source code under the Eclipse Public License (EPL).
         For more information visit http://projects.coin-or.org/Ipopt
******************************************************************************

NOTE: You are using Ipopt by default with the MUMPS linear solver.
      Other linear solvers might be more efficient (see Ipopt documentation).


This is Ipopt version 3.10.2, running with linear solver mumps.

Number of nonzeros in equality constraint Jacobian...:        0
Number of nonzeros in inequality constraint Jacobian.:        0
Number of nonzeros in Lagrangian Hessian.............:        0
// lots more output

谢谢你的帮助!

3个回答

IPOPT不适用于整数程序,因此就 IPOPT 而言,这是正确的做法。

如果您手头确实有 MINLP 问题,请尝试使用 MINLP 求解器。IPOPT 是一个 NLP 求解器。

由于我不解决 MINLP(混合整数非线性规划)问题,我也只能谷歌。希望其他人可以在 scicomp 推荐一个求解器。

我认为上述答案(阿里)是正确的,所以我试图提供一些替代方案。

混合整数,非线性,问题难以解决。虽然术语“非线性”通常涵盖了广泛的问题,但混合整数线性问题得到了更好的研究(据我所知)。

您可以在这两种情况下使用的开源软件是 SCIP (www.scip.zib.de),虽然它强调混合整数规划,但也可以为“非线性”情况建模约束(尽管它处于 beta 状态)那里)。

如果您想(仅)解决混合整数线性问题,可以推荐求解器 GAMS、CPLEX 和 GUROBI(部分免费用于学术目的)或 COIN-OR 项目(我认为是开源的)。认为这些求解器为非线性约束(即二次)提供了一些支持,但我认为它们不能涵盖非线性问题的整个方面。

为完整起见,以下注释: 一般来说,混合整数问题很难解决,因此所有这些求解器都不能保证在所有情况下(理论上)在足够的时间内得到最优解。尽管如此,我在 SCIP、CPLEX 和 Gurobi 方面取得了很好的经验,因此我建议您尝试一下,尤其是如果您只想运行小示例(听起来很像 :))

最好的祝福

Bonmin 是一个开源的 MINLP 求解器,它使用 IPOPT 来求解“宽松”的 NLP 解决方案。Bonmin 有以下算法:

B-BB:基于 NLP 的分支定界算法 B-OA:外近似分解算法 B-QG:实现 Quesada 和 Grossmann 的分支切算法 B-Hyb:基于混合外近似的分支和-切割算法

MINLP 问题的另一个选择是我目前正在开发的APPT 求解器。它有一个 AMPL 接口,您似乎正在使用它。