Resumen de los métodos básicos de optimización matemática para problemas con restricciones

Me preparé durante mucho tiempo y recopilé material, espero que esta vez haya salido mejor. Dedico este artículo a los métodos básicos para resolver problemas de optimización matemática con limitaciones, por lo que si escuchaste que el método simplex es un método muy importante , pero aún no sabes lo que hace, entonces este artículo probablemente te ayudará.

PD El artículo contiene fórmulas matemáticas agregadas por el editor de macros. Dicen que a veces no se muestran. También hay muchas animaciones en formato gif.

Preámbulo


El problema de la optimización matemática es un problema de la forma "Buscar en el conjunto  mathcalK el elemento x tal que para todos x de  mathcalK realizado f(x) leqf(x) ", Que en la literatura científica es probable que se escriba de esta manera

\ begin {array} {rl} \ mbox {minimizar} & f (x) \\ \ mbox {proporcionado} & x \ en \ mathcal {K}. \ end {array}

\ begin {array} {rl} \ mbox {minimizar} & f (x) \\ \ mbox {proporcionado} & x \ en \ mathcal {K}. \ end {array}


Históricamente, los métodos populares, como el descenso de gradiente o el método de Newton, solo funcionan en espacios lineales (y preferiblemente, simples, por ejemplo  mathbbRn ) En la práctica, a menudo hay problemas en los que necesita encontrar un mínimo que no esté en el espacio lineal. Por ejemplo, necesita encontrar el mínimo de alguna función en tales vectores x=(x1, ldots,xn) para que xi geq0 , esto puede deberse al hecho de que xi denota la longitud de cualquier objeto. O por ejemplo, si x representar las coordenadas de un punto que no debería ser más de r de y es decir  |xy | leqr . Para tales problemas, el descenso de gradiente o el método de Newton ya no es directamente aplicable. Resultó que una clase muy grande de problemas de optimización está convenientemente cubierta por "restricciones", similares a las que describí anteriormente. En otras palabras, es conveniente representar el conjunto  mathcalK en forma de un sistema de igualdades y desigualdades

 beginarraylgi(x) leq0, 1 leqi leqm,hi(x)=0, 1 leqi leqk. endarray


Problemas de minimización en un espacio de la forma  mathbbRn por lo tanto, comenzaron a llamarlos arbitrariamente "problema sin restricciones", y problemas sobre conjuntos definidos por conjuntos de igualdades y desigualdades, "problemas restringidos".

Técnicamente, absolutamente cualquier multitud  mathcalK puede representarse como una sola igualdad o desigualdad utilizando la función de indicador , que se define como

I_ \ mathcal {K} (x) = \ begin {cases} 0, & x \ notin \ mathcal {K} \\ 1, y x \ in \ mathcal {K}, \ end {cases}


sin embargo, dicha función no tiene varias propiedades útiles (convexidad, diferenciabilidad, etc.). Sin embargo, a menudo se puede imaginar  mathcalK en forma de varias igualdades y desigualdades, cada una de las cuales tiene tales propiedades. La teoría básica se resume bajo el caso

\ begin {array} {rl} \ mbox {minimizar} & f (x) \\ \ mbox {proporcionado} & g_i (x) \ leq 0, ~ 1 \ leq i \ leq m \\ & Ax = b , \ end {array}


donde f,gi - funciones convexas (pero no necesariamente diferenciables), A - matriz. Para demostrar cómo funcionan los métodos, usaré dos ejemplos:

  1. Tarea de programación lineal

    $$ display $$ \ begin {array} {rl} \ mbox {minimizar} & -2 & x ~~~ - & y \\ \ mbox {proporcionado} & -1.0 y ~ x -0.1 & ~ y \ leq -1.0 \ \ & -1.0 & ~ x + ~ 0.6 & ~ y \ leq -1.0 \\ & -0.2 & ~ x + ~ 1.5 & ~ y \ leq -0.2 \\ & ~ 0.7 & ~ x + ~ 0.7 & ~ y \ leq 0.7 \\ & ~ 2.0 & ~ x -0.2 & ~ y \ leq 2.0 \\ & ~ 0.5 & ~ x -1.0 & ~ y \ leq 0.5 \\ & -1.0 & ~ x -1.5 & ~ y \ leq - 1.0 \\ \ end {array} $$ display $$


    En esencia, este problema consiste en encontrar el punto más alejado del polígono en la dirección (2, 1), la solución al problema es el punto (4.7, 3.5), el más "correcto" en el polígono). Pero el polígono mismo

  2. Minimización de una función cuadrática con una restricción cuadrática

    \ begin {array} {rl} \ mbox {minimizar} & 0.7 (x - y) ^ 2 + 0.1 (x + y) ^ 2 \\ \ mbox {proporcionado} & (x-4) ^ 2 + ( y-6) ^ 2 \ leq 9 \ end {array}




Método simplex


