SCIP/OR-Tools:求解器达到指定目标值后停止的功能配置问题
SCIP目标值停止功能相关问题解答
1. SCIP是否支持「达到指定目标值即停止」功能
支持,SCIP原生提供完全对等GUROBI BestObjStop的功能,对应原生参数为 limits/objective:
- 求解最小化MILP问题时:当求解器搜索到目标值 ≤ 你设定的参数值的可行解时,会直接终止求解
- 求解最大化MILP问题时:当求解器搜索到目标值 ≥ 你设定的参数值的可行解时,会直接终止求解
补充:如果你需要基于上下界的间隙阈值停止,可额外使用SCIP的
limits/stoppinggap参数,该参数可设置目标间隙达到指定值时终止求解。
2. C++环境下通过or-tools调用该功能的方法
可以直接调用,or-tools的SCIP后端支持透传所有SCIP原生参数,无需额外适配,参考代码片段如下:
#include "ortools/linear_solver/linear_solver.h" int main() { // 初始化SCIP求解器实例 std::unique_ptr<operations_research::MPSolver> solver( operations_research::MPSolver::CreateSolver("SCIP")); // 此处省略你的MILP模型构建逻辑(变量、约束、目标函数定义) // 设置目标值停止阈值,例:最小化问题目标到150即停止 solver->SetSolverSpecificParameter("limits/objective", "150"); // 执行求解 operations_research::MPSolver::ResultStatus solve_status = solver->Solve(); // 后续处理求解结果逻辑 return 0; }
- 注意
SetSolverSpecificParameter的第二个参数为字符串类型,按照你的实际需求修改对应数值即可 - 触发目标阈值停止后,求解返回状态为
MPSolver::FEASIBLE,你可以通过solver->Objective().Value()获取到达到阈值的可行解目标值
内容的提问来源于stack exchange,提问作者cryptobeginner
相关产品推荐
相关产品推荐

