Model.cbCut ()


Model.cbCut ()

cbCut(lhs, sense, RHS)

从回调函数中向MIP模型添加一个新的切割平面。请注意,此方法只能在在哪里回调函数的值等于GRB.Callback.MIPNODE(见回调代码章节以获取更多信息)。

切割平面可以添加到分支切割树的任何节点上。但是,它们应该有节制地添加,因为它们增加了每个节点求解的松弛模型的大小,并且会显著降低节点处理速度。

切割平面通常用于切断当前的弛豫解决方案。要在当前节点检索松弛解决方案,您应该首先调用cbGetNodeRel

您应该考虑设置参数PreCrush当加上你自己的切割时值为1。这个设置关闭了一些预解缩减,这有时会阻止你的切割应用到预解模型(这将导致你的切割被无声地忽略)。

一个非常重要的注意事项:您应该只添加模型中的约束所隐含的削减。如果你截断了一个整数解,它根据原始模型约束条件是可行的,您可能会得到一个错误的解决方案,您的MIP问题

注意,此方法还接受TempConstr作为第一个论点。这允许您使用操作符重载来创建约束。看到TempConstr为更多的信息。

参数:

:左手边是新剪的。可以是常数,aVar,或者一个LinExpr

感觉:新剪的感觉(伽马射线爆发。LESS_EQUAL伽马射线爆发。平等的,或伽马射线爆发。GREATER_EQUAL).

园艺学会:右边是新剪的。可以是常数,aVar,或者一个LinExpr

使用示例:

def mycallback(model, where): if where == GRB. callback . mipnode: status = model. cbget (GRB. callback . mipnode_status) if status == GRB. callback . mipnode_status;最优:rel = model. cbgetnoderel([模型。if rel[0] + rel[1] >_vars[0] +模型。_vars[1] <= 1)模型。_vars = model.getVars()