CPXXbranchcallbackbranchconstraintsCPXbranchcallbackbranchconstraints

通过向节点问题添加一个或多个约束来指定分支时,例程 CPXXbranchcallbackbranchconstraints/CPXbranchcallbackbranchconstraints 指定要从当前节点产生的分支。

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

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

描述

警告:

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

通过向节点问题添加一个或多个约束来指定分支时,例程 CPXXbranchcallbackbranchconstraints/CPXbranchcallbackbranchconstraints 指定要从当前节点产生的分支。 只能从用户编写的分支回调函数内对其进行调用。

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

表 1. sense[i] 的值
L 小于或等于约束
E 等于约束
G 大于或等于约束

参数

env
一个指向 CPXXopenCPLEX/CPXopenCPLEX 所返回 CPLEX 环境的指针。
cbdata
传递到用户编写的回调的指针。 此自变量必须是传递给用户编写回调的 cbdata 的值。
wherefrom
一个整数值,其报告从何处调用了用户编写的回调。 此自变量必须是传递给用户编写回调的 wherefrom 的值。
rcnt
一个整数,其指定分支的约束数。
nzcnt
一个整数,指定分支的非零约束系数的数量。 这指定数组 rmatindrmatval 的长度。
rhs
长度为 rcnt 的数组,其中包含分支的每个约束的右侧项。
sense
长度为 rcnt 的数组,其中包含要为分支添加的每个约束的含义。 含义的值显示在“表 1”中。
rmatbeg
rmatindrmatval 一起定义分支约束的数组。
rmatind
rmatbegrmatval 一起定义分支约束的数组。
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,而如果发生错误,那么会返回非零。