CPXXgetcallbacklp 和 CPXgetcallbacklp
例程 CPXXgetcallbacklp/CPXgetcallbacklp 用于检索一个指针,该指针指向调用用户编写回调函数时使用的 MIP 问题。
int CPXXgetcallbacklp( CPXCENVptr 环境, void * cbdata, int 由此, CPXCLPptr * lp_p )
int CPXgetcallbacklp( CPXCENVptr 环境, void * cbdata, int 由此, CPXCLPptr * lp_p )
描述
这是高级例程。 高级例程通常需要深入了解 CPLEX 所使用的算法。 因而它们会提高应用程序中错误行为的风险,而这种行为可能难以调试。 所以,本团队鼓励您认真考虑您是否可以改为通过其他 Callable Library 例程来完成同一任务。
例程 CPXXgetcallbacklp/CPXgetcallbacklp 用于检索一个指针,该指针指向调用用户编写回调函数时使用的 MIP 问题。 如果 "在原始模型和缩小的预分解模型之间进行 MIP 回调切换(CPXPARAM_MIP_Strategy_CallbackReducedLP)设置为 "CPX_OFF,则为原始 MIP;否则为预解 MIP。 要获取与此 MIP 相关联的节点 LP 的相关信息,请使用以下例程:
CPXXgetcallbacknodeintfeas/CPXgetcallbacknodeintfeasCPXXgetcallbacknodelb/CPXgetcallbacknodelbCPXXgetcallbacknodeub/CPXgetcallbacknodeubCPXXgetcallbacknodex/CPXgetcallbacknodexCPXXgetcallbackgloballb/CPXgetcallbackgloballbCPXXgetcallbackglobalub/CPXgetcallbackglobalub
如果MIP 回调在原始模型和缩小的预分解模型之间的切换(CPXPARAM_MIP_Strategy_CallbackReducedLP)被关闭(即设置为 "CPX_OFF),则每个例程都将返回与原始 MIP 相关的节点信息;否则,它们将返回与预分解 MIP 相关的信息。
对比之下,函数 CPXXgetcallbacknodelp/CPXgetcallbacknodelp 将返回指向节点子问题(这是一个
LP)的指针。 请注意,在原始模型和缩小的预分解模型之间切换 MIP 回调的设置(CPXPARAM_MIP_Strategy_CallbackReducedLP)不会影响 "lp指针。 因为 CPLEX 不会显式维护未预求解的节点 LP,所以 lp 指针将对应于预求解节点
LP,除非 CPLEX 预求解已关闭,或者 CPLEX 完全未进行任何预求解缩减。 通常,此指针只能在
CPLEX Callable Library 查询例程(例如 CPXXsolution/CPXsolution 或
CPXXgetrows/CPXgetrows)中使用。
可以从任何 MIP 回调中调用例程 CPXXgetcallbacklp/CPXgetcallbacklp。
参数
- env
- 一个指向
CPXXopenCPLEX/CPXopenCPLEX所返回 CPLEX 环境的指针。 - cbdata
- 传递给用户编写回调的指针。 此自变量必须是传递给用户编写回调的
cbdata的值。 - wherefrom
- 一个整数值,用于报告从何处调用用户编写的回调。 此自变量必须是传递给用户编写回调的
wherefrom的值。 - lp_p
- 一个指向类型为
CPXLPptr的变量的指针,该变量接收指向 LP 问题对象(这是一个 MIP)的指针。
返回
如果此例程成功,那么会返回 0,而如果发生错误,那么会返回非零。示例
status = CPXgetcallbacklp (env, cbdata, wherefrom, &origlp);
另请参阅标准分发版中的 admipex1.c、admipex2.c 和 admipex3.c。