0

我试图让 Gurobi 在找到最佳解决方案后回拨(使用 Java 接口)。

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

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

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

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

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

4

1 回答 1

0

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

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

一般来说,“手动”添加惰性约束的方法似乎有点奇怪,因为如果可行的解决方案违反了它们,它们会自动添加。如果您到目前为止还没有,您可以尝试在最开始时将它们添加到延迟值为1 的情况下,因此请谨慎地将它们带入模型中。

于 2015-02-06T08:24:22.807 回答