Model.cbLazy()


Model.cbLazy()

懒惰的(左、右、右)

从回调函数中向MIP模型添加新的惰性约束。请注意,此方法只能在哪里回调函数的值为GRB.Callback.MIPNODEGRB.Callback.MIPSOL(见回拨码第节了解更多信息)。

惰性约束通常在MIP模型的全套约束太大而无法显式表示时使用。通过只包含分支和切割搜索期间发现的解决方案实际违反的约束,有时可以找到经验证的最佳解决方案,同时只添加全套常量的一小部分雷恩茨。

您通常会通过首先查询当前节点解决方案(通过调用cbGetSolutionGRB.CB_MIPSOL回拨,或cbGetNodeRelGRB.CB_MIPNODE回调),然后调用cbLazy()添加切断解决方案的约束。Gurobi保证您将有机会切断任何被认为可行的解决方案。

您的回调应该准备好切断违反任何延迟约束的解决方案,包括已经添加的解决方案。节点解决方案通常会考虑以前添加的惰性约束,但并不总是如此。

请注意,您必须设置懒散约束参数,如果要使用惰性约束。

请注意,此方法还接受临时施工作为其第一个参数。这允许您使用运算符重载来创建约束。请参阅临时施工了解更多信息。

论据:

lhs:新惰性约束的左侧。可以是常数,也可以是变量,或LinExpr.

感觉:检测新的惰性约束(GRB.LESS_EQUAL,GRB.EQUALGRB.更大的).

rhs:新惰性约束的右侧。可以是常量,也可以是变量,或LinExpr.

用法示例:

def mycallback(model,where):如果where==GRB.Callback.MIPSOL:sol=model.cbGetSolution([model.\u vars[0],model.\u vars[1]])如果sol[0]+sol[1]>1.1:model.cbLazy(model.\u vars[0]+model.\u vars[1]<=1)model.\u vars=model.getVars()model.optimize(mycallback)