CPXXsetheuristiccallbackfunc 和 CPXsetheuristiccallbackfunc
例程 CPXXsetheuristiccallbackfunc/CPXsetheuristiccallbackfunc 用于设置或修改用户编写回调,在 MIP 优化期间求解子问题获得最优解之后,CPLEX 将调用此回调。
int 'CPXXsetheuristiccallbackfunc'('CPXENVptr' '环境',' 'int(CPXPUBLIC'*' '启发式回调)(CPXX_CALLBACK_HEURISTIC_ARGS) ','void *' ' 'cbhandle')
int 'CPXsetheuristiccallbackfunc'('CPXENVptr' '环境',' 'int' ( 'CPXPUBLIC'*' '启发式回调)(CALLBACK_HEURISTIC_ARGS),'void *' 'cbhandle')
描述
这是高级例程。 高级例程通常需要深入了解 CPLEX 所使用的算法。 因而它们会提高应用程序中错误行为的风险,而这种行为可能难以调试。 所以,本团队鼓励您认真考虑您是否可以改为通过其他 Callable Library 例程来完成同一任务。
例程 CPXXsetheuristiccallbackfunc/CPXsetheuristiccallbackfunc 用于设置或修改用户编写回调,在 MIP 优化期间求解子问题获得最优解之后,CPLEX 将调用此回调。 当该子问题不可行或切除时,不会调用该回调。 该回调将向 CPLEX 提供以探试方式派生的整数解。
如果某个线性规划必须作为探试回调的一部分进行求解,请创建节点 LP 的副本并对该副本进行求解,而不要对 CPLEX 节点 LP 进行求解。
参数
- env
一个指向
CPXXopenCPLEX/CPXopenCPLEX所返回 CPLEX 环境的指针。- heuristiccallback
一个指针,指向用户编写的探试回调。 如果此回调设置为
NULL,那么在优化期间无法调用任何回调。- cbhandle
一个指针,指向用户专用数据。 此指针将传递给回调。
返回
如果此例程成功,那么会返回 0,而如果发生错误,那么会返回非零。示例
status = CPXsetheuristiccallbackfunc(env, myheuristicfunc, mydata);
另请参阅标准分发版中的示例 admipex2.c。
Callback 描述
int CPXPUBLIC
callback (CPXCENVptr env,
void *cbdata,
int wherefrom,
void *cbhandle,
double *objval_p,
double *x,
int *checkfeas_p,
int *useraction_p);
对探试回调的调用在获得子问题的最优解之后进行。 用户可提供该解,以启动用于寻找整数解的探试。 (请勿提供多个解:最后提供的解将覆盖先前提供的解。) 如果向 CPLEX 提供的整数解具有更好的目标值,那么将替换现任解。 作为现任解的一部分而保存的基底是来自子问题的最优基底;对于针对固定问题启动优化来说,它可能不是良好的基底。
如果在调用回调的 "CPXXmipopt/CPXmipopt之前,"在原始模型和缩小的预分解模型之间进行 MIP 回调切换(CPXPARAM_MIP_Strategy_CallbackReducedLP)被设置为 "CPX_OFF,CPLEX 返回的整数解就是原始问题的整数解。 否则,它是针对预求解问题。
回调返回值
如果回调成功,那么它会返回 0 ,而如果发生错误,那么会返回非零。
回调自变量
env
一个指向 CPXXopenCPLEX/CPXopenCPLEX 所返回 CPLEX 环境的指针。
cbdata
传递到获取特定于回调的信息(例如当前节点上整数不可用值的数量)的函数或采取特定于回调的操作(例如在用户割平面回调中添加割平面)的函数的指针。
wherefrom
一个整数值,用于报告在优化中调用此函数的位置。 它针对启发式回调具有 CPX_CALLBACK_MIP_HEURISTIC 的值。
cbhandle
一个指针,指向用户专用数据。
objval_p
一个指向变量的指针,在输入时,该变量包含子问题的最优目标值,而在返回时,该变量包含已找到的整数解(如果有)的目标值。
x
一个数组,在输入时,该数组包含子问题的原始解法值,而在返回时,该数组包含找到的整数解(如果有)的解值。 如果MIP 回调在原始模型和简化的预解析模型之间的切换(CPXPARAM_MIP_Strategy_CallbackReducedLP)被关闭(即设置为 "CPX_OFF),则数值来自原始问题;否则,数值来自预解析问题。
checkfeas_p
指向一个整数的指针,该整数指定 CPLEX 是否应该检查所返回的整数解以确定整数可行性。 如果 checkfeas_p 为非零值,那么将检查该解。 检查该解并确定整数不可行时,将废弃该解,并继续进行优化。
useraction_p
指向一个整数的指针,该整数包含用户回调完成时要执行的操作的说明符。 下表汇总了可能的值。
| 值 | 符号常量 | 操作 |
|---|---|---|
0 |
CPX_CALLBACK_DEFAULT |
找不到任何解 |
1 |
CPX_CALLBACK_FAIL |
退出优化 |
2 |
CPX_CALLBACK_SET |
使用返回值中报告的用户解 |