CPXXstrongbranch 和 CPXstrongbranch
例程 "CPXXstrongbranch/CPXstrongbranch计算在整数编程分支切割搜索中选择分支变量的信息。
int CPXXstrongbranch( CPXCENVptr 环境, CPXLPptr lp, CPXDIM const * 指數, CPXDIM ct, double * 下拉菜单, double * 上位机, CPXCNT itlim )
int CPXstrongbranch( CPXCENVptr 环境, CPXLPptr lp, int const * 指數, int ct, double * 下拉菜单, double * 上位机, int itlim )
描述
这是高级例程。 高级例程通常需要深入了解 CPLEX 所使用的算法。 因而它们会提高应用程序中错误行为的风险,而这种行为可能难以调试。 所以,本团队鼓励您认真考虑您是否可以改为通过其他 Callable Library 例程来完成同一任务。
例程 "CPXXstrongbranch/CPXstrongbranch计算在整数编程分支切割搜索中选择分支变量的信息。
为了描述这个程序,让我们假设一个 LP 已被求解,并且最优解是常驻的。 设 "indices[]为该问题的变量索引列表,"cnt为该列表的长度。 然后,"indices[]会产生 "2*cnt不同的 LP,在这些 LP 中,列出的每个变量依次被固定为小于或等于当前最优解中其值的最大整数值,然后每个变量被固定为大于或等于当前最优解中其值的最小整数值。 CPXXstrongbranch/CPXstrongbranch performs at most itlim dual Simplex iterations on each of these 2*cnt LPs, starting from the current optimal solution of the base LP. The objective values that these iterations yield are placed in the arrays downobj[] for the downward fix and upobj[] for the upward fix. 如果任一固定值导致问题的二元无界(初等不可行),则对于最小化问题,相应的目标值会被设置为较大的正值;对于最大化问题,相应的目标值会被设置为较大的负值。 该值取决于系统,但通常为1.0e+75。 将指定二元单纯形定价算法(CPXPARAM_Simplex_DGradient)的参数设置为 2,可以为给定迭代次数 "itlim的参数 "downobj[]和 "upobj[]"提供更多信息值。
用户可以直接使用可调用程序库的其他例程来构建一个函数,计算与 "CPXXstrongbranch/CPXstrongbranch相同的值。 不过,"CPXXstrongbranch/CPXstrongbranch应该更快,因为它利用了直接访问 CPLEX 内部数据结构的优势。
参数
- env
- 一个指向
CPXXopenCPLEX/CPXopenCPLEX所返回 CPLEX 环境的指针。 - lp
- 一个指向
CPXXcreateprob/CPXcreateprob所返回 CPLEX LP 问题对象的指针。 - indices
- 一个整数数组。 数组的长度必须至少为 "
cnt。 - cnt
- 一个整数,指定 "
indices[]中的条目数。 - 下拉菜单
- 包含目标值的数组,这些目标值是 "
CPXXstrongbranch/CPXstrongbranch进行的双陡边迭代中分支变量向下固定的结果。 数组的长度必须至少为 "cnt。 - 上位机
- 包含目标值的数组,这些目标值是 "
CPXXstrongbranch/CPXstrongbranch在双陡边迭代中向上修正分支变量的结果。 数组的长度必须至少为 "cnt。 - itlim
- 整数,指定 "
CPXXstrongbranch/CPXstrongbranch对每个 LP 进行双陡边迭代的次数限制。