GRBcblazy
GRBcblazy
int | GRBcblazy( | 无效 | * cbdata, |
int | lazylen, | ||
const int | * lazyind, | ||
const双 | * lazyval, | ||
字符 | lazysense, | ||
双 | lazyrhs) |
从用户回调例程中向MIP模型添加一个新的延迟约束。请注意,此例程只能在在哪里
回调例程上的值为GRB_CB_MIPNODE
或GRB_CB_MIPSOL
(见回调代码章节以获取更多信息)。
当MIP模型的全部约束太大而无法显式表示时,通常会使用延迟约束。通过只包含分支和分割搜索中发现的解实际上违反的约束,有时只添加全部约束的一小部分,就可能找到已证明的最优解。
您通常会通过查询当前节点解决方案(通过调用GRBcbget从一个GRB_CB_MIPSOL
或GRB_CB_MIPNODE
回调,使用什么= GRB_CB_MIPSOL_SOL
或什么= GRB_CB_MIPNODE_REL
),然后又打电话GRBcblazy ()
添加一个约束来切断解决方案。古罗比保证,您将有机会切断任何其他情况下被认为可行的解决方案。
你的回调函数应该准备好切断违反任何懒惰约束的解决方案,包括那些已经添加的约束。节点解决方案通常会尊重之前添加的延迟约束,但并非总是如此。
请注意,必须设置LazyConstraints参数,如果要使用延迟约束。
返回值:
非零返回值表示在添加延迟约束时发生了问题。指的是错误代码表中可能的返回值列表。关于错误的详细信息可以通过调用来获得GRBgeterrormsg.
参数:
cbdata:cbdata参数被Gurobi优化器传递到用户回调。此参数必须不加修改地从用户回调传递到GRBcblazy ().
lazylen:新的懒惰约束中非零系数的个数。
lazyind:在新的惰性约束中为非零值设置变量索引。
lazyval:在新的惰性约束中为非零值设置的数值。
lazysense:对新的懒惰约束的理解。选项是GRB_LESS_EQUAL,GRB_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;}