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

如何在Julia中使用JuMP搭配Gurobi获取最优解?

JuMP搭配Gurobi获取最优解的正确实现

标准实现代码

所有结果获取操作必须放在optimize!()求解执行完成后,且先校验求解状态,否则会触发报错,可直接套用下面的模板:

using JuMP, Gurobi
import MathOptInterface as MOI

# --------------- 此处为你的建模逻辑 ---------------
model = Model(Gurobi.Optimizer)
# 定义变量、约束、目标函数的代码
# -------------------------------------------------

# 执行求解
optimize!(model)

# 先校验求解状态,这步是必加的前置判断
if termination_status(model) == MOI.OPTIMAL
    # 获取最优目标值
    opt_objective = objective_value(model)
    println("最优目标值: ", opt_objective)

    # 方式1:获取单个变量的最优取值
    # 把x、y替换成你自己定义的变量名即可
    # opt_x = value(x)
    # opt_y = value(y)

    # 方式2:批量获取所有变量的最优取值,适合变量多的场景
    for var in all_variables(model)
        println("变量 ", name(var), " 最优取值: ", value(var))
    end

    # 正确调用solution_summary的方式,verbose=true输出全量信息
    println(solution_summary(model, verbose=true))
else
    println("未求得最优解,当前求解终止状态: ", termination_status(model))
end

常见报错原因排查

  • 调用取值、solution_summary的位置不对:所有结果获取逻辑必须放在optimize!(model)执行之后,求解前内存中无结果数据,调用必报错
  • 缺少求解状态校验:如果模型本身无可行解、无界、求解超时未收敛到最优,此时不存在合法最优解,直接调用取值函数或summary会触发异常
  • 版本兼容问题:JuMP和Gurobi包版本不匹配时会出现接口调用异常,在Julia REPL执行] update JuMP Gurobi升级到兼容的稳定版即可
  • 多解场景参数缺失:如果设置了求解器保留多个可行解,调用value()时需要指定result参数,例如取第2个解的x变量值用value(x; result=2)

注意事项

  • 如果模型包含整数变量,可通过relative_gap(model)查看当前解的MIPGap,确认结果精度符合要求
  • 如果需要获取约束的对偶值,在求解状态校验通过后调用dual(约束名)即可,注意仅线性规划、二次规划等凸连续模型有合法对偶值
  • solution_summary默认输出精简结果,传入verbose=true才会返回求解耗时、变量约束规模、Gap等全量统计信息

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.11 16:16:24