CPXXgetcallbackindicatorinfoCPXgetcallbackindicatorinfo

例程 "CPXXgetcallbackindicatorinfo/CPXgetcallbackindicatorinfo可在 MIP 回调过程中获取预解问题的指标约束信息。

int  CPXXgetcallbackindicatorinfo( CPXCENVptr 环境, void * cbdata, int 由此, CPXDIM iindex, int whichinfo, void * result_p )

int  CPXgetcallbackindicatorinfo( CPXCENVptr 环境, void * cbdata, int 由此, int iindex, int whichinfo, void * result_p )

描述

警告:

这是高级例程。 高级例程通常需要深入了解 CPLEX 所使用的算法。 因而它们会提高应用程序中错误行为的风险,而这种行为可能难以调试。 所以,本团队鼓励您认真考虑您是否可以改为通过其他 Callable Library 例程来完成同一任务。

例程 "CPXXgetcallbackindicatorinfo/CPXgetcallbackindicatorinfo可在 MIP 回调过程中获取预解问题的指标约束信息。 当存在指标约束条件时,CPLEX 会创建一个带有指标约束条件的典型形式的预解问题,与预解设置无关。


 Canonical Form
 (implying variable = { 0 | 1 }) IMPLIES (implied variable) R rhs
 

在这种典型形式中,rhs 代表右侧,R 代表其中一种关系:

  • 小于或等于
  • 大于或等于
  • 等于

在原始问题中,你可能会遇到隐含约束条件有两个或多个变量的指标约束。 相比之下,在规范形式中,隐含约束条件只能有一个变量;而且,它在约束条件中的系数必须是 1(一)。 例如,CPLEX 将指标约束转换为


 x = 0 -> 3y + z <= 0
 

通过引入隐含变量 "w,将其转换为规范格式,就像这样:


 w = 3y + z
 x = 0 -> w <= 0
 

The argument whichinfo can assume one of the following values in a call to CPXXgetcallbackindicatorinfo/CPXgetcallbackindicatorinfo:

  • CPX_CALLBACK_INFO_IC_NUM返回指标约束的数量。
  • CPX_CALLBACK_INFO_IC_IMPLYING_VAR返回 "iindex-th 指标约束的隐含变量索引。 如果MIP 回调在原始模型和简化的预分解模型之间的切换CPXPARAM_MIP_Strategy_CallbackReducedLP)是关闭的(即设置为 "CPX_OFF),则索引是以原始问题为单位的,如果索引 =-1,则变量是由预分解创建的。 否则,该索引将以预先解决的问题为单位。
  • CPX_CALLBACK_INFO_IC_IMPLIED_VAR返回 "iindex-th 指标约束的隐含变量索引。 如果 "在原始模型和缩小的预分解模型之间进行 MIP 回调切换CPXPARAM_MIP_Strategy_CallbackReducedLP)设置为 "CPX_OFF,则索引是以原始问题为单位的;如果索引 ="-1,则变量是由 presolve 创建的。 否则,该索引将以预先解决的问题为单位。
  • CPX_CALLBACK_INFO_IC_SENSE返回 "iindex-th 指标约束的意义。
  • CPX_CALLBACK_INFO_IC_COMPL returns 0 (zero) if the iindex-th indicator constraint is complemented, and 1 (one) otherwise.
  • CPX_CALLBACK_INFO_IC_RHS返回 "iindex-th 指标约束的右侧。
  • CPX_CALLBACK_INFO_IC_IS_FEASIBLE returns 1 (one) if the implying variable is not 0 (zero) or 1 (one), or if the iindex-th indicator constraint is satisfied at the current node; otherwise, it returns 0 (zero).
重要说明:

wherefrom==CPX_CALLBACK_MIP 时,任何查询当前 LP 解的例程都可能会生成无效数据,因为在此情况下,将在对当前节点的 LP 松弛进行求解之前调用 MIP 回调。

参数

env
一个指向 CPXXopenCPLEX/CPXopenCPLEX 所返回 CPLEX 环境的指针。
cbdata
传递给用户编写回调的指针。 此自变量必须是传递给用户编写回调的 cbdata 的值。
wherefrom

一个整数值,其报告从何处调用了用户编写的回调。 此自变量必须是传递给用户编写回调的 wherefrom 的值。

请勿以 wherefrom==CPX_CALLBACK_MIP_DELETENODE 来调用此例程。 请勿以 wherefrom==CPX_CALLBACK_MIP_NODE 来调用此例程。

iindex
整数,指标约束的索引。
whichinfo
一个整数,指定其中一个符号值,表示要访问哪类信息。
result_p
通用指针,指向 "double或 "int类型的变量,代表 "whichinfo返回的值。

返回

如果此例程成功,那么会返回 0,而如果发生错误,那么会返回非零。