SNOPT (Sparse Nonlinear OPTimizer) is a software package for solving large-scale optimization problems (linear and nonlinear programs) of the form

\[ \begin{align} \min_x \quad & f(x) \\ \text{subject to} \quad & l \le c(x) \le u \\ \end{align} \]

It employs a sparse SQP algorithm with limited-memory quasi-Newton approximations to the Hessian of Lagrangian. SNOPT is especially effective for nonlinear problems whose functions and gradients are expensive to evaluate. The functions should be smooth but need not be convex. An augmented Lagrangian merit function ensures convergence from an arbitrary point. Infeasible problems are treated methodically via elastic bounds on the nonlinear constraints. SNOPT allows the nonlinear constraints to be violated (if necessary) and minimizes the sum of such violations.

  • Written in Fortran 77+

  • Intended for large-scale problems

  • Interoperability with C, C++, Python, Julia, and Matlab

  • For academics and for evaluation purposes, we provide precompiled Matlab mex-files and libraries for a restricted version of SNOPT. Downloads are available here.

What’s New in SNOPT

SNOPT 7.7.4

  • Messages related to license checking are turned off if general output is turned off.

  • This update also includes improvements for Warm/Hot start runs.

SNOPT 7.7.3

  • A bug that incorrectly declared problems with infeasible elastic variables optimal has been fixed. The number and sum of infeasibilities has been updated to correctly reflect elastic infeasibilities, if they exist.

  • Solution output has also been updated to print the constraint multipliers correctly, and to correctly label infeasible constraint slacks.

SNOPT 7.7.1

  • C/C++ interface are compiled into the SNOPT library. C support is now enabled by default.

SNOPT 7.7.0

  • SNOPT 7.7.0 introduces new subroutines snInitF and snSpecF. These subroutines are alternatives to the existing subroutines snInit and snSpec. The purpose of the new subroutines is to hide the assignment of Fortran file unit numbers and file handling from the user. Users pass the filename as a character string to snInitF and snSpecF, and the file is opened internally using an available file unit number. When using shared libraries, users may get unexpected results with Fortran unit numbers if the executable program is not linked to the appropriate Fortran runtime library. These subroutines will eliminate this issue by handling unit numbers internally.

  • The f2c’d version of SNOPT is no longer included in the distribution.


  • P. E. Gill, W. Murray, M. A. Saunders, Elizabeth Wong. SNOPT 7.7 User’s Manual. CCoM Technical Report 18-1, Center for Computational Mathematics, University of California, San Diego.

  • P. E. Gill, W. Murray and M. A. Saunders. SNOPT: An SQP algorithm for large-scale constrained optimization. SIAM Review 47 (2005), 99-131.