CPXXbranchcallbackbranchgeneralCPXbranchcallbackbranchgeneral

例程 CPXXbranchcallbackbranchgeneral/CPXbranchcallbackbranchgeneral 指定当分支包含变量边界更改和其他约束时要从当前节点产生的分支。

int  CPXXbranchcallbackbranchgeneral( CPXCENVptr 环境, void * cbdata, int 由此, CPXDIM varcnt, CPXDIM const * 变种, char const * varlu, double const * varbd, CPXDIM rcnt, CPXNNZ nzcnt, double const * 根部, char const * 感觉到, CPXNNZ const * rmatbeg, CPXDIM const * rmatind, double const * rmatval, double 节点, void * 用户手柄, CPXCNT * 序列号_p )

int  CPXbranchcallbackbranchgeneral( CPXCENVptr 环境, void * cbdata, int 由此, int varcnt, int const * 变种, char const * varlu, double const * varbd, int rcnt, int nzcnt, double const * 根部, char const * 感觉到, int const * rmatbeg, int const * rmatind, double const * rmatval, double 节点, void * 用户手柄, int * 序列号_p )

描述

警告:

这是高级例程。 高级例程通常需要深入了解 CPLEX 所使用的算法。 因而它们会提高应用程序中错误行为的风险,而这种行为可能难以调试。 所以,本团队鼓励您认真考虑您是否可以改为通过其他 Callable Library 例程来完成同一任务。

例程 CPXXbranchcallbackbranchgeneral/CPXbranchcallbackbranchgeneral 指定当分支包含变量边界更改和其他约束时要从当前节点产生的分支。 只能从用户编写的分支回调函数内对其进行调用。

如果在调用回调的 "CPXXmipopt/CPXmipopt之前将 "在原始模型和缩小的预分解模型之间进行 MIP 回调切换CPXPARAM_MIP_Strategy_CallbackReducedLP)设置为 "CPX_OFF,则分支变量与原始问题相关。 否则,分支变量与预求解的问题相关。

表 1. varlu[i] 的值
L 更改下边界
U 更改上边界
B 更改上边界和下边界
表 2. sense[i] 的值
L 小于或等于约束
E 等于约束
G 大于或等于约束

参数

env
一个指向 CPXXopenCPLEX/CPXopenCPLEX 所返回 CPLEX 环境的指针。
cbdata
传递到用户编写的回调的指针。 此自变量必须是传递给用户编写回调的 cbdata 的值。
wherefrom
一个整数值,其报告从何处调用了用户编写的回调。 此自变量必须是传递给用户编写回调的 wherefrom 的值。
varcnt
一个整数,它指定在数组 varindvarluvarbd 中指定的边界更改数。
varind
该数组与 varlu和 varbd 一起定义了分支的绑定更改。 条目 varind[i] 是变量的索引。
varlu
此数组与 varindvarbd 一起定义分支的边界更改。 条目varlu[i] 是用于指定要更改的边界的三个可能值之一。 这些值显示在“表 1”中。
varbd
此数组与 varindvarlu 一起定义分支的边界更改。 条目varbd[i] 指定边界的新值。
rcnt
一个整数,其指定分支的约束数。
nzcnt
一个整数,指定分支的非零约束系数的数量。 这指定数组 rmatindrmatval 的长度。
rhs
长度为 rcnt 的数组,其中包含分支的每个约束的右侧项。
sense
长度为 rcnt 的数组,其中包含要为分支添加的每个约束的含义。 可能的值显示在“表 2”中。
rmatbeg
rmatbegrmatind 一起定义分支约束的数组。
rmatind
rmatbegrmatind 一起定义分支约束的数组。
rmatval
rmatbegrmatind 一起定义分支约束的数组。 格式类似于例程 CPXXaddrows/CPXaddrows 中用于描述约束矩阵的格式。 每一行都必须存储在此数组的顺序位置中,从位置 rmatbeg[i]rmatbeg[i+1]-1(或者从 rmatbeg[i]nzcnt-1,如果 i=rcnt-1)。 每个条目 rmatind[i] 均指定对应系数 rmatval[i] 的列索引。 所有行都必须邻接,并且 rmatbeg[0] 必须为 0
nodeest
一个双精度值,指定要通过此分支创建的节点的节点估算值。 节点估计值用于从分支-切割树中选择节点,其特定参数值用于控制MIP 节点选择策略CPXPARAM_MIP_Strategy_NodeSelect)。
userhandle
指向用户私有数据(这些数据应该与此分支创建的节点相关联)的指针。 可为 NULL
seqnum_p
指向一个整数的指针,该整数在返回时将包含 CPLEX 已分配给从此分支创建的节点的序号。 此序号可用于在以后对节点回调的调用中选择此节点。

返回

如果此例程成功,那么会返回 0,而如果发生错误,那么会返回非零。