SNOPT is a general-purpose system for solving
optimization problems involving many variables and constraints. It
minimizes a linear or nonlinear function subject to bounds on the variables
and sparse linear or nonlinear constraints. It
is suitable for large-scale linear and quadratic programming and for linearly
constrained optimization, as well as for general nonlinear programs.

SNOPT finds solutions that are
locally optimal, and ideally
any nonlinear functions should be smooth and users should provide gradients.
It is often
more widely useful. For
example, local optima are often global solutions, and discontinuities
in the function gradients can often be tolerated if they are not too close
to an optimum. Unknown
gradients are estimated by finite differences.

SNOPT uses a sequential quadratic
programming (SQP) algorithm that
obtains search directions from a sequence of quadratic programming subproblems.
Each QP subproblem minimizes a quadratic
model of a certain Lagrangian function subject to a linearization of the
constraints. An
augmented Lagrangian merit function is reduced along each search direction
to ensure convergence from any starting point.

SNOPT is most efficient if only
some of the variables enter nonlinearly, or if the number of active constraints
(including simple bounds) is nearly as large as the number of variables.
SNOPT
requires relatively few evaluations of the problem functions. Hence it
is especially effective if the objective or constraint functions (and
their gradients) are expensive to evaluate.

The source code for SNOPT is
suitable for any machine with a Fortran compiler. SNOPT may
be called from a driver program (typically in Fortran, C or MATLAB).

SNOPT can also be used as a
stand-alone package, reading data in the MPS
format used by commercial mathematical programming systems.