De todos los métodos que cubro con esta revisión, el método simplex es probablemente el más famoso. El método se desarrolló específicamente para la programación lineal y el único de los presentados logra la solución exacta en un número finito de pasos (siempre que se use la aritmética exacta para los cálculos, en la práctica este no suele ser el caso, pero en teoría es posible). La idea de un método simplex consta de dos partes:

  1. Los sistemas de desigualdades e igualdades lineales definen poliedros convexos multidimensionales (politopos). En el caso unidimensional, este es un punto, rayo o segmento, en el caso bidimensional, un polígono convexo, en el caso tridimensional, un poliedro convexo. Minimizar la función lineal es esencialmente encontrar el punto "más alejado" en una determinada dirección. Creo que la intuición debería sugerir que este punto más lejano debería ser un cierto pico, y de hecho es así. En general, para un sistema de m desigualdades en n espacio dimensional un vértice es un punto que satisface un sistema para el cual exactamente n de estas desigualdades se convierten en igualdades (siempre que entre las desigualdades no haya equivalentes). Siempre hay un número finito de tales puntos, aunque puede haber muchos de ellos.
  2. Ahora tenemos un conjunto finito de puntos, en términos generales, simplemente puede seleccionarlos y clasificarlos, es decir, hacer algo como esto: para cada subconjunto de n desigualdades, resuelva el sistema de ecuaciones lineales compiladas sobre las desigualdades elegidas, verifique que la solución se ajuste al sistema original de desigualdades y compárelo con otros puntos similares. Este es un método bastante simple, ineficiente pero de trabajo. El método simplex, en lugar de iterar, se mueve de arriba hacia arriba a lo largo de los bordes para que los valores de la función objetivo mejoren. Resulta que si un vértice no tiene "vecinos" en los que los valores de la función son mejores, entonces es óptimo.

El método simplex es iterativo, es decir, secuencialmente mejora ligeramente la solución. Para tales métodos, debe comenzar en alguna parte, en el caso general, esto se hace resolviendo un problema auxiliar

\ begin {array} {rl} \ mbox {minimizar} & s \\ \ mbox {proporcionado} & g_i (x) \ leq s, ~ 1 \ leq i \ leq m \\ \ end {array}


Si para resolver este problema x,s tal que s leq0 luego ejecutado gi(x) leqs leq0 de lo contrario, el problema original generalmente se da en un conjunto vacío. Para resolver el problema auxiliar, también puede usar el método simplex, pero se puede tomar el punto de partida s= maxigi(x) con arbitrario x . Encontrar el punto de partida puede llamarse arbitrariamente la primera fase del método, encontrar la solución al problema original puede llamarse arbitrariamente la segunda fase del método.

La trayectoria del método simplex de dos fases.
La trayectoria se generó usando scipy.optimize.linprog.


Descenso de gradiente proyectivo


Sobre el descenso de gradiente, recientemente escribí un artículo separado en el que también describí brevemente este método. Ahora este método es bastante animado, pero se está estudiando como parte de un descenso de gradiente proximal más general. La idea misma del método es bastante banal: si aplicamos el descenso de gradiente a una función convexa f , con la elección correcta de parámetros obtenemos un mínimo global f . Si, después de cada paso del descenso del gradiente, se corrige el punto obtenido, tomando su proyección en un conjunto convexo cerrado  mathcalK , entonces como resultado obtenemos el mínimo de la función f en  mathcalK . Bueno, o más formalmente, el descenso de gradiente proyectivo es un algoritmo que calcula secuencialmente

 begincasesxk+1=yk alphak nablaf(yk)yk+1=P mathcalK(xk+1), endcases


donde

P mathcalK(x)= mboxargminy in mathcalK |xy |.$


La última igualdad define el operador estándar de proyección sobre el conjunto, de hecho es una función que, según el punto x calcula el punto más cercano al conjunto  mathcalK . El papel de la distancia juega aquí  | ldots | , vale la pena señalar que cualquier norma puede usarse aquí, sin embargo, ¡las proyecciones con diferentes normas pueden diferir!

En la práctica, el descenso de gradiente proyectivo se usa solo en casos especiales. Su principal problema es que calcular la proyección puede ser aún más difícil que la original, y debe calcularse muchas veces. El caso más común para el cual es conveniente usar el descenso de gradiente proyectivo es "restricciones de caja", que tienen la forma

 elli leqxi leqri,  1 leqi leqn.$


En este caso, la proyección se calcula de manera muy simple, para cada coordenada resulta

[P _ {\ mathcal {K}} (x)] _ i = \ begin {cases} r_i, & x_i> r_i \\ \ ell_i, & x_i <\ ell_i \\ x_i, & x_i \ in [\ ell_i, r_i ] \ end {cases}


El uso del descenso de gradiente proyectivo para problemas de programación lineal no tiene sentido, sin embargo, si haces esto, se verá más o menos así

Trayectoria de descenso de gradiente proyectiva para un problema de programación lineal


Y aquí está la trayectoria del descenso de gradiente proyectivo para el segundo problema, si

elija un tamaño de paso grande


y si

elige un pequeño tamaño de escalón


Método elipsoide


