Hi, I am tryng to solve a MIP model (VRP) by solving a relaxed version of the model and repeatedly identifying violated contraints and adding those contraints to the model using add_constraint(model1, cons).
But I get this ERROR message example: “VariableNotOwned{VariableRef}(x[2,1])”
The variable x[2,1] is in the model and I cant find how to solve it.
Thanks in advance for any information.
SDS
Can you provide a reproducible example?
You get this error if you mix variables between two separate models.
julia> using JuMP
julia> model = Model();
julia> @variable(model, x);
julia> model2 = Model();
julia> @constraint(model2, x >= 1)
ERROR: VariableNotOwned{VariableRef}(x)
Stacktrace:
We should make the error more explanatory: Make VariableNotOwned error more explanatory · Issue #3517 · jump-dev/JuMP.jl · GitHub
Hi odow, thanks for the reply. Its not the case of two separate models. I use only one model wich I call model1.
The model is bit long to write here, so I’ll try to reproduce the project structure, hoping it can be usefull.
function identify_cuts(Vx_val, Instance)
(…)
return allcuts
end
function create_model(Instance)
model1 = Model(Gurobi.Optimizer)
Vtotal = Instance[8] #Example Vtotal = collect(1:20)
@variable(model1, 0 <= x[i in Vtotal, j in Vtotal] <= 1)
(…)
return model1
end
function solve_VRP(Instance, model1, runtime)
runtime_limit = runtime
set_time_limit_sec(model1, runtime_limit)
relaxation = true
model1 = create_model(Instance)
its = 0
while true && its <= 100
optimize!(model1)
its += 1
println("[$its] z = ", objective_value(model1))
x_val = value.(model1[:x])
#x = model1[:x]
if !relaxation
println("z = ", objective_value(model1))
println("Iterations = ", its)
return x_val
end
Vtotal = Instance[8]
Vx_val = []
for i in collect(1:length(Vtotal)), j in collect(1:length(Vtotal))
if x_val[i,j] > 0.001
push!(Vx_val, (i, j, x_val[i,j]))
end
end
allcuts = identify_cuts(Vx_val, Instance)
if length(allcuts) == 0
if relaxation
unset_silent(model1)
set_integer.(model1[:x])
relaxation = false
else
println("z = ", objective_value(model1))
println("Iterations = ", its)
return sol_x
end
end
for cons in allcuts
add_constraint(model1, cons)
end
end
end
Can you provide more detail? It’s hard to say what’s wrong based on this. It looks okay.
I use only one model which I call model1
Then you must have other models or variables in the same scope.
What is identify_cuts
?
Do you have the full stack trace of the error? What line generates the error? What is add_constraint(model1, cons)
?