CPXXgetcallbacknodeintfeas 和 CPXgetcallbacknodeintfeas
对于每个变量,例程 CPXXgetcallbacknodeintfeas/CPXgetcallbacknodeintfeas 检索有关该变量在子问题的当前节点处是否为整数可行的信息。
int CPXXgetcallbacknodeintfeas( CPXCENVptr 环境, void * cbdata, int 由此, int * 可行性, CPXDIM 兴办, CPXDIM 最后 )
int CPXgetcallbacknodeintfeas( CPXCENVptr 环境, void * cbdata, int 由此, int * 可行性, int 兴办, int 最后 )
描述
这是高级例程。 高级例程通常需要深入了解 CPLEX 所使用的算法。 因而它们会提高应用程序中错误行为的风险,而这种行为可能难以调试。 所以,本团队鼓励您认真考虑您是否可以改为通过其他 Callable Library 例程来完成同一任务。
对于每个变量,例程 CPXXgetcallbacknodeintfeas/CPXgetcallbacknodeintfeas 检索有关该变量在子问题的当前节点处是否为整数可行的信息。 在 MIP 优化期间,可以在用户编写的回调中使用此例程。 如果将 "在原始模型和缩小的预分解模型之间进行 MIP 回调切换(CPXPARAM_MIP_Strategy_CallbackReducedLP)设置为 "CPX_OFF,则信息来自原始问题。 否则,此信息来自于预求解问题。
当 wherefrom==CPX_CALLBACK_MIP 时,任何查询当前 LP 解的例程都可能会生成无效数据,因为在此情况下,将在对当前节点的 LP 松弛进行求解之前调用 MIP 回调。
参数
- env
- 一个指向
CPXXopenCPLEX/CPXopenCPLEX所返回 CPLEX 环境的指针。 - cbdata
- 传递给用户编写回调的指针。 此自变量必须是传递给用户编写回调的
cbdata的值。 - wherefrom
- 一个整数值,用于报告从何处调用用户编写的回调。 此自变量必须是传递给用户编写回调的
wherefrom的值。 请勿以wherefrom==CPX_CALLBACK_MIP_DELETENODE来调用此例程。 - feas
- 一个数组,用于接收节点子问题的整数可行性信息。 该数组的长度必须至少为 (
end-begin+1)。如果成功,"feas[0]到 "feas[end-begin]将包含整数可行性信息。 下表列出可能的返回值。 - 开始
- 一个整数,用于指定要返回的整数可行性信息范围的开始。
- 结束
- 一个整数,用于指定要返回的整数可行性信息范围的结束。
返回
如果此例程成功,那么会返回 0,而如果发生错误,那么会返回非零。示例
status = CPXgetcallbacknodeintfeas(env, cbdata, wherefrom,
feas, 0, cols-1);
请参阅标准分发版中的 admipex1.c 和 admipex2.c。
从求解回调函数中调用 CPXXgetcallbacknodeintfeas/CPXgetcallbacknodeintfeas 之前,必须存在某个解;即,必须先通过调用 CPLEX 优化例程(例如 CPXXdualopt/CPXdualopt)创建该解,接着通过检查其返回值验证此例程是否已生成解,然后才能调用 CPXXgetcallbacknodeintfeas/CPXgetcallbacknodeintfeas。
可以使用 wherefrom 的任何值(CPX_CALLBACK_MIP_DELETENODE 除外)调用此例程。
CPX_INTEGER_FEASIBLE |
0 | 变量 j+begin 是整数值 |
CPX_INTEGER_INFEASIBLE |
1 | 变量 j+begin 不是整数值 |
CPX_IMPLIED_INTEGER_FEASIBLE |
2 | 变量 j+begin 在当前解中可能具有小数值,但是当问题中仍存在的所有整数变量都具有整数值时,它将具有整数值。 它不应进行向上分支。 |