最优解决方案后的Gurobi回调

时间:2014-10-02 14:05:06

标签: java callback gurobi

我试图让Gurobi在找到最佳解决方案后回调(使用Java界面)。

背景:我正在研究一种方法,该方法需要(1)找到(非常)好的解决方案,然后(2)为问题添加惰性约束。必须首先找到一个好的解决方案,因为在我的情况下,确定合理的新惰性约束需要一个好的解决方案。

总的来说,这不是问题,因为Gurobi回拨了MIP,MIPSOL等;然后,我可以检查当前解决方案的差距,并决定添加下一个惰性约束。

然而,当寻找一个非常好的解决方案时,Gurobi有时会找到一个最佳解决方案(例如在关闭节点之后)。在这种情况下,没有额外的MIP,MIPSOL或任何其他可用的回调,我可以允许添加额外的延迟约束。

我已经发现可以使用MIPNODE_STATUS识别截止值。然而,我还没有找到一种方法来检查这种截止是否导致当前解决方案被证明是最佳的。

有人知道识别这种情况并仍然添加一个惰性约束吗?

1 个答案:

答案 0 :(得分:0)

一种方法是检查模型是否是最优的,并且在optimize() - 方法完成后未添加惰性约束。在这种情况下,只需添加延迟约束并再次调用optimize()

在这种情况下,第二次优化从第一次优化的解决方案开始。我不确定,在这种情况下绑定的行为如何。

一般来说,“手动”添加延迟约束的方法似乎有点奇怪,因为在可行解决方案违反它们的情况下会自动添加它们。如果你没到目前为止,你可以尝试在Lazy value为1的情况下添加它们,因此它们会被小心地带入模型。