Drake
Formulating and Solving Optimization Problems

Drake wraps a number of commercial solvers (+ a few custom solvers) to provide a common interface for convex optimization, mixed-integer convex optimization, and other non-convex mathematical programs.

The MathematicalProgram class handles the coordination of decision variables, objectives, and constraints. The MathematicalProgram::Solve() method reflects on the accumulated objectives and constraints and will dispatch to the most appropriate solver. Alternatively, one can invoke specific solver by instantiating its MathematicalProgramSolverInterface and passing the MathematicalProgram directly to the MathematicalProgramSolverInterface::Solve() method.

Our solver coverage still has many gaps, but is under active development.

Closed-form solutions

The LinearSystemSolver and EqualityConstrainedQPSolver classes provide efficient closed-form solutions to these special cases.

Convex Optimization

Solver LP QP SOCP SDP SOS
Gurobi
Mosek

Mixed-Integer Convex Optimization

Solver MILP MIQP MISOCP MISDP
Gurobi
Mosek

Nonconvex Programming

Solver Nonlinear Program LCP SMT
SNOPT
Ipopt
NLopt
Moby LCP
dReal

† indicates that this is a commercial solver which requires a license (note that some have free licenses for academics).

Note: Drake must be able to locate each solver on your system during the configuration step (when you run cmake), otherwise that solver will be disabled. To simplify this process, we have attempted to make solvers available as a part of the Drake superbuild, but we are unable to publicly share the distributions for commercially licensed solvers.