Is there an efficient way to change the solver associated with a JuMP
model? For example, I want to solve a model that takes a nontrivial amount of time to setup with a few different solvers. I am wondering if it is possible to reuse some (intermediate?) objects that JuMP
creates and pass them to different solvers. From the docs, it seems that JuMP.copy_model
is one approach?
Use set_optimizer
: Models · JuMP
model = Model(HiGHS.Optimizer)
# stuff
set_optimizer(model, Ipopt.Optimizer)
1 Like
Would I need to MathOptInterface.Utilities.reset_optimizer(model)
the model each time I change optimizer? What I was using is:
M = Model()
# stuff ...
M_HiGHS, refmap_HiGHS = JuMP.copy_model(M)
JuMP.set_optimizer(M_HiGHS, HiGHS.Optimizer)
optimize!(M_HiGHS)
M_Gurobi, refmap_Gurobi = JuMP.copy_model(M)
JuMP.set_optimizer(M_Gurobi, Gurobi.Optimizer)
optimize!(M_Gurobi)
Just do:
M = Model()
# stuff ...
JuMP.set_optimizer(M, HiGHS.Optimizer)
optimize!(M)
JuMP.set_optimizer(M, Gurobi.Optimizer)
optimize!(M)
JuMP takes care of the rest.
2 Likes