如何在Google OR-Tools(SCIP)中找到解后终止所有线程?
解决SCIP求解器找到第一个可行解后立即终止的问题
你可以通过设置SCIP求解器的专属参数,让它在找到第一个可行解后立刻终止所有线程,无需依赖时间限制。具体操作如下:
核心方案
利用SCIP的limits/solutions参数,指定找到的可行解数量达到1时就停止求解。同时可配合focus/focusnode参数让求解器优先聚焦于寻找可行解,加快触发终止的速度。
完整代码示例
from ortools.linear_solver import pywraplp # 初始化SCIP求解器 solver = pywraplp.Solver("assignment", pywraplp.Solver.SCIP_MIXED_INTEGER_PROGRAMMING) # 设置多线程数 solver.SetNumThreads(4) # 设置找到1个可行解后立即终止 solver.SetSolverSpecificParameters("limits/solutions = 1") # 可选:让求解器优先聚焦寻找可行解,加速找到第一个解 solver.SetSolverSpecificParameters("focus/focusnode = 1") # --- 此处添加你的变量、约束、目标函数定义代码 --- # 执行求解 status = solver.Solve() # 根据求解状态处理结果 if status == pywraplp.Solver.FEASIBLE: print("已找到可行解") # 编写解的处理逻辑 elif status == pywraplp.Solver.OPTIMAL: print("已找到最优解") # 编写解的处理逻辑 else: print("未找到可行解")
参数说明
limits/solutions = 1:SCIP的核心终止参数,当求解器找到1个可行解时,会立即停止所有线程的求解过程,不管是否存在更优解。focus/focusnode = 1:辅助参数,让求解器优先投入资源寻找第一个可行解,而非一开始就尝试优化目标值,能更快触发终止条件。
内容的提问来源于stack exchange,提问作者dario_optimizer
相关产品推荐
相关产品推荐

