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

如何在Gurobi中保存MIP Gap(求解间隙)与上界(目标边界)

Gurobi限时求解MIP时保存上界、MIP Gap及解的实现方法

步骤1:配置求解器基础参数

首先设置求解时间限制,通过Gurobi内置的TimeLimit参数配置,单位为秒,示例:

  • 30分钟时间限制:model.setParam('TimeLimit', 1800)
  • 1小时时间限制:model.setParam('TimeLimit', 3600)

步骤2:求解后直接提取内置属性

不需要手动解析运行日志,Gurobi模型对象在求解结束后自带所有需要的指标,直接访问对应属性即可:

  • 已求得可行解的目标值(最小化问题对应下界,最大化问题对应上界):model.ObjVal
  • 全局理论界(最小化问题对应上界,最大化问题对应下界):model.ObjBound
  • MIP解间隙:model.MIPGap,返回值为小数形式,例如0.03代表间隙为3%
  • 变量取值:访问单个变量的.X属性即可,例如变量x的取值为x.X

步骤3:完整实现示例(Python接口)

import gurobipy as gp
from gurobipy import GRB
import json

# 构建你的MIP模型
model = gp.Model("large_scale_mip")
# ------------- 此处添加你的变量、约束、目标函数 -------------
x = model.addVar(vtype=GRB.INTEGER, name="x")
y = model.addVar(vtype=GRB.BINARY, name="y")
model.addConstr(x + 2 * y >= 5)
model.setObjective(x + y, GRB.MINIMIZE)
# ----------------------------------------------------------

# 配置求解参数
model.setParam('TimeLimit', 1800) # 设置30分钟时限
# model.setParam('OutputFlag', 0) # 如需关闭控制台日志可取消注释

# 启动求解
model.optimize()

# 提取并保存结果
result = {}
# 先判断求解状态与可行解存在性,避免属性访问报错
if (model.status == GRB.OPTIMAL or model.status == GRB.TIME_LIMIT) and model.SolCount > 0:
    result['feasible_obj'] = model.ObjVal
    result['global_bound'] = model.ObjBound
    result['mip_gap'] = model.MIPGap
    result['var_values'] = {var.VarName: var.X for var in model.getVars()}

# 自行选择存储格式,例如存入json文件
with open('solve_result.json', 'w', encoding='utf-8') as f:
    json.dump(result, f, indent=2, ensure_ascii=False)

补充说明

如果你需要保存求解过程中每一步迭代的上下界、间隙变化,可通过自定义回调函数实现:调用model.setCallback()注册回调函数,在回调逻辑中捕捉MIP节点信息,实时记录迭代过程中的指标变化即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 01:45:01