GRBcblazy


GRBcblazy

int GRBcblazy 无效 * cbdata,
int lazylen,
const int * lazyind,
const双 * lazyval,
字符 lazysense,
lazyrhs)

从用户回调例程中向MIP模型添加一个新的延迟约束。请注意,此例程只能在在哪里回调例程上的值为GRB_CB_MIPNODEGRB_CB_MIPSOL(见回调代码章节以获取更多信息)。

当MIP模型的全部约束太大而无法显式表示时,通常会使用延迟约束。通过只包含分支和分割搜索中发现的解实际上违反的约束,有时只添加全部约束的一小部分,就可能找到已证明的最优解。

您通常会通过查询当前节点解决方案(通过调用GRBcbget从一个GRB_CB_MIPSOLGRB_CB_MIPNODE回调,使用什么= GRB_CB_MIPSOL_SOL什么= GRB_CB_MIPNODE_REL),然后又打电话GRBcblazy ()添加一个约束来切断解决方案。古罗比保证,您将有机会切断任何其他情况下被认为可行的解决方案。

你的回调函数应该准备好切断违反任何懒惰约束的解决方案,包括那些已经添加的约束。节点解决方案通常会尊重之前添加的延迟约束,但并非总是如此。

请注意,必须设置LazyConstraints参数,如果要使用延迟约束。

返回值:

非零返回值表示在添加延迟约束时发生了问题。指的是错误代码表中可能的返回值列表。关于错误的详细信息可以通过调用来获得GRBgeterrormsg

参数:

cbdata:cbdata参数被Gurobi优化器传递到用户回调。此参数必须不加修改地从用户回调传递到GRBcblazy ()

lazylen:新的懒惰约束中非零系数的个数。

lazyind:在新的惰性约束中为非零值设置变量索引。

lazyval:在新的惰性约束中为非零值设置的数值。

lazysense:对新的懒惰约束的理解。选项是GRB_LESS_EQUALGRB_EQUAL,或GRB_GREATER_EQUAL

lazyrhs:新的惰性约束的右边值。

使用示例:

if (where == GRB_CB_MIPSOL) {int lazyind[] = {0,1};Double lazyval[] = {1.0, 1.0};error = GRBcblazy(cbdata, 2, lazyind, lazyval, GRB_LESS_EQUAL, 1.0);If (error)返回0;}