Jump to content

Sequential quadratic programming

From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by Headbomb (talk | contribs) at 17:36, 10 February 2019 (ce). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.

Sequential quadratic programming (SQP) is an iterative method for constrained nonlinear optimization. SQP methods are used on mathematical problems for which the objective function and the constraints are twice continuously differentiable.

SQP methods solve a sequence of optimization subproblems, each of which optimizes a quadratic model of the objective subject to a linearization of the constraints. If the problem is unconstrained, then the method reduces to Newton's method for finding a point where the gradient of the objective vanishes. If the problem has only equality constraints, then the method is equivalent to applying Newton's method to the first-order optimality conditions, or Karush–Kuhn–Tucker conditions, of the problem.

Algorithm basics

Consider a nonlinear programming problem of the form:

The Lagrangian for this problem is[1]

where and are Lagrange multipliers. At an iterate , a basic sequential quadratic programming algorithm defines an appropriate search direction as a solution to the quadratic programming subproblem

Note that the term in the expression above may be left out for the minimization problem, since it is constant.

Alternative approaches

Implementations

SQP methods have been implemented such well known numerical environments as MATLAB and GNU Octave. There also exist numerous software libraries, including open source

  • SciPy (de facto standard for scientific Python) has scipy.optimize.minimize(method=’SLSQP’) solver, implemented by Dieter Kraft as part of a package for optimal control, and using a NNLS (Non negative Least Squares) solver by Lawson and Hanson, and also using techniques of Fletcher and Powell.[2][3][4]
  • NLopt (C/C++ implementation, with numerous interfaces including Python, R, MATLAB/Octave), implemented by Dieter Kraft as part of a package for optimal control, and modified by S. G. Johnson.[2][5]
  • LabVIEW
  • KNITRO[6] (C, C++, C#, Java, Python, Fortran)
  • NPSOL (Fortran)
  • SNOPT (Fortran)
  • NLPQL (Fortran)
  • SuanShu (Java)

See also

Notes

  1. ^ Jorge Nocedal and Stephen J. Wright (2006). Numerical Optimization. Springer. ISBN 978-0-387-30303-1.
  2. ^ a b Kraft, Dieter (Sep 1994). "Algorithm 733: TOMP–Fortran modules for optimal control calculations". Transactions on Mathematical Software. 20 (3): 262–281. CiteSeerX 10.1.1.512.2567. doi:10.1145/192115.192124. Retrieved 1 February 2019.
  3. ^ Lawson, C.L.; Hanson, R.J. (1974). Solving Least Squares Problems (To appear ed.). Prentice Hall. Retrieved 1 February 2019.
  4. ^ Fletcher, R.; Powell, M.J.D. (Oct 1974). "On the Modification of LDL^T Factorizations". Mathematics of Computation. 28 (128): 1067–1078. doi:10.2307/2005366. JSTOR 2005366. Retrieved 1 February 2019.
  5. ^ Kraft, Dieter (July 1988). "A software package for sequential quadratic programming". Technical Report DFVLR-FB 88-28 (Document). Oberpfaffenhofen: Institut für Dynamik der Flugsysteme. Retrieved 1 February 2019. {{cite document}}: Unknown parameter |accessdate= ignored (help); Unknown parameter |issue= ignored (help); Unknown parameter |url= ignored (help); Unknown parameter |volume= ignored (help); Unknown parameter |work= ignored (help)
  6. ^ KNITRO User Guide: Algorithms

References