Solvers


One of the core ideas in YALMIP is to rely on external solvers for the low-level numerical solution of optimization problem. YALMIP concentrates on efficient modeling and high-level algorithms.

Linear programming can be solved by quadratic programming which can be solved by second-order cone programming which can be solved by semidefinite programming. Hence, in theory, you only need a semidefinite programming solver if you only solve linear problems. In practice though, dedicated solvers are recommended.

A recommended installation if you mainly intend to solve semidefinite programs, and some LPs and QPs, is MOSEK. As semidefinite programming alternatives SEDUMI or SDPT3 are good choices.

If you solve non-trivial linear and quadratic programs (and nonconvex problems via BMIBNB,) a dedicated state-of-the-art LP/QP solver is definitely recommended. Most examples in this Wiki have been generated using MOSEK and GUROBI. These solvers have academic licenses giving access to full unlimited versions. MOSEK is a great general solver, but for MILPs GUROBI typically has the upper hand.

If you intend to solve large or generally challenging problemss, you should install several solvers to find one that works best for your problem.

And finally, there are no free lunches and you get what you pay for (unless you’re in academia!).

External solvers

A simple categorization is as follows (the definitions of free and commercial depends slightly on the solver, please see the specific comments in the solver description)

Linear programming (free)

CDD, CLP, GLPK, LPSOLVE, QSOPT, SCIP

Mixed Integer Linear programming (free)

CBC, GLPK, LPSOLVE, SCIP

Linear programming (commercial)

COPT (free for academia), CPLEX (free for academia), GUROBI (free for academia), KNITRO, LINPROG, MOSEK (free for academia), XPRESS (free for academia)

Mixed Integer Linear programming (commercial)

COPT (free for academia), CPLEX (free for academia), GUROBI (free for academia), INTLINPROG, KNITRO, MOSEK (free for academia), XPRESS (free for academia)

Quadratic programming (free)

OSQP, CLP, DAQP (mixed-binary), OOQP, QPC, QPOASES, QUADPROGBB (nonconvex QP)

Quadratic programming (commercial)

COPT (free for academia), CPLEX (free for academia), GUROBI (free for academia), KNITRO, MOSEK (free for academia), QUADPROG, XPRESS (free for academia)

Mixed Integer Quadratic programming (commercial)

COPT (free for academia), CPLEX (free for academia), GUROBI (free for academia), KNITRO, MOSEK (free for academia), XPRESS (free for academia)

Second-order cone programming (free)

ECOS, SCS, SDPT3, SEDUMI

Second-order cone programming (commercial)

COPT (free for academia), CPLEX (free for academia), CONEPROG, GUROBI (free for academia), MOSEK (free for academia), XPRESS (free for academia)

Mixed Integer Second-order cone programming (commercial)

COPT (free for academia), CPLEX (free for academia), GUROBI (free for academia), MOSEK (free for academia), XPRESS (free for academia)

Semidefinite programming (free)

CSDP, DSDP, LOGDETPPA, PENLAB, SCS, SDPA, SDPLR, SDPT3, SDPNAL, SEDUMI

Semidefinite programming (commercial)

COPT (free for academia), LMILAB (not recommended), MOSEK (free for academia), PENBMI, PENSDP (free for academia)

General nonlinear programming and other solvers

BARON, FILTERSD, FMINCON, GPPOSY, IPOPT, KNITRO, LMIRANK, MPT, NOMAD, PENLAB, SNOPT, SPARSEPOP

Internal solvers

By exploiting the optimization infrastructure in YALMIP, it is fairly easy to develop algorithms based on the external solvers. This has motivated development of mixed integer conic solvers (BNB, CUTSDP), general global nonlinear nonconvex integer programming (BMIBNB, KKTQP ), simple quasi-convex problems (bisection), sum-of-squares and semidefinite relaxation modules (solvesos and solvemoment).