SCIP C API分支规则开发:获取变量目标函数系数敏感性范围
SCIP C API获取变量目标系数敏感性范围的方法
SCIP提供了专门的敏感性分析函数,在
BRANCHEXECLP回调中可直接调用SCIPcomputeObjPseudosensitivity()计算单个变量的目标系数允许变化范围。该函数返回的[objlow, objup]区间,就是变量目标系数的变化范围——在此范围内调整时,当前LP松弛的最优基结构保持不变,即最优解的基变量集合、非基变量的松弛状态均不会改变。调用示例代码:
SCIP_VAR* targetVar = ...; // 你要分析的候选变量 SCIP_Real objLowerBound; // 目标系数下界x1 SCIP_Real objUpperBound; // 目标系数上界x2 // 最后一个参数设为FALSE,基于当前已求解的LP最优解直接计算敏感性 SCIP_RETCODE ret = SCIPcomputeObjPseudosensitivity(scip, targetVar, &objLowerBound, &objUpperBound, FALSE);注意事项:
- 调用前需确保当前LP松弛已求解至最优状态,可通过
SCIPisLPSolved(scip)验证,否则计算结果无效。 - 若变量为固定变量或未包含在当前LP中,函数会返回错误码,需提前做变量有效性判断。
- 该区间仅保证最优基结构不变,目标值会随系数变化线性调整;系数超出范围后,最优基会改变,LP最优解也会随之变化。
- 调用前需确保当前LP松弛已求解至最优状态,可通过
内容的提问来源于stack exchange,提问作者Sim
相关产品推荐
相关产品推荐

