如何在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
相关产品推荐
相关产品推荐

