CPXXgetcallbacknodelp 和 CPXgetcallbacknodelp
例程 CPXXgetcallbacknodelp/CPXgetcallbacknodelp 用于从用户编写的回调中返回指向子问题当前节点的指针。
int CPXXgetcallbacknodelp( CPXCENVptr 环境, void * cbdata, int 由此, CPXLPptr * nodelp_p )
int CPXgetcallbacknodelp( CPXCENVptr 环境, void * cbdata, int 由此, CPXLPptr * nodelp_p )
描述
这是高级例程。 高级例程通常需要深入了解 CPLEX 所使用的算法。 因而它们会提高应用程序中错误行为的风险,而这种行为可能难以调试。 所以,本团队鼓励您认真考虑您是否可以改为通过其他 Callable Library 例程来完成同一任务。
例程 CPXXgetcallbacknodelp/CPXgetcallbacknodelp 用于从用户编写的回调中返回指向子问题当前节点的指针。 通常,此指针只能在
CPLEX Callable Library 查询例程(例如 CPXXsolution/CPXsolution 或
CPXXgetrows/CPXgetrows)中使用。
请注意,在原始模型和缩小的预分解模型之间切换 MIP 回调的设置(CPXPARAM_MIP_Strategy_CallbackReducedLP)不会影响 "lp指针。 因为 CPLEX 不会显式维护未预求解的节点 LP,所以 lp 指针将对应于预求解节点
LP,除非 CPLEX 预求解已关闭,或者 CPLEX 完全未进行任何预求解缩减。
参数
- env
- 一个指向
CPXXopenCPLEX/CPXopenCPLEX所返回 CPLEX 环境的指针。 - cbdata
- 传递给用户编写的回调的
cbdata指针。 此自变量必须是传递给用户编写回调的cbdata的值。 - wherefrom
- 一个整数值,报告从何处调用了用户编写回调。 此自变量必须是传递给用户编写回调的
wherefrom的值。 - nodelp_p
lp指针,指定当前子问题。 如果未定义子问题,那么此指针将设置为NULL。
返回
如果此例程成功,那么会返回 0,而如果发生错误,那么会返回非零。示例
status = CPXgetcallbacknodelp (env, cbdata, wherefrom, &nodelp);
另请参阅标准分发版中的示例 admipex1.c 和 admipex6.c。
请勿以 wherefrom==CPX_CALLBACK_MIP_DELETENODE 来调用此例程。 请勿以
wherefrom==CPX_CALLBACK_MIP_NODE 来调用此例程。 换言之,仅当 CPXXgetcallbacknodelp/CPXgetcallbacknodelp 的自变量 wherefrom 具有下列其中一个值时,才能调用此例程:
CPX_CALLBACK_MIP,CPX_CALLBACK_MIP_BRANCH,CPX_CALLBACK_MIP_CUT_FEAS,CPX_CALLBACK_MIP_CUT_LOOP,CPX_CALLBACK_MIP_CUT_LAST,CPX_CALLBACK_MIP_CUT_UNBD,CPX_CALLBACK_MIP_DISJCUT,CPX_CALLBACK_MIP_FLOWMIR,CPX_CALLBACK_MIP_FRACCUT,CPX_CALLBACK_MIP_HEURISTIC,CPX_CALLBACK_MIP_INCUMBENT_HEURSOLN,CPX_CALLBACK_MIP_INCUMBENT_NODESOLN,CPX_CALLBACK_MIP_INCUMBENT_USERSOLN,CPX_CALLBACK_MIP_PROBECPX_CALLBACK_MIP_SOLVE.
当 wherefrom 自变量的值为 CPX_CALLBACK_MIP_SOLVE 时,此子问题指针也可以在 CPLEX 优化例程中使用。