I am trying read_from_file
and solve a model with MOI.Parameter
but failing when I have non-linear constraints:
using JuMP
using MathOptInterface
using Ipopt
model = JuMP.Model(Ipopt.Optimizer)
set_silent(model)
# Parameters
@variable(model, p ∈ MOI.Parameter(1.5))
@variable(model, p_prox)
# Variables
@variable(model, x)
# Constraints
@constraint(model, con, p_prox == p)
@constraint(model, x * sin(p_prox) == 1)
@objective(model, Min, sum(x))
optimize!(model) # Works
@assert is_solved_and_feasible(model)
write_to_file(model, "test.mof.json")
model_test = read_from_file("test.mof.json")
set_optimizer(model_test, Ipopt.Optimizer)
JuMP.optimize!(model_test) # Fails
julia> JuMP.optimize!(model_test)
ERROR: Cannot mix the new and legacy nonlinear APIs
Stacktrace:
[1] error(s::String)
@ Base ./error.jl:35
[2] set
@ ~/.julia/packages/Ipopt/KZuET/src/MOI_wrapper.jl:776 [inlined]
[3] set(b::MathOptInterface.Bridges.LazyBridgeOptimizer{…}, attr::MathOptInterface.NLPBlock, value::MathOptInterface.NLPBlockData)
@ MathOptInterface.Bridges ~/.julia/packages/MathOptInterface/TYq6d/src/Bridges/bridge_optimizer.jl:944
[4] _pass_attribute(dest::MathOptInterface.Bridges.LazyBridgeOptimizer{…}, src::MathOptInterface.Utilities.UniversalFallback{…}, index_map::MathOptInterface.Utilities.IndexMap, attr::MathOptInterface.NLPBlock)
@ MathOptInterface.Utilities ~/.julia/packages/MathOptInterface/TYq6d/src/Utilities/copy.jl:51
[5] pass_attributes(dest::MathOptInterface.Bridges.LazyBridgeOptimizer{…}, src::MathOptInterface.Utilities.UniversalFallback{…}, index_map::MathOptInterface.Utilities.IndexMap)
@ MathOptInterface.Utilities ~/.julia/packages/MathOptInterface/TYq6d/src/Utilities/copy.jl:38
[6] default_copy_to(dest::MathOptInterface.Bridges.LazyBridgeOptimizer{…}, src::MathOptInterface.Utilities.UniversalFallback{…})
@ MathOptInterface.Utilities ~/.julia/packages/MathOptInterface/TYq6d/src/Utilities/copy.jl:391
[7] copy_to
@ ~/.julia/packages/MathOptInterface/TYq6d/src/Bridges/bridge_optimizer.jl:443 [inlined]
[8] optimize!
@ ~/.julia/packages/MathOptInterface/TYq6d/src/MathOptInterface.jl:121 [inlined]
[9] optimize!(m::MathOptInterface.Utilities.CachingOptimizer{…})
@ MathOptInterface.Utilities ~/.julia/packages/MathOptInterface/TYq6d/src/Utilities/cachingoptimizer.jl:327
[10] optimize!(model::Model; ignore_optimize_hook::Bool, _differentiation_backend::MathOptInterface.Nonlinear.SparseReverseMode, kwargs::@Kwargs{})
@ JuMP ~/.julia/packages/JuMP/xlp0s/src/optimizer_interface.jl:595
[11] optimize!(model::Model)
@ JuMP ~/.julia/packages/JuMP/xlp0s/src/optimizer_interface.jl:546
[12] top-level scope
@ REPL[28]:1
Some type information was truncated. Use show(err)
to see complete types.
odow
3
Do
model_test = read_from_file("test.mof.json"; use_nlp_block = false)
I might need to think about how we can do this automatically: [FileFormats.MOF] add a flag to the file when use_nlp_block=false · Issue #2687 · jump-dev/MathOptInterface.jl · GitHub
1 Like
He doesn’t wear a cape but he is still a hero! Thank you, it works!
1 Like