如何使用 GUROBI 在 LP 中找到所有可能的最优解

How to find all possible optimum solutions in LP with GUROBI

我用 GUROBI 求解了一个 LP 模型,我知道这个模型有无限多个最优解。正如您在下面看到的,objective 函数和 constr 1 具有相同的斜率并且 constr 1 是绑定的。 GUROBI只显示一个最优解,如何找到所有可能的解(或范围)?如何在更复杂的 LP 模型中找到最优解的数量?

Maximize
   <gurobi.LinExpr: -1.0 x1 + 2.0 x2>
Subject To
   non negative x1 : <gurobi.LinExpr: x1> >= 0.0
   non negative x2 : <gurobi.LinExpr: x2> >= 0.0
   constr 1 : <gurobi.LinExpr: -1.0 x1 + 2.0 x2> <= 4.0
   constr 2 : <gurobi.LinExpr: x1 + x2> <= 5.0
   constr 3 : <gurobi.LinExpr: x1 + -1.0 x2> <= 3.0

所有最优 LP 解决方案是一个困难的概念。它们可能有无限多。 Gurobi 具有枚举所有最优整数解(解池)的工具,但这不适用于纯 LP。所以简短的回答是否定的。

可以枚举所有最优基,但这需要一些工作(基本上使用二进制变量对基进行编码:变量或约束是基本的或非基本的)。看到这个 link。这种方法可以通过添加额外的约束来实现,或者通过使用上述解决方案池来更有效地实现。尽管在概念上很有趣,但值得注意的是,这种方法对于大型问题并不实用。