是否可以创建或访问间隙历史记录

Is it possible to create or access the gap history

在 Julia JuMP 中,我想知道是否可以访问数组或类似的 GAP 历史记录,GAP 改进。

我知道在优化结束时,我可以访问 relative_gap(m)m 类型 Model 的最终差距,我想要解决问题的改进历史过程。

它可以是例如 Float64 的向量,以百分比表示:gaps=[20.2, 16.7, 13.8, 5.1, 0]。在这种情况下,我的问题得到了最优解决,因为最终差距为 0。

最后,我想绘制解决时间函数中的差距改进。所以也许所有的差距值都可以是两个元素的一对,差距和解决这个新差距改进的时间?

也许这在 JuMP 中是不可能的,所以你可以为 Gurobi 回答?

谢谢!

一般情况下使用 JuMP 是不可能的。

可以在 Gurobi 中使用 solver-specific 回调执行此操作:https://github.com/jump-dev/Gurobi.jl#callbacks

或者您可以只解析打印的 Gurobi 日志文件。

但总的来说,这些信息并不是那么有用,因为它可能非常嘈杂。你为什么要它?

Oscar 在另一个 post 上回答了 Gurobi 回调解决方案 - 请参阅

然而,由于 Gurobi 对其 TimeLimit 非常认真,并且继续计算的时间很短,因此还有一种更简单的方法(此代码假设 mo 是您的 JuMP Gurobi 模型):

set_optimizer_attribute(mo, "TimeLimit", 2.0)
gap_history = Float64[]
max_steps = 1800
for t in 1:max_steps
    optimize!(mo)
    gap = MOI.get(mo, MOI.RelativeGap())
    status=termination_status(mo)
    push!(gap_history, gap)
    gap > 0.01 || status == MOI.TIME_LIMIT || break  
end