GRBcbcut


GRBcbcut

int GRBcbcut 无效 * cbdata,
int cutlen,
const int * cutind,
const双 * cutval,
字符 cutsense,
cutrhs)

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

切割平面可以添加到任何节点的枝砍树。注意,削减应该有节制地添加,因为它们增加了在每个节点上求解的松弛模型的大小,并会显著降低节点的处理速度。

切割平面通常用于切断当前的松弛解。要检索当前节点上的松弛解决方案,请调用GRBcbget什么= GRB_CB_MIPNODE_REL

当添加你自己的切割时,你必须设置参数PreCrush值1。这种设置关闭了一些预先解决的削减,这些削减有时会阻止原始模型上的削减被应用到预先解决的模型。

一个非常重要的注意事项:您应该只添加模型中的约束所隐含的削减。如果你截取一个整数解根据原始模型的约束条件是可行的,你可能会得到一个不正确的MIP问题的解决方案

返回值:

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

参数:

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

cutlen:新切割平面内非零系数的个数。

cutind:新切割平面内非零值的可变指标。

cutval:新切割平面内非零值的数值。

cutsense:对新切割平面的感觉。选项是GRB_LESS_EQUALGRB_EQUAL,或GRB_GREATER_EQUAL

cutrhs:新切割平面的右侧值。

使用示例:

if (where == GRB_CB_MIPNODE) {int cutind[] = {0,1};Double cutval[] = {1.0, 1.0};错误= GRBcbcut(cbdata, 2, cutind, cutval, GRB_LESS_EQUAL, 1.0);If (error)返回0;}