Programación secuencial cuadrática - Sequential quadratic programming

La programación cuadrática secuencial ( SQP ) es un método iterativo para la optimización no lineal restringida . Los métodos SQP se utilizan en problemas matemáticos para los que la función objetivo y las restricciones son dos veces diferenciables de forma continua .

Los métodos SQP resuelven una secuencia de subproblemas de optimización, cada uno de los cuales optimiza un modelo cuadrático del objetivo sujeto a una linealización de las restricciones. Si el problema no tiene restricciones, entonces el método se reduce al método de Newton para encontrar un punto donde el gradiente del objetivo desaparece. Si el problema solo tiene restricciones de igualdad, entonces el método es equivalente a aplicar el método de Newton a las condiciones de optimalidad de primer orden, o condiciones de Karush-Kuhn-Tucker , del problema.

Conceptos básicos de algoritmos

Considere un problema de programación no lineal de la forma:

El lagrangiano para este problema es

donde y son los multiplicadores de Lagrange . En una iteración , un algoritmo básico de programación cuadrática secuencial define una dirección de búsqueda apropiada como una solución al subproblema de programación cuadrática

Tenga en cuenta que el término en la expresión anterior puede omitirse para el problema de minimización, ya que es constante bajo el operador.

Aproximaciones alternativas

Implementaciones

Los métodos SQP se han implementado en entornos numéricos bien conocidos como MATLAB y GNU Octave . También existen numerosas bibliotecas de software, incluidas las de código abierto:

  • SciPy (estándar de facto para Python científico) tiene el solucionador scipy.optimize.minimize (método = 'SLSQP').
  • NLopt ( implementación de C / C ++, con numerosas interfaces que incluyen Julia, Python, R, MATLAB / Octave), implementado por Dieter Kraft como parte de un paquete para un control óptimo y modificado por SG Johnson.
  • LabVIEW
  • KNITRO (C, C ++, C #, Java, Python, Fortran)
  • NPSOL (Fortran)
  • SNOPT (Fortran)
  • NLPQL (Fortran)
  • MATLAB
  • SuanShu (Java)

Ver también

Notas

Referencias

enlaces externos