Este artículo necesita la atención de un experto en Matemáticas . El problema específico es: Algunos elementos de esta página necesitan aclaración y/o verificación por parte de un experto. Consulte la página de discusión para obtener más detalles. ( Febrero de 2017 ) |
La programación cuadrática ( QP ) es el proceso de resolver ciertos problemas matemáticos de optimización que involucran funciones cuadráticas . En concreto, se busca optimizar (minimizar o maximizar) una función cuadrática multivariable sujeta a restricciones lineales sobre las variables. La programación cuadrática es un tipo de programación no lineal .
En este contexto, "programación" se refiere a un procedimiento formal para resolver problemas matemáticos. Este uso data de la década de 1940 y no está específicamente vinculado con el concepto más reciente de "programación informática". Para evitar confusiones, algunos profesionales prefieren el término "optimización", por ejemplo, "optimización cuadrática". [1]
El problema de programación cuadrática con n variables y m restricciones se puede formular de la siguiente manera. [2] Dado:
El objetivo de la programación cuadrática es encontrar un vector n -dimensional x , que
minimizar | |
sujeto a |
donde x T denota la transpuesta vectorial de x , y la notación A x ⪯ b significa que cada entrada del vector A x es menor o igual que la entrada correspondiente del vector b (desigualdad componente por componente).
Como caso especial cuando Q es simétrico positivo-definido , la función de costo se reduce a mínimos cuadrados:
minimizar | |
sujeto a |
donde Q = R T R se deduce de la descomposición de Cholesky de Q y c = − R T d . Por el contrario, cualquier programa de mínimos cuadrados restringido puede formularse de manera equivalente como un problema de programación cuadrática, incluso para una matriz R genérica no cuadrada .
Al minimizar una función f en el entorno de algún punto de referencia x 0 , Q se establece en su matriz hessiana H ( f ( x 0 )) y c se establece en su gradiente ∇ f ( x 0 ) . Se puede plantear un problema de programación relacionado, la programación cuadrática con restricciones cuadráticas , agregando restricciones cuadráticas a las variables.
Para problemas generales se utilizan comúnmente una variedad de métodos, incluidos
En el caso en que Q sea definida positiva , el problema es un caso especial del campo más general de la optimización convexa .
La programación cuadrática es particularmente sencilla cuando Q es definida positiva y solo hay restricciones de igualdad; específicamente, el proceso de solución es lineal. Al utilizar multiplicadores de Lagrange y buscar el extremo del lagrangiano, se puede demostrar fácilmente que la solución al problema con restricciones de igualdad
viene dado por el sistema lineal
donde λ es un conjunto de multiplicadores de Lagrange que salen de la solución junto con x .
La forma más sencilla de abordar este sistema es la solución directa (por ejemplo, la factorización LU ), que resulta muy práctica para problemas pequeños. En el caso de problemas grandes, el sistema plantea algunas dificultades inusuales, en particular que el problema nunca es positivo definido (incluso si Q lo es), lo que hace que sea potencialmente muy difícil encontrar un buen enfoque numérico, y existen muchos enfoques para elegir según el problema.
Si las restricciones no acoplan las variables demasiado estrechamente, un ataque relativamente simple consiste en cambiar las variables de modo que las restricciones se satisfagan incondicionalmente. Por ejemplo, supongamos que d = 0 (generalizar a un valor distinto de cero es sencillo). Si observamos las ecuaciones de restricción:
introducir una nueva variable y definida por
donde y tiene dimensión x menos el número de restricciones. Entonces
y si se elige Z de modo que EZ = 0, la ecuación de restricción siempre se cumplirá. Encontrar dicha Z implica encontrar el espacio nulo de E , lo cual es más o menos simple dependiendo de la estructura de E . Sustituyendo en la forma cuadrática se obtiene un problema de minimización sin restricciones:
cuya solución viene dada por:
En determinadas condiciones de Q , la matriz reducida Z T QZ será definida positiva. Es posible escribir una variación del método del gradiente conjugado que evita el cálculo explícito de Z. [5]
El dual lagrangiano de un problema de programación cuadrática también es un problema de programación cuadrática. Para comprobarlo, centrémonos en el caso en el que c = 0 y Q es definida positiva. Escribimos la función lagrangiana como
Definiendo la función dual (lagrangiana) g (λ) como , encontramos un ínfimo de L , usando una definitividad positiva de Q :
Por lo tanto la función dual es
y entonces el dual lagrangiano del problema de programación cuadrática es
Además de la teoría de dualidad lagrangiana, existen otros emparejamientos de dualidad (por ejemplo, Wolfe , etc.).
Para Q definida positiva , cuando el problema es convexo, el método del elipsoide resuelve el problema en tiempo (débilmente) polinomial . [6]
Ye y Tse [7] presentan un algoritmo de tiempo polinomial que extiende el algoritmo de Karmarkar de la programación lineal a la programación cuadrática convexa. En un sistema con n variables y L bits de entrada, su algoritmo requiere O(L n) iteraciones, cada una de las cuales puede realizarse utilizando O(L n 3 ) operaciones aritméticas, para una complejidad total en tiempo de ejecución de O( L 2 n 4 ).
Kapoor y Vaidya [8] presentan otro algoritmo, que requiere O( L * log L * n 3,67 * log n ) operaciones aritméticas.
Si Q es indefinido (por lo que el problema no es convexo), entonces el problema es NP-hard . [9] Una forma sencilla de ver esto es considerar la restricción cuadrática no convexa x i 2 = x i . Esta restricción es equivalente a requerir que x i esté en {0,1}, es decir, x i es una variable entera binaria. Por lo tanto, tales restricciones se pueden usar para modelar cualquier programa entero con variables binarias, que se sabe que es NP-hard.
Además, estos problemas no convexos pueden tener varios puntos estacionarios y mínimos locales. De hecho, incluso si Q tiene solo un valor propio negativo , el problema es (fuertemente) NP-duro . [10]
Además, encontrar un punto KKT de un programa cuadrático no convexo es difícil para CLS. [11]
Existen algunas situaciones en las que uno o más elementos del vector x deben tomar valores enteros . Esto conduce a la formulación de un problema de programación cuadrática entera mixta (MIQP). [12] Las aplicaciones de MIQP incluyen los recursos hídricos [13] y la construcción de fondos indexados . [14]
Nombre | Información breve |
---|---|
OBJETIVOS | Un sistema de software para modelar y resolver problemas de optimización y programación. |
ÁGLIB | Biblioteca numérica con doble licencia (GPL/propietaria) (C++, .NET). |
AMPL | Un lenguaje de modelado popular para la optimización matemática a gran escala. |
Monitor de AP | Suite de modelado y optimización para sistemas LP , QP, NLP , MILP , MINLP y DAE en MATLAB y Python. |
Artelys Knitro | Un paquete integrado para optimización no lineal |
CGAL | Un paquete de geometría computacional de código abierto que incluye un solucionador de programación cuadrática. |
CPLEX | Solucionador popular con API (C, C++, Java, .Net, Python, Matlab y R). Gratuito para académicos. |
Función de resolución de Excel | Un solucionador no lineal adaptado a las hojas de cálculo en las que las evaluaciones de funciones se basan en el recálculo de celdas. Versión básica disponible como complemento estándar para Excel. |
Juegos | Un sistema de modelado de alto nivel para la optimización matemática |
Octava GNU | Un lenguaje de programación libre (su licencia es GPLv 3) de propósito general y orientado a matrices para computación numérica, similar a MATLAB. La programación cuadrática en GNU Octave está disponible a través de su comando qp |
Altos | Software de código abierto para resolver modelos de programación lineal (PL), programación entera mixta (MIP) y programación cuadrática convexa (QP) |
IMSL | Un conjunto de funciones matemáticas y estadísticas que los programadores pueden incorporar en sus aplicaciones de software. |
IPOPT | IPOPT (Interior Point OPTimizer) es un paquete de software para optimización no lineal a gran escala. |
Julia | Un lenguaje de programación de alto nivel cuyo paquete de resolución más destacado es JuMP |
Arce | Lenguaje de programación de propósito general para matemáticas. La resolución de un problema cuadrático en Maple se logra mediante el comando QPSolve. |
MATLAB | Un lenguaje de programación de propósito general y orientado a matrices para el cálculo numérico. La programación cuadrática en MATLAB requiere la Caja de herramientas de optimización además del producto base de MATLAB. |
Matemática | Un lenguaje de programación de propósito general para matemáticas, que incluye capacidades simbólicas y numéricas. |
MOSCÉ | Un solucionador para optimización a gran escala con API para varios lenguajes (C++, Java, .Net, Matlab y Python). |
Biblioteca numérica NAG | Colección de rutinas matemáticas y estadísticas desarrolladas por el Grupo de Algoritmos Numéricos para múltiples lenguajes de programación (C, C++, Fortran, Visual Basic, Java y C#) y paquetes (MATLAB, Excel, R, LabVIEW). El capítulo de Optimización de la Biblioteca NAG incluye rutinas para problemas de programación cuadrática con matrices de restricciones lineales dispersas y no dispersas, junto con rutinas para la optimización de funciones lineales, no lineales, sumas de cuadrados de funciones lineales o no lineales con restricciones no lineales, acotadas o sin restricciones. La Biblioteca NAG tiene rutinas para optimización local y global, y para problemas continuos o enteros. |
Pitón | Lenguaje de programación de alto nivel con enlaces para la mayoría de los solucionadores disponibles. La programación cuadrática está disponible a través de la función solve_qp o llamando directamente a un solucionador específico. |
R (Fortran) | Marco de cálculo estadístico universal multiplataforma con licencia GPL . |
SAS /O | Un conjunto de solucionadores para optimización lineal, entera, no lineal, sin derivadas, de redes, combinatoria y de restricciones; el lenguaje de modelado algebraico OPTMODEL; y una variedad de soluciones verticales dirigidas a problemas/mercados específicos, todos ellos completamente integrados con el sistema SAS . |
Suan Shu | Un conjunto de algoritmos de optimización de código abierto para resolver LP , QP, SOCP , SDP y SQP en Java |
Solucionador de conocimientos tradicionales | Sistema de software de modelado matemático y resolución de problemas basado en un lenguaje declarativo basado en reglas, comercializado por Universal Technical Systems, Inc. |
Laboratorio Tom | Admite optimización global, programación entera, todo tipo de mínimos cuadrados, programación lineal, cuadrática y sin restricciones para MATLAB . TOMLAB admite solucionadores como CPLEX , SNOPT y KNITRO . |
XPRESS | Solucionador de programas lineales a gran escala, programas cuadráticos, programas no lineales generales y programas enteros mixtos. Tiene API para varios lenguajes de programación, también tiene un lenguaje de modelado Mosel y funciona con AMPL, GAMS . Gratuito para uso académico. |
La optimización polinomial [15] es un marco más general, en el que las restricciones pueden ser funciones polinomiales de cualquier grado, no solo 2.
{{cite journal}}
: Falta o está vacío |title=
( ayuda )