是否可以创建或访问间隙历史记录
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
在 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