我有一个混合整数编程问题。 我可以使用JuMP找到最佳解决方案。 但我怎样才能找到第二个最佳解决方案? 或者是第三好的等等。
这可能是另一个同样最佳的解决方案,
或者它可能是一个更糟糕的解决方案
或者它可能是:Infeasible
- 可能没有大多数解决方案。
我知道类似TSP的问题,我可以通过逐步删除最佳路径上的链接来找到其他解决方案(即将某些城市之间的距离设置为无限)。 对于调度类型问题,我可以类似地逐步设置禁止在最佳路径中使用的时隙的可用性。
但是有没有一种通用的方法来做到这一点,而没有编写自己的问题特定的方法来禁止这个解决方案?
答案 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这样的解决方案也有一个称为解决方案池的东西也可以做到这一点。