CPXXgetcallbacknodelpCPXgetcallbacknodelp

例程 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/CPXsolutionCPXXgetrows/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.cadmipex6.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_PROBE
  • CPX_CALLBACK_MIP_SOLVE.

wherefrom 自变量的值为 CPX_CALLBACK_MIP_SOLVE 时,此子问题指针也可以在 CPLEX 优化例程中使用。

警告对子问题的任何修改都可能导致问题和 CPLEX 环境的损坏。
非零返回值可能表示所请求的值不可用。