【问题标题】:Julia JUMP Gurobi MIP - query and store best objective and bound at runtimeJulia JUMP Gurobi MIP - 在运行时查询和存储最佳目标和绑定
【发布时间】:2021-12-03 17:30:04
【问题描述】:

我通过 Julia 中的 JuMP 包使用 Gurobi 来求解混合整数程序。

我想获得一张图表 like this one,其中还提供了基于 Python 的解决方案(也在 Gurobi community form)。

但是,我还没有找到 Julia 通过 JuMP 调用 Gurobi 的有效解决方案。 我知道必须使用回调函数(例如this suggestion 甚至main documentation here),但我不完全了解它们的工作原理以及实现目标的必要条件。

非常感谢任何帮助,以及对回调函数在每个步骤中所做工作的可能描述。

如果有帮助,我正在使用 Gurobi (v.9.0.0)、JuMP (v0.20.1)、MathOptInterface (v0.9.22) 和 Julia (v.1.3.0)。

【问题讨论】:

    标签: callback julia gurobi mixed-integer-programming julia-jump


    【解决方案1】:

    您需要使用 C API。这是 Eli 在 Gurobi 论坛上的回答的翻译:

    using JuMP, Gurobi
    model = direct_model(Gurobi.Optimizer())
    N = 30
    @variable(model, x[1:N], Bin)
    @constraint(model, rand(N)' * x  <= 10)
    @objective(model, Max, rand(N)' * x)
    data = Any[]
    start_time = 0.0
    function my_callback_function(cb_data, cb_where::Cint)
        @show cb_where
        if cb_where == GRB_CB_MIP
            objbst = Ref{Cdouble}()
            GRBcbget(cb_data, cb_where, GRB_CB_MIP_OBJBST, objbst)
            objbnd = Ref{Cdouble}()
            GRBcbget(cb_data, cb_where, GRB_CB_MIP_OBJBND, objbnd)    
            push!(data, (time() - start_time, objbst[], objbnd[]))
        end
        return
    end
    MOI.set(model, Gurobi.CallbackFunction(), my_callback_function)
    start_time = time()
    optimize!(model)
    open("data.csv", "w") do io
        for x in data
            println(io, join(x, ", "))
        end
    end
    

    附言请更新到 Julia 1.6 和 JuMP 0.22。我还没有测试这是否适用于旧版本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-24
      • 2013-08-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多