10 votos

Análogo del método Simplex para la programación cuadrática

Sucedió así que necesito trabajar con un algoritmo para resolver problemas de QP. El principal problema aquí es que no puedo encontrar ninguna referencia a este algoritmo (al menos ninguna referencia en fuentes en inglés). Hay algo en Wikipedia, pero bastante oscuro. He podido encontrar un par de libros donde se hace referencia a este algoritmo como 'Método de los Puntos Sigulares' (traducción exacta del ruso al inglés), pero Quiero saber si hay un nombre globalmente aceptado para este algoritmo, y tal vez las implementaciones existentes en Matlab, Maple o SciPy .

El algoritmo parece una especie de 'Método Simplex', pero para problemas QP, y siempre converge en un número finito de pasos.

Breve descripción del algoritmo:

Tenemos el siguiente problema QP :

\begin{equation} f(x) \to min, \quad x \in D, \tag{1} \end{equation}

\begin{equation} D = \{ x \in R^n \, | \, Ax \leq b \}, \tag{2} \end{equation}

donde $$ f: R^n \to R, \quad f(x) = \frac{1}{2} <Cx, x> + <c, x> $$ $C \in R(n, n)$ es una matriz simétrica semidefinida positiva, $c \in R^n$ , $A \in R(m, n)$ , $b \in R^m$ .

La notación $<a, b>$ significa producto-punto, $R(m, n)$ es un conjunto de todos los $(m \times n)$ -matrices dimensionales.

A continuación, vamos a definir un análogo de los vértices del simplex sobre el que iteramos en el 'Método Simplex'.

Definición 1. Punto $\hat x$ se llama singular para el problema (1), (2), si existe un conjunto $I \subset \{ 1, \ldots, m \} $ como por ejemplo $\hat x$ es una solución para el siguiente problema:

\begin{equation} f(x) \to min, \quad x \in D_I, \tag{3} \end{equation}

\begin{equation} D_I = \{ x \in R^n \, | \, <a_i, x> = b_i, \, i \in I \} \tag{4} \end{equation}

(casos en los que $I = \emptyset$ y $I = \{ 1, \ldots, m \}$ se incluyen ambos).

Bien, ahora vamos a formular un teorema que arroje algo de luz sobre el algoritmo real.

Teorema 1. Para toda matriz simétrica semidefinida positiva $ C \in R(n, n) $ y cada $c \in R^n$ , $A \in R(m, n)$ y $b \in R^m$ sólo hay un conjunto finito de puntos singulares para el problema (1), (2), y la solución de este problema es su punto singular .

En este paso está claro que podríamos iterar sobre puntos singulares y elegir aquella en la que el valor de la función objetivo sea mínimo, y esa punto singular será la solución.

Por supuesto, el proceso de iteración es bastante complejo. Construye una secuencia de puntos singulares $x^1, x^2, \ldots, x^k$ tal que $ f( x^{i+1} ) < f(x^i) $ . El método del gradiente conjugado con algunas modificaciones para las matrices semidefinidas podría utilizarse para resolver el problema (3), (4) (para las funciones cuadráticas converge en un número finito de pasos).

Podría dar aún más detalles, pero estoy bastante seguro de que en este punto se podría identificar el algoritmo.

Editar:

La idea principal del algoritmo:

Supongamos que tenemos algún punto $x_0 \in D$ .

  1. Seleccione las restricciones de (2) que se satisfacen como ecuaciones para $x_0$ . Estas restricciones definen algunas caras $D_0$ de un poliedro descrito por (2).

  2. Encuentre $\hat x_0 = min f(x), \, x \in D_0$ .

$\hat x_0$ es la solución para el problema (1), (2) o es posible cambiar a otra cara, y comenzar con el paso 1).

Por cierto, no hay restricciones no negativas en las variables del problema

4voto

Susan L Smith Puntos 6

No estoy seguro de si es esto en lo que estabas pensando, pero existe el método de Wolfe, que es un método simplex extendido. Se puede encontrar una descripción aquí y en Winston, Investigación de Operaciones: Aplicaciones y Algoritmos .

0 votos

He mirado los detalles del método de Wolfe y no creo que sea eso. El método de Wolfe sólo se aplica a QPP con variables de problema no negativas, mientras que no hay tales restricciones en un problema descrito anteriormente. Y en general, el método de Wolfe y el algoritmo descrito anteriormente no me parecen similares.

0 votos

@Deshene No estaba seguro, pero sí sé que esto es adecuado. Tu problema se puede reescribir de esta forma poniendo $x=x_+ - x_-$ , donde $x_+$ y $x_-$ son ambos positivos. Todo lo mejor para encontrar el algoritmo.

0 votos

@Deshene Acabo de leer tu edición. De nuevo, no estoy seguro de la implementación, pero el quadprog de la caja de herramientas de optimización de MATLAB puede serle útil.

1voto

Alex R Puntos 631

Parece que he identificado con éxito el método descrito anteriormente. Si lo he entendido bien, se llama Conjunto activo para la programación cuadrática. En particular, como @Daryl menthioned, hay una función 'quadprog' en Matlab, que resuelve QPP, y soporta el algoritmo de 'conjunto activo'.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X