Model.cbLazy ()
Model.cbLazy ()
cbLazy(lhs, sense, RHS)从回调函数中向MIP模型添加一个新的延迟约束。请注意,此方法只能在在哪里
值为GRB.Callback.MIPNODE
或GRB.Callback.MIPSOL
(见回调代码章节以获取更多信息)。
当MIP模型的全部约束太大而无法显式表示时,通常使用惰性约束。通过只包含在分支切搜索过程中发现的解实际上违反的约束,有时可以在只添加完整约束集的一部分的情况下找到一个已证明的最优解。
通常,您可以通过首先查询当前节点解决方案(通过调用cbGetSolution从一个伽马射线爆发。CB_MIPSOL
回调,或者cbGetNodeRel从一个伽马射线爆发。CB_MIPNODE
回调),然后调用cbLazy ()
添加一个约束来切断解决方案。Gurobi保证你将有机会切断任何被认为是可行的解决方案。
你的回调应该准备好切断任何违反惰性约束的解决方案,包括那些已经添加的。节点解决方案通常会考虑前面添加的惰性约束,但并非总是如此。
注意,必须设置LazyConstraints参数,以便使用惰性约束。
参数:
韩:左边是新的惰性约束。可以是常数,aVar,或者一个LinExpr.
感觉:新延迟约束的意义(伽马射线爆发。LESS_EQUAL,伽马射线爆发。平等的,或伽马射线爆发。GREATER_EQUAL).
园艺学会:右边是新的惰性约束。可以是常数,aVar,或者一个LinExpr.
使用示例:
def mycallback(model, where): if where == GRB.Callback.MIPSOL: sol = model. cbgetsolution ([model. mycallback . mipsol]);if sol[0] + sol[1] >_vars[0] +模型。_vars[1] <= 1)模型。_vars = model.getVars()