如何使用JuMP向MIP请求第二个最佳解决方案

时间:2017-03-04 02:30:51

标签: julia mathematical-optimization julia-jump coin-or-cbc mixed-integer-programming

我有一个混合整数编程问题。 我可以使用JuMP找到最佳解决方案。 但我怎样才能找到第二个最佳解决方案? 或者是第三好的等等。

这可能是另一个同样最佳的解决方案, 或者它可能是一个更糟糕的解决方案 或者它可能是:Infeasible - 可能没有大多数解决方案。

我知道类似TSP的问题,我可以通过逐步删除最佳路径上的链接来找到其他解决方案(即将某些城市之间的距离设置为无限)。 对于调度类型问题,我可以类似地逐步设置禁止在最佳路径中使用的时隙的可用性。

但是有没有一种通用的方法来做到这一点,而没有编写自己的问题特定的方法来禁止这个解决方案?

1 个答案:

答案 0 :(得分:10)

您可以添加剪切以禁止找到最佳解决方案并再次解决。假设您的模型具有二进制变量 x(i)。让a(i):=x*(i)成为之前找到的最佳解决方案。然后添加线性约束:

sum(i, x(i) * a(i)) - sum(i, x(i) * (1-a(i))) <= sum(i, a(i)) - 1

再次解决。 (这件事来自here)。如果x是一般的整数变量,事情会变得更复杂。

像Cplex和Gurobi这样的解决方案也有一个称为解决方案池的东西也可以做到这一点。