Model.cbCut ()


Model.cbCut ()

cbCut(lhs, sense, RHS)

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

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

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

当添加你自己的切割时,你必须设置参数PreCrush值1。这种设置关闭了一些预先解决的削减,这些削减有时会阻止原始模型上的削减被应用到预先解决的模型。

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

参数:

左手边是新剪的。可以是常数a吗Var,或者一个LinExpr

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

园艺学会右手边剪新发型。可以是常数a吗Var,或者一个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 ([model. cbgetnoderel];_vars[0], model._vars[1]])如果rel[0] + rel[1] > 1.1: model. cbcut (model. cbcut)_vars[0] +模型。_vars[1] <= 1)模型。_vars = model.getVars() model.optimize(mycallback)