Model.cbCut()


Model.cbCut()

cbCut(左、右、右)

从回调函数中向MIP模型添加新剖切面。请注意,此方法只能在哪里回调函数上的值等于GRB.Callback.MIPNODE(见回拨码第节了解更多信息)。

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

切割平面通常用于切断当前松弛解。要在当前节点检索松弛解,应首先调用cbGetNodeRel.

添加自己的切割时,必须设置参数预冲设置为值1。此设置将关闭一些预解算缩减,这些缩减有时会阻止原始模型上的剪切应用于预解算模型。

一个非常重要的注意事项:您应该只添加模型中约束隐含的切割。如果切断了根据原始模型约束可行的整数解,您可能会获得错误的MIP问题解决方案.

论据:

lhs:新切割的左侧。可以是常数,也可以是变量,或LinExpr.

感觉:新切割的感觉(GRB.LESS_EQUAL,GRB.EQUALGRB.更大的).

rhs:新切割的右侧。可以是常数,也可以是变量,或LinExpr.

用法示例:

def mycallback(model,where):if-where==GRB.Callback.MIPNODE:status=model.cbGet(GRB.Callback.MIPNODE\u status)if-status==GRB.OPTIMAL:rel=model.cbGetNodeRel([model.\u vars[0],model.\u vars[1]])if-rel[0]+rel[1]>1.1:model.cbCut(model.\u vars[0]+model.\u vars[1]<=model