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_EQUAL,GRB_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;}