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

使用PuLp调用Gurobi求解MILP,超时后如何查看可行解?

解决PuLp调用Gurobi超时后获取可行解的方法

以下是在保留PuLp的前提下,获取Gurobi求解超时后找到的最优可行解的两种实用方法:

方法一:通过Gurobi结果文件读取可行解

在创建Gurobi求解器时,指定ResultFile参数,让Gurobi将求解过程中找到的最好可行解保存到.sol文件中,之后直接读取该文件提取变量值:

import pulp

# 构建你的MILP模型
prob = pulp.LpProblem("MyModel", pulp.LpMinimize)
# ... 变量、约束、目标函数定义 ...

# 创建Gurobi求解器,设置时间限制和结果文件路径
solver = pulp.GUROBI(timeLimit=60, options={"ResultFile": "best_solution.sol"})
# 求解模型
prob.solve(solver)

# 读取.sol文件获取变量值
with open("best_solution.sol", "r") as f:
    for line in f:
        if line.startswith("#") or not line.strip():
            continue
        var_name, var_value = line.strip().split()
        print(f"{var_name}: {float(var_value)}")

方法二:通过PuLp访问底层Gurobi模型提取解

PuLp的GUROBI求解器对象可以直接访问底层的Gurobi模型实例,利用Gurobi的API获取当前找到的最优可行解,并赋值给PuLp的变量对象:

import pulp

# 构建模型
prob = pulp.LpProblem("MyModel", pulp.LpMinimize)
# ... 变量、约束、目标函数定义 ...

# 创建求解器并设置时间限制
solver = pulp.GUROBI(timeLimit=60)
prob.solve(solver)

# 检查求解状态,若超时但存在可行解,提取变量值
if pulp.LpStatus[prob.status] in ["Feasible", "Not Optimal"]:
    # 遍历所有PuLp变量,从Gurobi模型中获取对应值
    for var in prob.variables():
        gurobi_var = solver.solverModel.getVarByName(var.name)
        var.varValue = gurobi_var.X
        # 打印变量值
        print(f"{var.name}: {var.varValue}")

关键注意事项

  • 确保Gurobi求解器版本与PuLp兼容,避免因版本差异导致底层模型访问失败。
  • 若模型包含整数变量,Gurobi在超时后返回的可行解会是满足整数约束的整数解,无需额外处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 10:47:50