Choosing Sub-Solvers
Alpine's global optimization algorithm requires a few types of optimization problems to be solved efficiently. For its best performance, it is recommended that a dedicated solver is used for these purposes. The design of Alpine takes advantage of MathOptInterface to seemlessly interface with a majority of optimization software. Currently, the following sub-solvers with Julia Interface are supported by Alpine:
Solver | Julia Package |
---|---|
CPLEX | CPLEX.jl |
Cbc | Cbc.jl |
Gurobi | Gurobi.jl |
Ipopt | Ipopt.jl |
Bonmin | Bonmin.jl |
Artelys KNITRO | KNITRO.jl |
As the development of Alpine continues, supports for solvers such as Mosek, GLPK, NLopt and Xpress are in the development roadmap.
To solve any continuous nonlinear program to global optimality, here is an example to utilize different sub-solvers with default options set for Alpine:
using Alpine
using JuMP
using Gurobi
using Ipopt
# MIP optimizer
const gurobi = optimizer_with_attributes(Gurobi.Optimizer,
MOI.Silent() => true,
"Presolve" => 1)
# NLP optimizer
const ipopt = optimizer_with_attributes(Ipopt.Optimizer,
MOI.Silent() => true,
"sb" => "yes",
"max_iter" => 9999)
# Global optimizer
const alpine = optimizer_with_attributes(Alpine.Optimizer,
"nlp_solver" => ipopt,
"mip_solver" => gurobi)
m = Model(alpine)
Similarly, many such optimizer options and nonconvex problems (both NLPs and MINLPs) can be found in the examples folder.