You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python+Google OR-Tools+SCIP求解器如何获取相对MIP gap

解答

完全可以查询,求解器的当前相对MIP gap存储和求解终止的触发条件没有关联,只要求解过程中至少找到了一个可行解,就能直接通过OR-Tools的内置接口获取数值。

具体用法如下:

  • 首先确认求解返回状态为FEASIBLE或者OPTIMAL,仅当存在可行解时gap查询才有意义
  • 直接调用求解器实例的MIPRelativeGap()方法即可获取当前的相对MIP gap,无需手动计算上下界
  • 你也可以通过MIPGap()获取绝对MIP gap,通过Objective().Value()获取当前最优可行解的目标值;MIPRelativeGap()返回的数值逻辑和SCIP原生日志输出的gap完全一致,计算公式为|可行解最优目标值 - 松弛问题下界| / max(|可行解最优目标值|, |松弛问题下界|),自动适配最小化/最大化问题场景

参考代码示例:

from ortools.linear_solver import pywraplp

# 初始化SCIP求解器
solver = pywraplp.Solver.CreateSolver("SCIP")

# 你的模型构建代码
# ......

# 示例设置30秒时间限制作为终止条件
solver.SetTimeLimit(30 * 1000)

# 触发求解
status = solver.Solve()

if status in (pywraplp.Solver.OPTIMAL, pywraplp.Solver.FEASIBLE):
    print(f"当前最优可行解目标值: {solver.Objective().Value():.4f}")
    print(f"当前相对MIP Gap: {solver.MIPRelativeGap():.4%}")
else:
    print("未找到有效可行解,无法计算MIP Gap")

内容的提问来源于stack exchange,提问作者sixflags

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 20:06:01