Hi!
I am sorry, I can not produce a MWE but I think you can still answer my question.
I need to use JuMP heuristic callbacks. However, the documentation only gives an exemple for a single variable. I need to submit a heuristic solution for different matrices, vectors and Float64
values.
function call_back_benders_heuristic(cb_data)
vars_submit = JuMP.VariableRef[]
vars_improve_two_opt_submit = Bool[]
for i in V
for j in i+1:n
push!(vars_submit, x[i,j])
push!(vars_improve_two_opt_submit, x_improve_two_opt[i,j])
end
end
status = MOI.submit(
m, MOI.HeuristicSolution(cb_data),
[vars_submit; y; JuMP.VariableRef[offset, λ]] ,
[vars_improve_two_opt_submit; y_improve_two_opt; Float64[bar_offset_improve_two_opt, λ_improve_two_opt]])
println("Submitted a heuristic solution with status $status")
end
MOI.set(m, MOI.HeuristicCallback(), call_back_benders_heuristic)
# Earlier in my JuMP model
@variable(m, x[i=V, j=i+1:n], Bin)
@variable(m, y[i=V], Bin)
@variable(m, offset >= 0)
@variable(m, λ >= 0)
As you can see, I have, a matrix of Bool
, x
, a vector of Bool
x
and two Float64
variables, offset
and λ
. My problem is that I get
Submitted a heuristic solution with status HEURISTIC_SOLUTION_REJECTED
My guess is that [vars_improve_two_opt_submit; y_improve_two_opt; Float64[bar_offset_improve_two_opt, λ_improve_two_opt]]
becomes an array of {Any}
because there are both arrays of Bool
and Float64
Please note that MOI.submit
:
status = MOI.submit(
m, MOI.HeuristicSolution(cb_data),
[vars_submit; y],
[vars_improve_two_opt_submit; y_improve_two_opt])
Works and give HEURISTIC_SOLUTION_ACCEPTED
with the major flaw that my two Float64
variables offset
and λ
do not get heuristically submitted!
Thanks a lot!