Este método es notable porque es el primer algoritmo polinomial para problemas de programación lineal; puede considerarse una generalización multidimensional del método de bisección . Comenzaré con un método más general para separar el hiperplano :

  • En cada paso del método, hay un conjunto que contiene la solución al problema.
  • En cada paso, se construye un hiperplano, después de lo cual todos los puntos que se encuentran en un lado del hiperplano seleccionado se eliminan del conjunto y se pueden agregar algunos puntos nuevos a este conjunto

Para problemas de optimización, la construcción del "hiperplano de separación" se basa en la siguiente desigualdad para las funciones convexas

f(y) geqf(x)+ nablaf(x)T(yx).$


Si arreglar x , entonces para una función convexa f medio espacio  nablaf(x)T(yx) geq0 contiene solo puntos con un valor no menor que en un punto x , lo que significa que se pueden cortar, ya que estos puntos no son mejores que los que ya hemos encontrado. Para los problemas con las restricciones, también puede deshacerse de los puntos que se garantiza que violan una de las restricciones.

La versión más simple del método de hiperplano de separación es simplemente cortar los medios espacios sin agregar ningún punto. Como resultado, en cada paso tendremos un cierto poliedro. El problema con este método es que es probable que el número de caras del poliedro aumente de un paso a otro. Además, puede crecer exponencialmente.

El método elipsoide en realidad almacena un elipsoide en cada paso. Más precisamente, después de que se construye el hiperplano, se construye un elipsoide de volumen mínimo, que contiene una de las partes del original. Esto se puede lograr agregando nuevos puntos. Un elipsoide siempre se puede definir mediante una matriz positiva definida y un vector (centro de un elipsoide) de la siguiente manera

\ mathcal {E} (P, x) = \ {z ~ | ~ (z-x) ^ TP (z-x) \ leq 1 \}. $


La construcción de un elipsoide mínimo en volumen, que contiene la intersección del medio espacio y otro elipsoide, se puede hacer usando fórmulas moderadamente engorrosas . Desafortunadamente, en la práctica, este método seguía siendo tan bueno como el método simplex o el método de punto interno.

Pero en realidad cómo funciona para

programación lineal


y para

programación cuadrática


Método de punto interior


Este método tiene una larga historia de desarrollo, uno de los primeros requisitos previos apareció aproximadamente al mismo tiempo que se desarrolló el método simplex. Pero en ese momento todavía no era lo suficientemente efectivo como para ser utilizado en la práctica. Más tarde, en 1984, se desarrolló una variante del método específicamente para la programación lineal, que era buena tanto en teoría como en la práctica. Además, el método de punto interno no se limita solo a la programación lineal, a diferencia del método simplex, y ahora es el algoritmo principal para problemas de optimización convexa con restricciones.

La idea básica del método es reemplazar las restricciones con una multa en forma de la llamada función de barrera . Función F:Int mathcalK rightarrow mathbbR llamada la función de barrera para el conjunto  mathcalK si

F(x) rightarrow+ infty  mboxatx rightarrow partial mathcalK.$


Aqui Int mathcalK - dentro  mathcalK ,  parcial matemáticaK - frontera  mathcalK . En lugar del problema original, se propone resolver el problema.

 mboxminimizarporx   varphi(x,t)=tf(x)+F(x).$


F y  varphi dado solo en el interior  mathcalK (de hecho, de aquí viene el nombre), la propiedad de la barrera asegura que  varphi al menos x existe Además, cuanto más t cuanto mayor es el impacto f . En condiciones razonablemente razonables, puede lograr eso si apunta t hasta el infinito entonces el mínimo  varphi convergerá a la solución del problema original.

Si el conjunto  mathcalK dado como un conjunto de desigualdades gi(x) leq0, 1 leqi leqm entonces la opción estándar de la función de barrera es la barrera logarítmica

F(x)= summi=1 ln(gi(x)).$


Puntos mínimos x(t) las funciones  varphi(x,t) por diferentes t forma una curva, que generalmente se llama la ruta central , el método del punto interno, por así decirlo, está tratando de seguir esta ruta. Así es como se ve

Ejemplos de programación lineal

El centro analítico es solo x(0)

Finalmente, el método de punto interno tiene la siguiente forma

  1. Seleccione una aproximación inicial x0 , t0>0
  2. Elija una nueva aproximación usando el método de Newton

    xk+1=xk[ nabla2x varphi(xk,tk)]1 nablax varphi(xk,tk)


  3. Click para ampliar t

    tk+1= alphatk,   alpha>1



El uso del método de Newton es muy importante aquí: el hecho es que con la elección correcta de la función de barrera, el paso del método de Newton genera un punto que permanece dentro de nuestro conjunto , experimentamos, no siempre se rinde de esta forma. Y finalmente, así es como se ve la trayectoria del método de punto interno

Tarea de programación lineal

El punto negro que rebota es x(tk) es decir punto al cual estamos tratando de acercarnos al paso del método de Newton en el paso actual.

Problema de programación cuadrática

Source: https://habr.com/ru/post/es428794/


All Articles