Algoritmos con restricción El problema general de programación no lineal con restricciones se define como sigue: Maximizar (o minimizar) z = f (X) sujeta a g(X) ≤ 0 Las condiciones X ≥ 0 de no negatividad forman parte de las restricciones. También, al menos una de las funciones f (X) y g(X) es no lineal, y todas las funciones son continuamente diferenciables. No existe algoritmo general para manejar modelos no lineales, por el comportamiento complicado de las funciones no lineales. Quizá el resultado más general aplicable al problema es el de las condiciones KKT. La tabla 2 de la sección corrspondiente, muestra que a menos que f (X) y g(X) tengan buen comportamiento (condiciones de convexidad y concavidad), las condiciones KKT sólo son necesarias (pero no suficientes) para alcanzar la optimalidad. En esta sección se presentan varios algoritmos que se pueden clasificar en general como métodos indirectos y directos. Con los métodos indirectos se resuelve el problema no lineal manejando uno o más programas lineales derivados del programa original. Los métodos directos manejan el problema en su forma original. Son varios los métodos indirectos, pero sólo veremos la programación cuadrática. Entre los métodos directos está el de combinaciones lineales, y presentaremos una breve descripción de la técnica de maximización secuencial sin restricciones. Se pueden encontrar otras técnicas no lineales importantes en las referencias seleccionadas al final de esta sección. Programación cuadrática Un modelo de programación cuadrática se define como sigue: Maximizar z = CX + XT DX sujeta a AX ≤ b, X ≥ 0 1 en donde X = (x1 , x2 , . . . , xn )T C = (c1 , c2 , . . . , cn ) b = (b1 , b2 , . . . , bm )T a11 . . . a1n . .. .. A = . . .. am1 . . . amn d11 . . . d1n . .. .. . D = . . . dn1 . . . dnn La función XT DX define una forma cuadrática. Se supone que la matriz D es simétrica y negativa definida. Eso quiere decir que z es estrictamente cóncava. Las restricciones son lineales, lo que garantiza que el espacio de soluciones es convexo. La solución de este problema se basa en las condiciones KKT necesarias. Como z es estrictamente cóncava y el espacio de soluciones es convexo, esas condiciones también son suficientes para tener un óptimo global, como se ve en la tabla 2, de la sección correspondiente. Se describirá el problema de programación cuadrática para el caso de la maximización. Es trivial cambiar la formulación para el caso de la minimización. El problema se puede plantear como sigue: Maximizar z = CX + XT DX sujeta a G(X) = A −I ! X− b 0 ! ≤0 Sean Λ = (λ1 , λ2 , . . . , λm )T U = (µ1 , µ2 , . . . , µm )T los multiplicadores de Lagrange correspondientes a los dos conjuntos de restricciones AX − b ≤ 0 y −X ≤ 0, respectivamente. Al aplicar las condiciones KKT 2 se obtiene Λ ≥ 0, U ≥ 0 ∇z − (ΛT , UT )∇G(X) = 0 λi bi − n X aij xj = 0, i = 1, 2, . . . , m j=1 µj xj = 0, j = 1, 2, . . . , n AX ≤ b −X ≤ 0 Ahora ∇z = C + 2XT D ∇G(X) = A −I ! Sean S = b−AX ≥ 0 las variables de holgura de las restricciones. Las condiciones se reducen a −2XT D + ΛT A − UT = C AX + S = b µj xj = 0 = λi Si , ∀ i, j. Λ, U, X, S ≥ 0 Como DT = D, la transpuesta del primer conjunto de ecuaciones se puede escribir en la forma −2DX + AT Λ − U = CT Por consiguiente, se pueden combinar las condiciones necesarias como sigue: −2D AT −I 0 A 0 0 I ! X Λ U S = CT b ! µj xj = 0 = λi Si , ∀ i, j Λ, U, X, S ≥ 0 Excepto por las condiciones µj xj = 0 = λi Si , las ecuaciones restantes son funciones lineales en X, A, U y S. Entonces, el problema equivale a resolver un sistema de 3 ecuaciones lineales con las condiciones adicionales µj xj = 0 = λi Si . Como z es estrictamente cóncava y el espacio de soluciones es convexo, la solución factible que satisfaga todas esas condiciones debe ser única y óptima. La solución del sistema se obtiene usando la fase I del método de dos fases. La única restricción es satisfacer las condiciones µj xj = 0 = λi Si . Esto quiere decir que λi y Si no pueden ser positivas al mismo tiempo. De igual modo, µj y xj no pueden ser positivas al mismo tiempo. En la fase I se igualarán a cero todas las variables artificiales sólo si el problema tiene un espacio factible. Ejemplo 21.2-3 Se tiene el problema Maximizar z = 4x1 + 6x2 − 2x21 − 2x1 x2 − 2x22 sujeta a x1 + 2x2 ≤ 2 x 1 , x2 ≥ 0 Este problema se puede llevar a la forma matricial como sigue: Maximizar z = (4, 6) x1 x2 ! + (x1 , x2 ) −2 −1 −1 −2 ! sujeta a (1, 2) x1 x2 ! ≤2 x 1 , x2 ≥ 0 Las condiciones de Kuhn-Tucker son 4 2 1 −1 0 0 0 −1 0 2 4 2 1 2 0 0 0 1 4 x1 x2 λ1 µ1 µ2 s1 4 = 6 2 x1 x2 ! La tabla inicial para la fase I se obtiene introduciendo las variables artificiales R1 y R2 . En tonces, Básica r R1 R2 s1 x1 x2 λ1 µ1 µ2 R1 R2 s1 Solución 6 6 3 −1 −1 0 0 0 10 4 2 1 −1 0 1 0 0 4 2 4 2 0 −1 0 1 0 6 1 2 0 0 0 0 0 1 2 Iteración 1. Ya que µ1 = 0, la variable de entrada más prometedora x1 se puede hacer básica con R1 como variable saliente. Ası́ se obtiene la siguiente tabla: Básica r x1 R2 s1 x1 x2 λ1 µ1 µ2 R1 R2 s1 Solución 0 3 3/2 1/2 −1 −3/2 0 0 4 1 1/2 1/4 −1/4 0 1/4 0 0 1 0 3 3/2 1/2 −1 −1/2 1 0 4 0 3/2 −1/4 1/4 0 −1/4 0 1 1 Iteración 2. La variable más prometedora es x2 , y se puede hacer básica porque µ2 = 0. Entonces, Básica x1 x2 λ1 µ1 µ2 R1 R2 s1 Solución r 0 0 2 0 −1 −1 0 −2 2 x1 1 0 1/3 −1/3 0 1/3 0 −1/3 2/3 R2 0 0 2 0 −1 0 1 −2 2 x2 0 1 −1/6 1/6 0 −1/6 0 2/3 2/3 Iteración 3. Como s1 = 0, se puede introducir λ1 en la solución. Se obtiene entonces lo siguiente: Básica r x1 λ1 x2 x 1 x 2 λ1 µ1 µ2 R1 R2 s1 Solución 0 0 0 0 0 −1 −1 0 0 1 0 0 −1/3 1/6 1/3 −1/6 0 1/3 0 0 1 0 −1/2 0 1/2 −1 1 0 1 0 1/6 −1/12 −1/6 1/12 1/2 5/6 La última tabla contiene la solución óptima para la fase I. Como r = 0, la solución x1 = 1/3, x2 = 5/6, es factible. El valor óptimo de z se calcula a partir del problema original y es igual a 4.16. 5 Método de combinaciones lineales Este método tiene que ver con el siguiente problema, en el que todas las restricciones son lineales: Maximizar z = f (X) sujeta a AX ≤ b, X ≥ 0 El procedimiento se basa en el método de la pendiente más inclinada (del gradiente). Sin embargo, la dirección especificada por el vector gradiente podrá no resultar en una solución factible para el problema con restricciones. También, el vector gradiente no necesariamente será nulo en el punto óptimo (restringido). El método de pendiente más inclinada se puede modificar entonces para manejar el caso con restricciones. Sea Xk el punto factible de intento en la iteración k. La función objetivo f (X) se puede desarrollar en la proximidad de Xk con la serie de Taylor. Ası́ se llega a f (X) ≈ f (Xk ) + ∇f (Xk )(X − Xk ) = [f (Xk ) − ∇f (Xk )Xk ] + ∇f (Xk )X En este procedimiento se necesita determinar un punto factible X = X∗ tal que f (X) se maximice sujeta a las restricciones (lineales) del problema. Como f (Xk )− ∇f (Xk )Xk es una constante, el problema de determinar X∗ se reduce a resolver el siguiente programa lineal: Maximizar wk (X) = ∇f (Xk )X sujeto a AX ≤ b, X ≥ 0 Dado que wk se construye partiendo del gradiente de f (X) en Xk , se puede asegurar una solución mejorada si, y sólo si wk (X∗ ) > wk (Xk ). Del desarrollo de Taylor, la condición no garantiza que f (X∗ ) > f (Xk ) a menos que X∗ esté en la proximidad de Xk . Sin embargo, como wk (X∗ ) > wk (Xk ), debe existir un punto Xk+1 en el segmento de recta (Xk , X∗ ) tal que f (Xk+1 ) > f (Xk ). El objetivo es determinar Xk+1 . Se define a Xk+1 = (1 − r)Xk + rX∗ = Xk + r(X∗ − Xk ), 0 < r ≤ 1 Esto quiere decir que Xk+1 es una combinación lineal de Xk y de X∗ . Como Xk y X∗ son dos puntos factibles en un espacio de solución convexo, Xk+1 también es 6 factible. Al comparar con el método de la pendiente más inclinada se ve que el parámetro r representa el tamaño del paso. El punto Xk+1 se determina de tal modo que se maximice f (X). Como Xk+1 es una función sólo de r, Xk+1 se determina maximizando h(r) = f (Xk + r[X∗ − Xk ]) Se repite el procedimiento hasta que en la k-ésima iteración, wk (X∗ ) ≤ wk (Xk ). En este punto no se pueden tener más mejoras y el proceso termina con Xk como el mejor punto de solución. Los problemas de programación lineal generados en las iteraciones sucesivas sólo difieren en los coeficientes de la función objetivo. Ası́, se pueden usar los procedimientos de análisis de sensibilidad matriciales para hacer los cálculos con eficiencia. Ejemplo 21.2-7 La programación cuadrática del ejemplo 21.2-3 era Maximizar f (X) = 4x1 + 6x2 − 2x22 − 2x1 x2 − 2x22 sujeta a x1 + 2x2 ≤ 2 x 1 , x2 ≥ 0 Sea X0 = (1/2, 1/2), que es factible, el punto inicial. Ahora ∇f (X) = (4 − 4x1 − 2x2 , 6 − 2x1 − 4x2 ) Iteración 1. ∇f (X0 ) = (1, 3) El programa lineal asociado maximiza a w1 = x1 + 3x2 , sujeta a las restricciones del problema original. Esto da la solución óptima X∗ = (0, 1). Los valores de w1 en X0 y X∗ son iguales a 2 y 3, respectivamente. En consecuencia, se determina el siguiente punto de prueba: 1−r 1+r , X = (1/2, 1/2) + r[(0, 1) − (1/2, 1/2)] = 2 2 1 7 La maximización de 1−r 1+r h(r) = f , 2 2 da como resultado r1 = 1. Entonces X1 = (0, 1) con f (X1 ) = 4. Iteración 2. ∇f (X1 ) = (2, 2) La función objetivo del nuevo problema de programación lineal es w2 = 2x1 + 2x2 . La solución óptima de este problema es X∗ = (2, 0). Como los valores de w2 en X1 y X∗ son 2 y 4, se debe determinar un nuevo punto tentativo. Ası́, X2 = (0, 1) + r[(2, 0) − (0, 1)] = (2r, 1 − r) La maximización de h(r)f (2r, 1 − r) da como resultado r2 = 1/6. Entonces X2 = (1/3, 5/6) con f (X2 ) ≈ 4.16. Iteración 3. ∇f (X2 ) = (1, 2) La función objetivo correspondiente es w3 = x1 + 2x2 . La solución óptima de este problema da como resultado las soluciones alternativas X∗ = (0, 1) y X∗ = (2, 0). El valor de w3 para ambos puntos es igual a su valor en X2 . En consecuencia no es posible mayor mejora. La solución óptima aproximada es X2 = (1/3, 5/6) con f (X2 ) ≈ 4.16. En este caso sucede que es la óptima exacta. Algoritmo SUMT En esta sección se presenta un método de gradiente más general. Se supone que la función objetivo f (X) es cóncava, y que cada función de restricción gi (X) es convexa. Además, el espacio de soluciones debe tener un interior. Esto excluye el uso implı́cito y explı́cito de restricciones de igualdad. El algoritmo SUMT (de sequential unconstrained maximization technique, técnica de maximización secuencial no restringida) se basa en transformar el problema con 8 restricciones en uno equivalente sin restricciones (o no restringido). El procedimiento se parece al uso del método de los multiplicadores de Lagrange. Después, el problema transformado se puede resolver con el método de la pendiente más pronunciada. Para aclarar el concepto, considérese la nueva función m X p(X, t) = f (X) + t n X 1 1 − j=1 xj i=1 gi (X) donde t es un parámetro no negativo. El signo de suma tiene en cuenta las restricciones de no negatividad, que se deben poner en la forma −xj ≤ 0 para ser consistentes con las restricciones originales. Como gi (X) es convexa, 1/gi (X) es cóncava. Eso quiere decir que p(X, t) es cóncava en X. En consecuencia, p(X, t) posee un máximo único. La optimización del problema original restringido equivale a la optimización de p(X, t). El algoritmo se inicia seleccionando en forma arbitraria un valor inicial no negativo para t. Se selecciona un punto inicial X0 como la primera solución de prueba. Debe ser un punto interior, esto es, no debe estar en las fronteras del espacio de solución. Dado el valor de t, se aplica el método de la pendiente más pronunciada para determinar la solución óptima (el máximo) de p(X, t). El nuevo punto de solución siempre será un punto interior, porque si ese punto está cerca de las fronteras, al menos una de las funciones 1/gi (X) o −1/xi adquirirá un valor negativo muy grande. Como la función objetivo es maximizar p(X, t), esos puntos de solución se excluyen en forma automática. El resultado principal es que los puntos de solución sucesivos siempre serán puntos interiores. En consecuencia, el problema siempre se puede manejar como un caso sin restricciones. Una vez obtenida la solución óptima correspondiente a determinado valor de t, se genera un nuevo valor de t y se repite el proceso de optimización (con el método de la pendiente más pronunciada). Si t0 es el valor actual de t, se debe seleccionar el siguiente valor t00 de modo que 0 < t00 < t0 . El algoritmo SUMT termina cuando, para dos valores sucesivos de t, los valores óptimos correspondientes de X, obtenidos maximizando p(X, t), sean aproximadamente iguales. En este punto los intentos posteriores producirán poca mejorı́a. 9 La implementación real de SUMT tiene más detalles que los que se presentaron aquı́. En forma especı́fica, un factor importante que puede afectar la rapidez de convergencia es la selección de un valor inicial de t. Además, para determinar un punto interior inicial se pueden necesitar técnicas especiales. Estos detalles se pueden encontrar en Fiacco y McCormick (1968)1 . 1 Fiacco, A. y G. McCormick, Nonlinear Programming: Sequential Unconstrained Minimization Techniques, Wiley, New York, 1968 10