Universidad Politécnica de Madrid–Escuela Técnica Superior de Ingenieros Industriales Grado en Ingeniería en Tecnologías Industriales. Curso 2015-2016-3º Matemáticas de Especialidad–Ingeniería Eléctrica Programación Lineal. El Método Símplex José Luis de la Fuente O’Connor [email protected] [email protected] Clase_simplex_2016.pdf 1/133 Índice 2/133 Introducción Condiciones de punto óptimo Mejora de una solución básica factible El algoritmo Símplex Degeneración y ciclado Solución básica factible inicial Análisis de sensibilidad El método Símplex para variables acotadas Implementaciones comerciales del método Símplex El método Símplex en forma de “tableau” Otras variantes y mejoras del Símplex Complejidad computacional del método Símplex 3/133 Introducción Para encontrar el óptimo del problema de PL min. c T x s. a Ax D b x 0; se podrían estudiar, uno a uno, los vértices o puntos extremos del politopo P D fx 2 Rn W Ax D b; x 0; A 2 Rmn; b 2 Rng y determinar aquél en el que la función objetivo se hace mínima. Para m y n grandes, considerar todos es prohibitivo pues son nŠ : mŠ.n m/Š En 1947 George B. Dantzig culminó la investigación de un importante equipo de ingenieros, matemáticos y economistas formulando el Método Símplex. 4/133 George B. Dantzig, EE.UU. 1914-2005. Sigue una estrategia de búsqueda del punto óptimo que no estudia todos los vértices de un problema. Sus claves: Encontrar un vértice desde el que comenzar: solución básica factible del politopo P ; Desplazarse desde ese punto extremo a otro, a lo largo de alguna arista de P , mejorando con ello la función objetivo. Repetir el paso anterior cuantas veces sea necesario hasta que se alcance la solución óptima o la arista escogida lleve a 1. 5/133 Condiciones de punto óptimo Teorema Condiciones de Karush-Kuhn-Tucker x 2 Rn es el óptimo del programa lineal min. c T x s. a Ax D b x 0; si y sólo si existen vectores 2 Rm y 2 Rn tales que (i) Ax D b; x 0; (factibilidad del problema primal) T (ii) c D A C ; 0; (factibilidad del problema dual) (iii) i xi D 0; i D 1; : : : ; n: (holguras complementarias o gap de dualidad) La condición i es la de factibilidad del problema, tal como está planteado. 6/133 La Función de Lagrange del problema es T T L.x; ; / D c x .Ax b/ x: Su vector gradiente con respecto a x es c A T Igualado éste a 0 es la segunda condición, ii. Joseph-Louis Lagrange, 1736- París, 1813. T Turin, . El vector es el de los multiplicadores de Lagrange de las condiciones Ax D b. El vector , el de los multiplicadores de Lagrange de las condiciones x 0. La condición iii se conoce como la de complementariedad de holguras, u holguras complementarias. Exige que sean cero aquellos multiplicadores de las condiciones de no negatividad que no estén activas (no sean cero) en el óptimo; o, lo que es equivalente, que sea cero el denominado gap de dualidad: la diferencia entre el valor de la función objetivo del primal y del dual. Todas estas condiciones fueron formuladas por Harold William Kuhn, EE.UU., 1925-2014, y Albert William Tucker, Canadá, 1905-1995, en 1951, con el fin de extender la teoría de Lagrange a la caracterización de los puntos óptimos de problemas de programación lineal y no lineal sometidos a restricciones. Posteriormente se descubrió que en 1939 William Karush, EE.UU., 1917-1997, ya había trabajado sobre estas condiciones, por lo que desde ese momento se les pasó a denominar condicionesRichard de Karush-Kuhn-Tucker, o KKT. 264 W. Cottle 7/133 William Karush, circa 1987 Fritz John at NYU, circa 1987 Las condiciones KKT generalizan la de la existencia de un mínimo de una función sin restricciones; es decir, que rx f .x / D 0. 8/133 T ŒcBT cNT , Si A se ordena de la forma A D ŒB N , y en concordancia c D como en el óptimo la condición i xi D 0, i D 1; : : : ; n, implica que Bi D 0, i D 1; : : : ; m (pues las variables básicas son positivas), la condición ii de KKT se puede reescribir así: T 0 cB B C ; N 0: D N NT cN Esto equivale a que cB D B T y que cN D N C N T ; N 0: Es decir, a que cN NTB T cB 0 Este vector se denomina de costes reducidos: tienen que ser no negativos en el punto óptimo. 9/133 Vectores y condiciones clave en PL: xB D B 1 b NTB N D cN DB T T cB 0 cB 1. A N , vector de multiplicadores de Lagrange de las condiciones activas de x 0, se le denomina de costes reducidos. 2. Que se cumpla que todos los costes reducidos sean positivos, o cero, es la condición de haber alcanzado el óptimo. 3. A , vector de multiplicadores de Lagrange de las condiciones Ax D b, se le denomina de multiplicadores símplex. Interpretación económica de los multiplicadores símplex h xB i Supongamos que x D 0 D de min. c T x h B 1 0 b i 10/133 es una solución óptima no degenerada s. a Ax D b x 0: Al suponer xB > 0, un cambio suficientemente pequeño 4b en b no debe modificar la base óptima B; la solución óptima sería 1 xO B B .b C 4b/ xO D D : 0 0 y el cambio en la función objetivo 4z D cBT B 14b D T 4b, donde D B T cB es el óptimo del vector de multiplicadores símplex. i indica cómo cambia la función objetivo al incrementar una unidad la cantidad disponible del recurso bi de la condición i-ésima. Su valor es un precio o valor marginal del recurso i-ésimo en el óptimo: el máximo que se puede estar dispuesto a pagar por incrementar una unidad su disponibilidad. Índice 11/133 Introducción Condiciones de punto óptimo Mejora de una solución básica factible El algoritmo Símplex Degeneración y ciclado Solución básica factible inicial Análisis de sensibilidad El método Símplex para variables acotadas Implementaciones comerciales del método Símplex El método Símplex en forma de “tableau” Otras variantes y mejoras del Símplex Complejidad computacional del método Símplex 12/133 Mejorar una solución básica factible Supongamos que: Partimos de una solución básica factible: punto extremo o vértice del problema. La matriz A 2 Rmn .m < n/ es de rango completo y la región factible no es el conjunto vacío. En la solución básica factible los m primeros coeficientes del vector x son los que forman la base: todos positivos. 13/133 Ordenando la matriz A D ŒB N y, de la misma manera, c T D ŒcBT cNT , se tiene que BxB C N x N D b: Despejando xB , xB D B 1 b B 1N x N El valor de la función objetivo para este vector es x z D ŒcBT ; cNT B D cBT B 1b C .cNT xN › cBT B 1N /x N : cost e s re duc idos Para que se pueda mejorar la función objetivo desde el punto extremo que define ese vector, debe haber costes reducidos negativos. En el punto que define ese xB confluyen n m aristas; está en la intersección en Rn de los m hiperplanos correspondientes a las condiciones Ax D b y los n m correspondientes a x N D 0 (no degenerada). Para mejorar la función objetivo, de esas posibles n m aristas habrá que escoger una que consiga hacer decrecer la función objetivo desplazándose por ella hasta otro vértice. Esa arista la definirá un coste reducido, de los de las variables no en la base, cNj D cj cBT B 1aj ; 14/133 j >m que sea negativo, pues hará decrecer la función objetivo aumentando el valor de la variable no básica correspondiente. Si por ejemplo cNj < 0, la función objetivo decrece al ritmo que marca el incremento desde cero de la variable no básica xj . Como a coste reducido más negativo, decrecimiento más rápido, se escoge para la base aquella variable no básica que tenga el coste reducido más negativo. 15/133 ¡OJO! Si la solución es básica degenerada, pues el valor de alguna variable básica es cero, puede ocurrir que en alguna dirección cualquier desplazamiento haga que x. / D x C y viole la factibilidad del problema. Esto que ocurre pues en una solución básica degenerada confluyen más de m hiperplanos. 53 13 0 12 42 d 1 es una dirección de movimiento factible; d 2 no. 16/133 Ejemplo Consideremos el programa lineal: min. x1 C x2 s. a x1 C 2x2 4 x2 1 x1; x2 0: Añadamos las variables de holgura x3 y x4 para transformarlo en forma estándar: min. x1 C x2 s. a x1 C 2x2 C x3 D 4 I x2 C x4 D 1 x1 ; x2 ; x3 ; x4 0: 1210 A D Œa1; a2; a3; a4 D 0 1 0 1 : Consideremos B D Œa1; a2: x1 12 xB D D B 1b D 01 x2 x 0 xN D 3 D : x4 0 17/133 1 4 1 2 4 2 D D I 1 0 1 1 1 La solución básica factible que estamos considerando se puede ver en la figura. 02 79 79 7 62 3 45 5 61 78 9 01 Los costes reducidos de las variables no básicas son 1 2 1 cN3 D c3 cBT B 1a3 D 0 Œ1; 1 D 1 0 1 0 1 2 0 cN4 D c4 cBT B 1a4 D 0 Œ1; 1 D 1: 0 1 1 18/133 y La función objetivo decrece siguiendo la dirección (d 2 en la figura) que determina el coste reducido cN3: la de incrementar la variable no básica x3. Las variables básicas se deben mover de la forma xB D B 1 b B 1 a3 I es decir, en la dirección opuesta a (o una cantidad negativa en) 1 2 1 1 B 1 a3 D D 0 1 0 0 que es la dirección d 2 de la figura anterior. 19/133 Elegida la variable no básica, xq , de coste reducido más negativo, que entrará en la base, ¿cuánto moverse en la dirección de la arista que ha definido ese coste reducido? La respuesta es hasta que en ese movimiento una variable básica llegue a su límite cero, y bloquee el posible desplazamiento en la dirección escogida: se habrá llegado a otro vértice. Siguiendo las ideas que manejamos ya en optimización, la dirección de movimiento del método es la opuesta a y D B 1 aq y en ella se avanza una cantidad , amplitud de paso. De las expresiones de x. / y xB . / se deduce que se mantendrá la factibilidad del problema, es decir, x. / 0; 20/133 si y sólo si xB y 0 y 0: Si las variables básicas se modifican según xB D B 1 b o, desarrollando, 2 3 2 3 bO1 xB1 6 7 6 7 6xB2 7 6bO2 7 6 :: 7 D 6 :: 7 4 : 5 4 : 5 xBm bOm y; 2 3 y1 6 7 6y 7 6 ::2 7 ; 4 : 5 ym donde bO D B 1b, ese valor máximo de movimiento negativo, vendrá dado por nO o x B bi D xN q D mKın yi W yi > 0; 1 i m D ypp : 21/133 El valor de la variable no básica xq se verá incrementado después de este paso desde cero a xN q , pasando a ser básica en detrimento de la variable xBp que pasará a ser no básica y por tanto cero. Para completar una iteración del método Símplex resta reemplazar el vector ap por el aq en la base, es decir, hacer BN D B C .aq ap /epT : quedando BN D ŒaB1 ; aB2 ; : : : ; aBp 1 ; aq ; aBpC1 ; : : : ; aBm : 22/133 El Algoritmo Símplex El algoritmo Símplex para resolver min. c T x s. a Ax D b x0 parte de una solución básica factible xB correspondiente a B D Œaj1 ; aj2 ; : : : ; ajm . B D fj1; : : : ; jmg es el conjunto de índices de las variables básicas; xji designa la variable básica i -ésima; N el de las variables no básicas. 23/133 Paso 1 – Asignación de precios. Comprobación de óptimo. (a) Calcular los multiplicadores símplex resolviendo el sistema B T D cB . (b) Calcular los costes reducidos de las variables no básicas, cNj D cj T aj , para todo j 2 N . (c) Comprobar que se ha llegado al óptimo: si cNj 0 para todo j 2 N , PARAR: la solución es óptima. Paso 2 – Determinar columna de pivotación. (a) Determinar la variable no básica xq que debe entrar en la base (encontrar una dirección de descenso): escoger q 2 N tal que cNq D mKınj 2N fcNj < 0g: (b) Resolver By D aq : Si y 0, PARAR; hay un rayo factible de soluciones a lo largo del cual c T x ! 1. Si no, seguir. Paso 3 – Determinar fila de pivotación. Análisis de Ratios. Determinar la variable básica xjp que sale de la base: calcular xjp xji D D mKın W yi > 0 : 1i m yi yp Paso 4 – Pivotación. Adaptar la solución, la matriz B y las estructuras de datos. Hacer: xq D xjp =yp xji xji B B C .aq B B [ fqgnfjp g N yi ; 1i m ajp /epT N [ fjp gnfqg; e ir al paso 1. Algoritmo Símplex revisado 24/133 function [sol fobj la c_r iters B N Binv] = ProgLineal_3(c,A,b,eps1,bfs) % Resuelve min. c’x sujeto a Ax=b, x >= 0 (problema estándar) % B_i, vector de columnas de A en la base = B; bfs=base factible % N_i, vector de columnas de A fuera de la base = N disp(’It. Sale B Entra B Cos. red. fobj Inf. dual’); [m n]=size(A); iters=0; c=c(:); B_i=bfs; N_i=setdiff(1:n,B_i); [L U]=lu(A(:,B_i)); % LU de la base inicial while 1==1 % Itera Símplex xb =U\(L\b); % xb=B^-1*b vector solución actual la =L’\(U’\c(B_i)); % Multiplicadores símplex c_r=zeros(n,1); c_r(N_i)=c(N_i)-A(:,N_i)’*la; % Costes reducidos: c_r=c_N-c_B*B^-1*N [cj j]=min(c_r); % Cos. redu. más negativo; entra j. Bland implícita if cj>-eps1 % si todos cj >= 0, óptimo; sol=zeros(n,1); sol(B_i)=xb; % dar solución fobj=c(B_i)’*xb; N = N_i; B=B_i; if nargout==8, Binv=U\(L\eye(m)); end return % Salir; FIN algoritmo end y=U\(L\A(:,j)); % y = B^-1 * a[j] zz=find(y>eps1)’; % Sale de base: mín d(i)/y(i), y(i)>0; if isempty(zz), error(’Problema no acotado.’); end % Direc. de no acotado [yy ii]=min((xb(zz)./y(zz))); % Sale i i=zz(ii); % Regla de Bland implícita: primera i k=B_i(i); B_i(i)=j; N_i(j==N_i)=k; % Adaptación datos [L U]=lu(A(:,B_i)); iters=iters+1; Di=norm(c_r(c_r<0)); fprintf(’%3d%6d%7d %20.6f %20.6f %20.6f\n’,iters,k,j,cj,c(B_i)’*xb,Di); % Info. itera end end Ejemplo 1 Resolvamos el problema de programación lineal: min. x1 25/133 3x2 s. a 2x1 C 3x2 6 x1 C x2 1 x1; x2 0: Introduciendo variables de holgura, la base queda: min. x1 3x2 s. a 2x1 C 3x2 C x3 D6 I x1 C x2 C x4 D 1 x1 ; x2 ; x3 ; x4 0: 10 B D Œa3; a4 D 0 1 y N D Œa1 ; a2 D La solución inicial, xB D B 1b, x N D 0, es pues 2 3 23 x1 4x25 x3 x4 D 0 405 I y la función objativo 6 1 zD cBT B 1b D Œ0; 0 hi 6 1 D 0: 23 : 11 Iteración 1. Paso 1 Calculemos los multiplicadores símplex resolviendo B T D cB : 1 10 0 0 D D : 01 0 0 Los costes reducidos de las variables no básicas son 2 cN1 D c1 T a1 D 1 Œ0; 0 D 1 1 3 cN2 D c2 T a2 D 3 Œ0; 0 D 3: 1 26/133 y Todavía no se ha llegado al óptimo pues los costes reducidos de las variables no básicas son negativos. Iteración 1. Paso 2 27/133 Elijamos la variable no básica x2 como aquella que ha de entrar en la base pues tiene el coste reducido más negativo. Resolvamos el sistema By D a2: 10 yD 01 1 3 3 D : 1 1 Iteración 1. Paso 3 La variable básica a salir de la base se obtendrá de calcular xB1 xB2 6 1 D mKın ; D mKın ; D 1: y1 y2 3 1 28/133 Es decir, saldrá xB2 D x4. Esto se puede deducir también analizando la expresión 3 xB1 x 6 ; D 3 D B 1b y D xB2 x4 1 1 comprobándose que x4 es la primera variable que llega a cero al incrementar x2. Iteración 1. Paso 4 Readaptemos la solución y las estructuras correspondientes: x2 x3 x4 D1 x3 y1 D 6 x4 y2 D 1 13D3 1 1 D 0: 29/133 La solución queda, por tanto, 2 3 2 3 x1 0 6 7 6 7 6x27 617 6 7D6 7 4x35 435 x4 0 con 13 B D Œa3; a2 D 01 y N D Œa1; a4 D 20 : 11 La nueva función objetivo es z D cBT B 1b D Œ0; 1 3 6 3 D 0 1 1 3: 30/133 Iteración 2. Paso 1 Calculemos los nuevos multiplicadores símplex resolviendo B T D cB : 1 10 0 10 0 0 D D D : 31 3 31 3 3 Los costes reducidos de las variables no básicas son 2 cN1 D c1 T a1 D 1 Œ0; 3 D 1 0 cN4 D c4 T a4 D 0 Œ0; 3 D 3: 1 4 y Como todavía existe un coste reducido negativo, no se ha llegado al óptimo. Iteración 2. Paso 2 Elegimos la única variable no básica capaz de mejorar la función objetivo, x1, como aquella que ha de entrar en la base. Resolvamos el sistema By D a1: 1 13 2 1 3 2 5 yD D D : 01 1 0 1 1 1 Iteración 2. Paso 3 La variable básica a salir de la base se obtendrá de calcular xB1 3 3 D mKın D mKın D : y1 5 5 Es decir, saldrá xB1 D x3. 31/133 Analizando el porqué de esto mediante la expresión x3 3 xB1 D D B 1b y D xB2 x2 1 32/133 5 ; 1 se comprueba que x3 es la primera variable que llega a cero al incrementar x1. Iteración 2. Paso 4 Readaptemos la solución y las estructuras correspondientes: x1 x2 x3 D 35 x2 y2 D 1 x3 y1 D 3 3 5 3 5 . 1/ D 5 D 0: La solución queda: 2 3 2 3 x1 3=5 6 7 6 7 6x27 68=57 6 7D6 7 4x35 4 0 5 0 x4 8 5 con B D Œa1; a2 D 23 11 10 y N D Œa3; a4 D : 01 La nueva función objetivo es z D cBT B 1b D Œ 1; " D Œ 1; 23 11 3 3 1 5 1 5 1 6 D 1 # 3 27 6 5 : D 2 1 5 5 Iteración 3. Paso 1 Calculemos los nuevos multiplicadores símplex resolviendo B T D cB : 1 " 1 1# 2 1 1 1 4=5 5 5 D D D : 3 2 3 1 3 3 3=5 5 5 33/133 34/133 Los costes reducidos de las variables no básicas son cN3 D c3 T a3 D 0 cN4 D c4 T a4 D 0 1 Œ 4=5; 3=5 D 54 0 0 Œ 4=5; 3=5 D 53 : 1 y Todos los costes reducidos son positivos por lo que se ha llegado al único óptimo del problema. La solución óptima es 3 2 3 2 x1 3=5 6 7 6 7 6x27 68=57 6 7D6 7: 4x35 4 0 5 x4 0 La función objetivo 6 z D cBT B 1b D T b D Œ 4=5; 3=5 D 1 27 : 5 35/133 Las soluciones básicas factibles que se han ido obteniendo en el proceso se indican en la figura. 02 569 8 9 578 3 4 568 7 01 Con el programa ProgLineal_3 de Matlab que hemos presentado antes sería: min. x1 3x2 s. a 2x1 C 3x2 C x3 D6 x1 C x2 C x4 D 1 x1 ; x2 ; x3 ; x4 0: >> cEje1=[-1 -3 0 0]; >> AEje1=[2 3 1 0;-1 1 0 1]; >> bEje1=[6;1]; >> bfsEje1=[3 4]; >> [sol fobj pi cr iters B N]=ProgLineal_3(cEje1,AEje1,bEje1,... sqrt(eps),bfsEje1) 36/133 Se obtiene: >> [sol fobj pi cr iters B N]=ProgLineal_3(cEje1,AEje1,bEje1,... sqrt(eps),bfsEje1) It. Sale B Entra B Cos. red. fobj 1 4 2 -3.000000 -3.000000 2 3 1 -4.000000 -6.000000 sol = 0.600000000000000 1.600000000000000 0 0 fobj = -5.400000000000000 pi = -0.800000000000000 -0.600000000000000 cr = 0 0 0.800000000000000 0.600000000000000 iters = 2 B = 1 2 N = 3 4 Inf. dual 3.162278 4.000000 Con la rutina linprog de Matlab, la sesión sería la1 siguiente. 37/133 >> cEje1=[-1 -3 0 0]; >> AEje1=[2 3 1 0;-1 1 0 1]; >> bEje1=[6;1]; >> lb=[0 0 0 0]; >> options = optimset(’LargeScale’, ’off’, ’Simplex’, ’on’, ’Display’, ’Iter’); >> [x fval exitflag output]=linprog(cEje1,[],[],AEje1,bEje1,lb,[],[],options) Phase 1: Compute initial basic feasible point. Iter Infeasibility 0 1 1 -0 Phase 2: Minimize using simplex. Iter Objective Dual Infeasibility f’*x A’*y+z-w-f 0 -5.4 0 Optimization terminated. x = 0.6000 1.6000 0 0 fval = -5.4000 exitflag = 1 output = iterations: 0 algorithm: ’medium scale: simplex’ cgiterations: [] message: ’Optimization terminated.’ 1 Obsérvese que con Matlab no sería necesario suministrar el problema en forma estándar pues admite dos conjuntos de condiciones: de igualdad y desigualdad. Si, en cambio, hay que explicitar que las cotas inferiores de las variables son cero. Ejemplo 2 Solución no acotada. Hay que resolver: min. x1 s. a 3x2 x1 2x2 4 x1 C x2 3 x1; x2 0: Con las variables de holgura, la base inicial queda: min. x1 s. a 38/133 3x2 x1 2x2 C x3 D4 I x1 C x2 C x4 D 3 x1 ; x2 ; x3 ; x4 0: 10 B D Œa3; a4 D 0 1 y N D Œa1 ; a2 D La solución inicial, xB D B 1b, x N D 0, es 2 3 23 x1 4x25 x3 x4 D 0 405 ; 4 3 de función objetivo zD cBT B 1b D Œ0; 0 hi 4 3 D 0: 1 2 : 1 1 La región factible de este problema es la que se ilustra en la figura. 02 9 3 6 45 78 79 01 Iteración 1. Paso 1 Calculemos los multiplicadores símplex resolviendo B T D cB : 1 10 0 0 D D : 01 0 0 39/133 Los costes reducidos de las variables no básicas son 1 cN1 D c1 T a1 D 1 Œ0; 0 D 1 2 cN2 D c2 T a2 D 3 Œ0; 0 D 1 40/133 1 y 3: Al ser negativos los costes reducidos, esta solución no es óptima. Iteración 1. Paso 2 Elegimos la variable no básica x2 como aquella que ha de entrar en la base pues su coste reducido es el más negativo. Resolvamos el sistema By D a2: 10 yD 01 1 2 2 D : 1 1 41/133 Iteración 1. Paso 3 La variable básica a salir de la base se obtendrá de calcular 3 xB2 D mKın D 3: D mKın y2 1 Es decir saldrá xB2 D x4. Como venimos haciendo, esto también de puede comprobar a partir de la expresión xB1 x 4 2 D 3 D B 1b y D ; 3 1 xB2 x4 constatándose que, efectivamente, x4 es la primera variable que llega a cero al incrementar x2. 42/133 Iteración 1. Paso 4 Readaptemos la solución y las estructuras correspondientes: x2 x3 x4 D3 x3 y1 D 4 x4 y2 D 3 3 . 2/ D 10 3 1 D 0: La solución queda: 2 3 2 3 x1 0 6 7 6 7 6x27 6 37 6 7D6 7 4x35 4105 x4 0 con 1 2 B D Œa3; a2 D 0 1 y N D Œa1; a4 D 10 : 11 43/133 Iteración 2. Paso 1 Calculemos los multiplicadores símplex resolviendo B T D cB : 1 10 0 10 0 0 D D D : 21 3 21 3 3 Los costes reducidos de las variables no básicas son 1 cN1 D c1 T a1 D 1 Œ0; 3 D 1 0 cN4 D c4 T a4 D 0 Œ0; 3 D 3: 1 4 y Como existe un coste reducido negativo, todavía no se ha alcanzado el óptimo. 44/133 Iteración 2. Paso 2 Elegimos la única variable no básica posible, x1, como aquella que ha de entrar en la base. Resolvamos el sistema By D a1: 1 1 2 1 12 1 1 yD D D : 0 1 1 01 1 1 Como todos los yi ; i D 1; 2 son negativos, hay un rayo de soluciones factibles a u lo largo del cual c T x ! 1. La solución es pues no acotada. Ejemplo 3 Soluciones óptimas alternativas. Hay que resolver: min. 2x1 s. a x1 C 2x2 4 x1 C x2 1 x1; x2 0: Introduzcamos las variables de holgura x3 y x4. El problema queda: min. 2x1 s. a 4x2 4x2 x1 C 2x2 C x3 D 4 x1 C x2 C x4 D 1 x1; x2; x3; x4 0: Escojamos como base de partida 10 B D Œa1; a4 D 11 21 y N D Œa2; a3 D : 10 45/133 46/133 La solución inicial, xB D B 1b, x N D 0, es pues 1 x1 10 4 10 4 4 D D D x4 10 1 11 1 5 y x2 0 D : x3 0 La función objetivo para esta solución es 4 z D cBT B 1b D Œ 2; 0 D 5 8: 47/133 Iteración 1. Paso 1 Calculemos los multiplicadores símplex resolviendo B T D cB : 1 1 1 2 11 2 2 D D D : 0 1 0 01 0 0 Los costes reducidos de las variables no básicas son 2 cN2 D c2 T a2 D 4 Œ 2; 0 D0 1 1 cN3 D c3 T a3 D 0 Œ 2; 0 D 2: 0 Hemos llegado a un punto óptimo. y 48/133 El óptimo, sin embargo, no es único. 02 !" #!" $ 34567849 48 01 Si incrementamos x2, manteniendo x3 D 0, las variables x1 y x4 se modifican de la siguiente manera: h i h ih i h ih i hi hi x1 10 4 10 2 4 2 1 1 D B b B a x D x D 2 2 2 x4 11 1 11 1 5 3 x2 : 49/133 Para cualquier x2 < 35 , la solución 2 3 2 3 x1 4 2x2 6 7 6 7 6x27 6 x2 7 6 7D6 7 4x35 4 0 5 x4 5 3x2 es óptima con función objetivo z D 8. 50/133 Degeneración y ciclado Aunque hasta ahora se ha supuesto que la solución básica x de un programa lineal no es “degenerada”, el que lo sea no causa grandes dificultades prácticas en el proceso de obtención del óptimo. Lo peor que puede ocurrir es que. en el Paso 3, la variable que salga de la base, xjp , tenga un valor cero, lo que dará lugar a una iteración con desplazamiento D 0: x no cambiará. Aunque x no cambie, si lo hará la base. Como x, y por tanto c T x, no cambian, es teóricamente posible que el algoritmo entre en un ciclo infinito a través de una sucesión de bases, y sus correspondientes soluciones, volviendo a esta base. El problema 51/133 min. s. a x1 x2 x3 3 x 4 4 C 20x5 C 14 x4 C 21 x4 8x5 12x5 1 x 2 6 C 6x7 El óptimo es x D objetivo óptima -5/4. Œ3=4; 0; 0; 1; 0; 1; 0T y su función C 9x7 D 0 C 3x7 D 0 C x6 D1 x1 ; x2 ; x3 ; x4 ; x5 ; x6 ; x7 0: x6 1 x 2 6 expuesto por E.M.L. Beale en 1955, muestra cómo el método Símplex puede quedar atrapado en un ciclo infinito, si se escoge como variable a entrar en la base aquella que posee el coste reducido más negativo y para salir de ella una de las que proporcionan el mínimo . Si se comienza a resolver partiendo de la base B D Œa1; a2; a3, siguiendo el método Símplex ordinario se obtienen las bases Œa4; a2; a3, Œa4; a5; a3, Œa6; a5; a3, Œa6; a7; a3, Œa1; a7; a3 y otra vez Œa1; a2; a3. Si se vuelve a utilizar la misma secuencia de variables a entrar y salir de la base, el método entra en un ciclo infinito. 52/133 La regla de Bland (1977) Robert G. Bland, EE.UU. 1948-. Mediante esta regla –la más habitualmente usada– se elige como variable que ha de entrar en la base, de entre las de coste reducido negativo, aquella con menor índice. Para salir de la base, si el ratio es igual en varias, también aquella con menor índice. Índice 53/133 Introducción Condiciones de punto óptimo Mejora de una solución básica factible El algoritmo Símplex Degeneración y ciclado Solución básica factible inicial Análisis de sensibilidad El método Símplex para variables acotadas Implementaciones comerciales del método Símplex El método Símplex en forma de “tableau” Otras variantes y mejoras del Símplex Complejidad computacional del método Símplex 54/133 Solución básica factible inicial ¿Cómo obtener una eficazmente? Si las condiciones del problema son de la forma Ax b; x 0, donde b tiene todos sus coeficientes no negativos, el problema es trivial: añadiendo las variables de holgura a las condiciones se tendrá que Ax C x h D b x; x h 0: Una solución básica factible será x h D b, x D 0; la matriz básica correspondiente, B D I. 55/133 Normalmente no es tan sencillo. Por ejemplo, si se diesen las mismas condiciones de antes pero el vector b tuviese algún coeficiente negativo, la solución obtenida no sería válida pues violaría la condición de no negatividad. Si las condiciones son de la forma Ax b; x 0, añadiendo el vector de variables de holgura, x h, se tendría que Ax x h D b; x 0; x h 0. Si el vector b no tuviese todos sus coeficientes negativos o cero, difícilmente se podría determinar una base B a partir de la matriz ŒA I, de tal forma que xB D B 1b cumpliese la condición de no negatividad. 56/133 Ejemplo 1 Consideremos las condiciones siguientes: x1 C 2x2 4 x1 C x2 1 x1; x2 0: Añadiendo las variables de holgura x3 y x4 las condiciones se transforman en x1 C 2x2 C x3 D 4 x1 C x2 C x4 D 1 x1; x2; x3; x4 0: Una solución inicial básica factible sería 10 x3 1 0 4 41 D B D Œa3 ; a4 D W xB D D B 1b D 01 x4 01 1 x 0 xN D 1 D : x2 0 y 57/133 Ejemplo 2 Sean ahora las siguientes condiciones: x1 C x2 C x3 6 2x1 C 3x2 C 3x3 3 x2; x3 0: Cuando como aqui x1 una variable no está restringida a tomar valores no negativos, podemos sustituirla por xi0 xi00, xi0 0, xi00 0. Si lo hacemos e introducimos las variables de holgura x4 y x5, las condiciones quedan: x100 C x2 C x3 C x4 D6 x10 2x10 C 2x100 C 3x2 C 3x3 x5 D 3 x10 ; x100; x2; x3; x4; x5 0: No es inmediato determinar una base B que nos permita obtener una solución inicial básica factible. 58/133 Ejemplo 3 Consideremos ahora las siguientes condiciones: x1 C x2 2x3 3 2x1 C x2 C 3x3 7 x1; x2; x3 0: Si para hacer todos los coeficientes del vector b no negativos multiplicamos la primera condición por 1 e introducimos las variables de holgura x4 y x5, las condiciones resultarán: x1 x2 C 2x3 x4 D3 2x1 C x2 C 3x3 C x5 D 7 x1; x2; x3; x4; x5 0: Tampoco de aquí se puede determinar de una manera sencilla una base inicial del problema. 59/133 Variables artificiales La forma más inmediata de determinar una solución básica factible de partida consiste en introducir temporalmente, además de las variables de holgura, un nuevo conjunto similar de variables artificiales. Si el problema es min. c T x s. a Ax D b x 0; donde, sin pérdida de generalidad, se supone que b 0, se le añade un vector de variables artificiales, x a , resultando Ax C x a D b; con x 0 y x a 0. Si se quiere conseguir una solución factible del problema original habrá que forzar a que los coeficientes del vector x a sean cero. Es decir, resolver también con el método Símplex el problema 60/133 min. m X x ai iD1 s. a Ax C x a D b x; x a 0: Si el problema original admite una solución factible, en la solución del transformado se tendrá que x a D 0. Si tal solución factible no existe, el problema transformado acabará con algún coeficiente de x a positivo. El método Símplex completo, por consiguiente, consta de las dos fases que se indican en la tabla. 61/133 Fase I Partiendo de la solución inicial x D 0, x a D b, resolver min. m X xai i D1 s. a Ax C x a D b x; x a 0: Si x a ¤ 0, parar: el problema no tiene solución básica factible. Si x a D 0, ir a la fase II tomando como B inicial la de la última iteración de esta fase. Fase II Partiendo de xB D B 1 b y x N D 0, resolver min. cBT xB C cNT x N s. a BxB C N x N D b xB ; x N 0: Algoritmo Símplex revisado en dos Fases 62/133 Al final de la Fase I, si la solución tiene alguna variable artificial en la base y xai D 0 (degenerada), dicha variable se puede intercambiar por una no básica –de las originales– xj , o suprimirse sin más que eliminar la condición redundante correspondiente. Concretamente: Si la variable básica xak D 0 y se cumple que e Tk B 1aj ¤ 0, la variable xak se puede reemplazar por la xj . Si para todo aj 2 N , e Tk B 1aj D 0, el sistema Ax D b tiene una condición redundante y se puede eliminar la fila k-ésima de la matriz A original (así como la fila y columna k-ésimas de B). Circunstancias de este tipo se evitan con un mecanismo de preproceso para aligerar el problema de redundancias, incoherencias, etc. 63/133 Ejemplo Hay que resolver el siguiente problema: min. x1 s. a 2x2 x1 C x2 2 x1 C x2 1 x2 3 x1; x2 0: Para empezar, introduzcamos como siempre las variables de holgura: min. x1 s. a 2x2 x1 C x2 x3 D2 x1 C x2 x4 D1 x2 C x5 D 3 x1; x2; x3; x4; x5 0: 64/133 Como la base de partida no es de fácil obtención, introducimos las variables artificiales y planteamos el siguiente problema dentro de la fase I: x6 C x7 min. s. a x1 C x2 x1 C x2 x2 D2 x4 C x7 D 1 C x5 D3 x1; x2; x3; x4; x5; x6; x7 0: x3 C x6 Obsérvese que en la tercera condición no es necesario introducir variable artificial alguna. Del problema así planteado se puede obtener inmediatamente la base de partida; ésta es 0 1 0 1 1 1 0 B D Œa5; a6; a7 D 0 0 1 y N D Œa1; a2; a3; a4 D 1 1 0 1 : 100 01 0 0 65/133 La solución inicial, xB D B 1b, x N D 0, es: x 0 1 0 1 2 0 0 1 2 3 5 x6 D 0 0 1 1 D 100 1 D 2 : x7 100 3 010 Por tanto, 2 3 2 3 x1 0 6x27 607 6x37 607 6 7 6 7 6x47 D 607 : 6 7 6 7 6x57 637 4x 5 425 6 x7 1 3 1 Fase I. Iteración 1. Paso 1 Calculemos los multiplicadores símplex resolviendo B T D cB : 3 2 001 D 41 0 05 010 66/133 12 32 3 2 3 3 2 1 010 0 0 4 15 D 40 0 15 4 15 D 41 5 : 0 100 1 1 Los costes reducidos de las variables no básicas son 3 1 0 4 15 D 0; 0 2 3 1 0 415 D 2; 1 2 3 1 0 4 05 D 1 0 2 3 0 0 4 15 D 1: 0 2 cN1 D c1 T a1 D 0 Œ1; 1; cN2 D c2 T a2 D 0 Œ1; 1; cN3 D c3 T a3 D 0 Œ1; 1; cN4 D c4 T a4 D 0 Œ1; 1; y 67/133 No se ha llegado todavía al óptimo pues existe un coste reducido negativo. Fase I. Iteración 1. Paso 2 Elegimos la única variable no básica posible, x2, como aquella que ha de entrar en la base. Resolvemos el sistema By D a2: 2 3 12 3 2 32 3 2 3 010 1 001 1 1 y D 40 0 15 415 D 41 0 05 415 D 415 : 100 1 010 1 1 68/133 Fase I. Iteración 1. Paso 3 La variable básica a salir de la base se obtendrá de calcular xB1 xB2 xB3 3 2 1 D mKın ; ; D mKın ; ; D 1I y1 y2 y3 1 1 1 es decir, saldrá xB3 D x7. O, como solemos utilizar, de evaluar la expresión xB D B 1b y. Es decir, 2 3 2 3 2 3 xB1 x5 3 4xB2 5 D 4x65 D 425 xB3 x7 1 2 3 1 415 ; 1 comprobándose que x7 es la primera variable que llega a cero al incrementar x2. 69/133 Fase I. Iteración 1. Paso 4 Readaptemos la solución y las estructuras de datos: x2 x5 x6 x7 D1 x5 y1 D 3 x6 y2 D 2 x7 y3 D 1 11D2 11D1 1 1 D 0: La solución queda por tanto, 2 3 2 3 x1 0 6x27 617 6x37 607 6 7 6 7 6x47 D 607 6 7 6 7 6x57 627 4x 5 415 6 x7 0 70/133 siendo 2 3 011 B D Œa5; a6; a2 D 40 0 15 101 y 2 3 10 1 0 N D Œa1; a7; a3; a4 D 4 1 1 0 15 : 00 0 0 Fase I. Iteración 2. Paso 1 Calculemos de nuevo los multiplicadores 2 3 12 3 2 001 0 D 41 0 05 4 15 D 4 111 0 símplex resolviendo B T D cB : 32 3 2 3 0 10 0 1 1 1 1 5 4 15 D 4 1 5 : 0 0 1 00 Los costes reducidos de las variables no básicas son 71/133 2 cN1 D c1 T a1 D 0 Œ1; 1; cN7 D c7 T a7 D 1 Œ1; 1; cN3 D c3 T a3 D 0 Œ1; 1; cN4 D c4 T a4 D 0 Œ1; 1; 3 1 0 4 15 D 2; 0 2 3 0 4 0 15 D 2; 0 2 3 1 4 05 D 1 0 y 0 2 3 0 0 4 15 D 1: 0 No se ha llegado todavía al óptimo; hay dos costes reducidos negativos. Fase I. Iteración 2. Paso 2 Elegimos la variable no básica x1 para entrar en la base pues su coste reducido es el más negativo. Resolvemos el sistema By D a1: 3 12 3 2 32 3 2 3 2 1 0 11 1 1 011 y D 40 0 15 4 15 D 41 1 05 4 15 D 4 25 : 101 0 0 10 0 1 72/133 Fase I. Iteración 2. Paso 3 La variable básica a salir de la base se obtendrá de calcular nx x o ˚ B B D mKın y11 ; y22 D mKın 21 ; 21 D 12 I es decir, saldrá xB2 D x6. Esto se deduce también de 2 3 2 3 2 3 xB1 x5 2 4xB2 5 D 4x65 D B 1b y D 415 xB3 x2 1 2 3 1 4 25 ; 1 constatándose que x6 es la primera variable que llega a cero al incrementar x1. Fase I. Iteración 2. Paso 4 Readaptemos la solución y las estructuras de datos correspondientes: x1 x5 x6 x2 73/133 D D 21 D x5 y1 D 2 D x6 y2 D 1 D x2 y3 D 1 1 2 1 2 1 2 1 D 23 2D0 . 1/ D 23 : La solución queda por tanto 2 3 x1 6x27 6x37 6x47 6x 7 4 55 x6 x7 siendo 2 0 4 B D Œa5 ; a1 ; a2 D 0 1 1 1 0 2 D 3 1=2 63=27 607 607 63=27 4 5 0 0 3 2 1 10 5 4 1 y N D Œa6 ; a7 ; a3 ; a4 D 0 1 1 00 1 0 0 3 0 15 : 0 74/133 Fase I. Iteración 3. Paso 1 Calculemos los multiplicadores símplex resolviendo B T D cB : 2 0 4 D 1 1 3 01 1 05 11 12 3 2 1 0 2 1 4 05 D 6 4 2 0 1 1 2 1 2 3 1 2 3 0 2 17 4 5 0 25 00 0 2 3 0 4 D 05: 0 Los costes reducidos de las variables no básicas son cN6 D c6 T a6 D 1 Œ0; 0; cN7 D c7 T a7 D 1 Œ0; 0; cN3 D c3 T a3 D 0 Œ0; 0; cN4 D c4 T a4 D 0 Œ0; 0; 2 3 1 0 405 D 1; 0 2 3 0 4 0 15 D 1; 0 2 3 1 4 05 D 0; 0 0 2 3 0 0 4 15 D 0: 0 y Todos los costes reducidos son no negativos: óptimo de la fase I. La base de partida de la fase II es 0 B D Œa5; a1; a2 D 0 1 11 11 01 y N D Œa3; a4 D 1 0 0 Fase II. Iteración 1. Paso 1 Calculemos los multiplicadores símplex resolviendo B T D cB : 2 0 4 D 1 1 0 1 1 3 1 05 1 12 3 2 1 0 2 4 15 D 6 4 21 2 1 1 2 1 2 1 2 2 17 4 25 3 0 0 3 2 3 1=2 0 15 D 4 3=25 : 2 0 Los costes reducidos de las variables no básicas son 2 cN3 D c3 T a3 D 0 Œ 1=2; cN4 D c4 T a4 D 0 Œ 1=2; 3 1 3=2; 0 4 05 D 2 03 0 3=2; 0 4 15 D 0 1 2; 3 2: y 75/133 0 1 0 : Como cN3 y cN4 son negativos, no se ha llegado aún al óptimo. Fase II. Iteración 1. Paso 2 Elegimos la variable no básica x4 como la que entra en la base. Resolvamos el sistema By D a4: 2 0 4 yD 0 1 1 1 0 3 1 15 1 12 3 2 0 4 15 D 4 0 1 2 1 2 1 2 1 2 1 2 1 2 32 3 2 3 1 0 1=2 05 4 15 D 4 1=25 : 0 1=2 0 Fase II. Iteración 1. Paso 3 La variable básica a salir de la base se obtendrá de calcular ( ) 3 1 xB1 xB2 D mKın ; D mKın 21 ; 21 D 1: y1 y2 2 2 76/133 77/133 Es decir, saldrá xB2 D x1. Si se analiza la expresión 2 3 xB1 4xB2 5 D B 1 b xB3 3 2 3 2 3=2 x5 y D 4x1 5 D 41=25 x2 3=2 2 3 1=2 4 1=25 ; 1=2 también se comprueba que, efectivamente, la primera variable que llega a cero al incrementar x4 es x1, con D 1. Fase II. Iteración 1. Paso 4 Readaptemos la solución y las estructuras de datos: x4 x5 x1 x2 D1 x5 y1 D x1 y2 D x2 y3 D 3 2 1 2 3 2 1 12 D 1 1 12 D 0 C 1 12 D 2: 78/133 La nueva solución es, por tanto, 2 3 2 3 0 x1 6x27 627 6 7 6 7 6x37 D 607 4x45 415 x5 1 con 0 B D Œa5; a4; a2 D 0 1 01 11 y 01 N D Œa3; a1 D 1 0 0 Fase II. Iteración 2. Paso 1 Calculemos los multiplicadores símplex resolviendo B T D cB : 2 0 D 40 1 3 01 1 05 11 12 3 2 0 1 4 05 D 4 0 2 1 32 3 2 3 11 0 2 1 05 4 05 D 4 0 5 : 00 2 0 1 1 0 : Los costes reducidos de las variables no básicas son 2 cN3 D c3 T a3 D 0 cN1 D c1 T a1 D 1 3 1 Œ 2; 0; 0 4 05 D 2; 2 03 1 Œ 2; 0; 0 4 15 D 3: 0 79/133 y Todavía no se ha llegado al óptimo. Fase II. Iteración 2. Paso 2 Elegimos la variable no básica x3 como la que entra en la base. Resolvemos el sistema By D a3: 2 0 4 yD 0 1 0 1 0 3 1 15 1 12 3 2 1 1 4 05 D 4 1 0 1 0 1 0 32 3 2 3 1 1 1 5 4 5 4 0 0 D 15 : 0 0 1 80/133 Fase II. Iteración 2. Paso 3 La variable básica a salir de la base se obtendrá de calcular xB1 1 D mKın D mKın D 1I y1 1 es decir, saldrá xB1 D x5. Viéndolo a partir de la expresión 2 3 2 3 2 3 2 3 xB1 x5 1 1 4xB2 5 D 4x45 D b 1b y D 415 4 15 ; xB3 x2 2 1 se comprueba también que la primera variable que llega a cero al incrementar x3 es x5. 81/133 Fase II. Iteración 2. Paso 4 Readaptemos la solución y las estructuras de datos: x3 x5 x4 x2 La nueva solución es D1 x5 y1 D 1 1 1 D 0 x4 y2 D 1 C 1 1 D 2 x2 y3 D 2 C 1 1 D 3: 2 3 2 3 0 x1 6x27 637 6 7 6 7 6x37 D 617 : 4x45 425 0 x5 Las nuevas matrices: 82/133 2 3 2 3 1 01 0 1 B D Œa3; a4; a2 D 4 0 1 15 I N D Œa5; a1 D 40 15 : 0 01 1 0 Fase II. Iteración 3. Paso 1 Calculemos los multiplicadores; resolvamos B T D cB : 2 1 4 0 D 1 0 1 1 3 0 05 1 12 3 2 0 1 4 05 D 4 0 2 1 0 1 1 32 3 2 3 0 0 0 5 4 5 4 0 0 D 05: 1 2 2 Los costes reducidos de las variables no básicas son cN5 D c5 T a5 D 0 Œ0; 0; cN1 D c1 T a1 D 1 Œ0; 0; 2 3 0 4 2 05 D 2; 1 2 3 1 2 4 15 D 1: 0 y 83/133 Todos los costes reducidos de las variables no básicas son positivos por lo que se ha alcanzado el único óptimo del problema. La solución final es 2 3 2 3 0 x1 6x27 637 6 7 6 7 6x37 D 617 : 4x45 425 x5 0 El valor óptimo de la función objetivo es cBT B 1b D 6. 84/133 El proceso iterativo que se ha seguido se representa en la figura 528 7 x 3 568 7 58 59 68 9 7 6 4 x1 85/133 Método de penalización o de la M grande Consiste en combinar en un proceso único las fases I y II del método Símplex y resolver n m X X min. ci xi C M xaj i D1 j D1 s. a Ax C x a D b x; x a 0: La constante M se elige “suficientemente grande” de tal forma que esté muy penalizado que en el óptimo x a ¤ 0. Eventualmente, si existe solución factible del problema original, las variables artificiales tenderán a cero en el proceso de obtención del óptimo de este problema. 86/133 Esta alternativa tiene dos pegas: La necesidad de escoger un determinado valor fijo de M que asegure que las variables artificiales no van a estar en la base de la solución óptima. Un valor excesivamente grande de M, con respecto a los coeficientes del vector c y de la matriz A, puede hacer que los errores de redondeo de los cálculos y la inestabilidad numérica del proceso lleguen a ser importantes. Que el número de variables del problema se incrementa notablemente. Resolvamos con esta técnica un ejemplo anterior: min. x1 s. a 1000x6 C 1000x7 2x2 x1 C x2 x1 C x2 x2 87/133 x3 C D2 x4 C x7 D 1 C x5 D3 x1 ; x2 ; x3 ; x4 ; x5 ; x6 ; x7 0: x6 Con el programa ProgLineal_3 de Matlab que usamos sería: sol = >> cM=[1 -2 0 0 0 1000 1000]; >> AM=[1 1 -1 0 0 1 0;-1 1 0 -1 0 0 1;0 1 0 0 1 0 0]; >> bM=[2;1;3]; >> bfsM=[5 6 7]; >> [sol fobj pi cr iters B N]=ProgLineal_3(cM,AM,bM,sqrt(eps),bfsM) It. Sale B Entra B Cos. red. fobj 1 7 2 -2002.000000 1998.000000 2 6 1 -2001.000000 -1.000000 3 1 4 -1.500000 -3.000000 4 5 3 -2.000000 -4.000000 0 3 1 2 0 0 0 fobj = -6 pi = 0 0 -2 cr = 1000 iters = 4 B = 3 N = 6 1000 4 2 7 5 1 2 1 Análisis de sensibilidad 88/133 La solución óptima que obtiene el método Símplex de un problema de PL es como una fotografía fija de una situación real que habitualmente evoluciona en el tiempo, incluso a corto o muy corto plazo. Con un pequeño esfuerzo, una vez obtenida la solución con el Símplex, se puede conocer hasta qué punto ese óptimo seguirá siéndolo y qué pueden representar, en costes o beneficios, determinadas variaciones de los parámetros del problema. Esto es frecuente estudiarlo cuando los costes de producción de un artículo deben variar en el tiempo al fluctuar el precio de una materia prima o, en general, cuando los datos del problema son estimaciones más o menos imprecisas de una realidad en la que oscilan entre determinados márgenes. Estudiemos cómo afecta a la solución de un problema de PL el que varíen los coeficientes de la función objetivo c o el vector b. 89/133 Cambios en el vector de costes Consideremos la familia de programas, función de un vector de parámetros , definida por min. Œc C T x s. a Ax D b x 0: La base B de la solución óptima del problema original (sin los parámetros) seguirá siéndolo mientras los costes reducidos de las variables no básicas sigan siendo no negativos; es decir, mientras que ŒcN C N T ŒcB C B T B 1N 0T : 90/133 Consideraremos los dos casos más generales: 1. Que la variable cuyo coeficiente de coste varía no está en la base; 2. Que está en la base. 1. La variable cuyo coeficiente de coste varía no está en la base. Para que los costes reducidos sigan siendo óptimos, es decir, ŒcN C N T cBT B 1N 0T ; se tiene que cumplir que cNT cBT B 1N C TN D cNNT C TN 0T : Esto obliga a que el coeficiente del vector coste sólo pueda variar hacia abajo (decrecer), en una cantidad i igual al coste reducido de la variable i que varía. Es decir i cNi : Hacia arriba podría variar hasta el infinito. 91/133 2. La variable cuyo coeficiente de coste varía está en la base. La condición de optimalidad para los costes reducidos es ahora cNT ŒcB C B T B 1N D cNNT BT B 1N 0T : El intervalo de valores Œ i ; i de la posible variación en el coste de una variable en la base será i D mKax mKax f cNk =dk ; dk > 0g ; 1 1kn m mKın mKın 1kn m expresión en la que d D de la inversa de B por N . f cNk =dk ; dk < 0g ; 1 D i 1 B.i;W/ N T ,es el vector fila i -ésimo del producto 92/133 Cambios en el vector b Consideremos el problema: min. c T x s. a Ax D b C ı x 0: Al cambiar b, la solución óptima variaría así h T T T N B 1ı T x D ŒxB x N D bC 0T iT ; donde bN D B 1b y B es la base óptima. Esa base seguirá siendo óptima en tanto y cuando sus coeficientes sigan siendo no negativos. 93/133 Para cada modificación ıi del coeficiente i del vector b, si 2 3 0 6 ::: 7 6 7 16 7 columna i -ésimo d D B 617 i D B 1e i ; vector de la inversa de la base 6 :: 7 4:5 0 el intervalo Œı i ; ı i en el cual la solución sigue siendo óptima es ˚ ı i D mKax mKax bNk =dk ; dk > 0 ; 1 ı 1km mKın mKın 1km ˚ bNk =dk ; dk < 0 ; 1 D ı i 94/133 Ejemplo Supongamos que hemos resuelto el problema min. 40x C 53y s. a 60x C 80y 360 160x C 120y 680 x; y 0: La solución completa es 2 3 2 637 60 80 120 80 1 1 7 xB D 6 ; 405 ; B D 160 120 ; B D 5600 160 60 0 1 0 368 368 1 1 N D ; D 560 y cN D 560 : 0 1 2 2 La función objetivo es 239. 1. Para que rango de costes de x la solución sigue siendo óptima. Como x está en la base, cualquier cambio cx cx C afecta al vector N y al vector de costes reducidos de las variables no básicas, c. El vector d de las expresiones anteriores es 1 1 120 80 d D B.1;W/ N D 5600 1 120 80 : D 5600 1 0 0 1 1 1 368 2 C 120 80 : 560 5600 Para que la solución óptima anterior lo siga siendo, debe cumplirse que Los costes reducidos variarán de la siguiente manera. cN 95/133 3680 120 0 20 C 80 0: Esto se cumple en Œ ; D Œ 1=4; 92=3. El coeficiente de x puede moverse pues en el rango Œ39;75 70;67 para que la solución siga siendo óptima. 2. Cuánto puede variar el coeficiente 360 del término independiente sin que cambie la base óptima, es decir b1 b1 C ı. El vector d es en este caso 96/133 por lo que xB 1 120 1 ; d DB 1 D 160 0 5600 2 120 1 C ı 5600 . 3 160 La base óptima original seguirá siendo óptima mientras xB sea positiva; es decir, mientras ( 2 120 5600 ı0 3C 160 5600 ı 0: Esto se cumple en el intervalo Œı; ı D Œ 105 280=3, por lo que el coeficiente 360 puede variar entre 360 105 y 360 C 280=3 sin que cambie la solución óptima del problema original. El valor del multiplicador símplex 1 indica cómo varía la función objetivo cuando coeficiente 360 se mueve en ese rango de valores: z zC 33 368 ı D 239 C ı: 560 35 El método Símplex para variables acotadas Nos ocupamos ahora del problema min. c T x s. a Ax D b l x u: Las variables están así acotadas, encajadas o box constrained. Si la xj tiene lj D 1 y uj D 1, se dice libre. Se podrían introducir variables de holgura y aplicar el método habitual, cT x Ax D b x C x1 D u x x2 D l x; x 1 ; x 2 0: min. s. a Actuando así, el número de variables se triplica y el número de condiciones pasa a ser m C 2n. 97/133 98/133 Considérese a continuación el sistema de inecuaciones Ax D b l x u; donde la matriz A mn es, sin pérdida de generalidad, de rango m. Definición Una solución básica factible de ese sistema es aquella en la que n m variables no básicas tienen el valor de uno de sus límites, l ó u, y las restantes m variables básicas corresponden a vectores columnas linealmente independientes de A. Descompongamos la matriz A en ŒB Nl Nu, con rango.B/ D m, y el vector x en ŒxBT x TNl x TNu : 99/133 Un vector x se dice solución básica factible del sistema de inecuaciones Ax D b l x u; si xB es solución del sistema BxB D b; y x Nl D l Nl x N u D uN u : Si además l B < xB < uB , entonces x es una solución básica factible no degenerada; si algún coeficiente de xBj es igual a lj o uj , la solución se dice básica factible degenerada. Expresemos las condiciones de la forma BxB C Nl x Nl C Nux Nu D b. El vector xB es entonces: 100/133 xB D B 1 b B 1 N l x Nl B 1 N u x Nu : La función objetivo: z D c T x D cBT xB C cNT l x Nl C cNT u x Nu D cBT B 1b B 1Nl x Nl B 1Nux Nu C cNT l x Nl C cNT u x Nu D cBT B 1b C cNT l cBT B 1Nl x Nl C cNT u cBT B 1Nu x Nu : cost. reducid o s cost. reducid os Supongamos que partimos de una solución básica factible. 2 En ese punto se examinan los costes reducidos de las variables2 no básicas. Si puede ser mejorada –en un problema de minimización–, alguna variable no básica que esté en su límite inferior tendrá un coste reducido negativo, u otra en su límite superior un coste reducido positivo. En uno de sus límites. 101/133 La función objetivo se puede mejorar (decrementar) si T 1 cj cB B aj < 0 para alguna xj D lj T 1 cj cB B aj > 0 para alguna xj D uj : o Si se elige una variable no básica, xq por ejemplo, como aquella que ha de mejorar la función objetivo, y su valor se modifica desde la cota en el que esté en la dirección hacia la otra cota, la función objetivo mejorará (decrecerá) mientras se puedan modificar las variables básicas de tal manera que persista la factibilidad del problema (se satisfagan las condiciones); es decir, hasta que: a) una variable básica llegue a uno de sus límites, en cuyo caso se hará no básica, pasando a ocupar su sitio en la base la no básica que se modifica; o b) la variable no básica que se modifica llegue al límite opuesto del que parte antes de que ocurra lo anterior. La base entonces no se modifica. Si ocurren a) y b) a la vez: solución básica factible degenerada. Si Nl es el conjunto de los índices de las variables no básicas en su límite inferior y Nu el de las no básicas en su límite superior, y se modifica xq , se tendrá que 102/133 xB D B 1 b B 1 Nl x Nl D bO y; con bO D B 1 b B 1 Nl x Nl B 1 Nu x Nu B 1 Nu x Nu y y D B 1 aq . B 1 aq Opciones: que q 2 Nu; o q 2 Nl . Si q 2 Nl , el incremento posible, , de xq desde su límite inferior lq , ha de ser positivo para seguir manteniendo la factibilidad; el máximo será 8 bO i lBi ˆ ˆ D mK ı n W y > 0I 1 W y 0 ˆ 1 1i m i i yi ˆ ˆ ˆ ˆ < bO i uBi D mKın D mK ı n W y < 0I 1 W y 0 ˆ 2 1i m i i yi ˆ ˆ ˆ ˆ ˆ ˆ : uq lq : Si q 2 Nu, el incremento desde uq ha de ser negativo. El máximo: 8 bO i lBi ˆ ˆ 1 D mKın1i m W yi < 0I 1 W yi 0 ˆ yi ˆ ˆ < D mKın bO i uBi ˆ 2 D mKın1i m W yi > 0I 1 W yi 0 ˆ yi ˆ ˆ ˆ : lq uq : 103/133 El último paso es modificar las estructuras de datos correspondientes, a fin de reflejar los cambios habidos en la base. Todos los códigos comerciales del método Símplex lo hacen para variables acotadas: En un ordenador, una variable en forma estándar, xj 0, en realidad se trata como si 0 xj 1020, por ejemplo, ya que en una máquina que trabaje con precisión finita la cantidad 1020 es suficientemente grande. En la tabla que sigue se expone el algoritmo Símplex revisado para variables acotadas. Paso 1 – Asignación de precios. Comprobación de óptimo. (a) Calcular los multiplicadores símplex resolviendo el sistema B T D cB . (b) Calcular los costes reducidos de las variables no básicas, cNj D cj T aj , para todo j … B. (c) Comprobar que se ha llegado al óptimo: si cNj 0 para todo j 2 Nl y cNj 0 para todo j 2 Nu , PARAR; la solución es óptima. Paso 2 – Obtener columna de pivotación. (a) Determinar la variable no básica xq que debe entrar en la base (encontrar una dirección de descenso): escoger q … B tal que cNq D mKax j mKın fcNj < 0gj; mKax fcNj > 0g : j 2Nl j 2Nu (b) Resolver By D aq . Si q 2 Nl , ir al paso 3; si q 2 Nu , al 3’. Paso 3 – Obtener fila de pivotación. Determinar qué variable básica xjp sale de la base: calcular W xji lji xji uji D mKın mKın W yi > 0 ; mKın W yi < 0 ; uq lq : 1i m 1i m yi yi Si T ol:: PARAR; el problema es no acotado. Si no, ir al paso 4. Paso 3’ – Obtener fila de pivotación. Determinar qué variable básica xjp sale de la base: calcular W xji uji xji lji W yi > 0 ; mKın W yi < 0 ; lq uq : D mKın mKın 1im 1i m yi yi Si T ol:: PARAR; el problema es no acotado. Paso 4 – Pivotación. Adaptar la solución y la matriz B e ir al paso 1: xq lq C ó uq C ; xji xji yi ; 1 i m ; B B C .aq ajp /epT ; (sólo B B [ fqgnfjp g ; (sólo Nl Nl [ fjp gnfqg ; (sólo Nu Nu [ fjp gnfqg ; (sólo jp q; (sólo si si si si si 6D uq 6D uq 6D uq 6D uq 6D uq lq ) lq ) lq y q 2 Nl ) lq y q 2 Nu ) lq ). 104/133 function [fobj niters x] = Rsimplex_1(file,A,b,c,lb,ub); % Resuelve min c’x st Ax=b, lb<=x<=ub con Simplex revisado en dos FASES if nargin>2 if nargin<4, error(’Si no se lee de fichero, se requieren al menos’,... ’ cuatro argumentos en entrada’); end if nargin<6, ub = Inf*ones(size(c)); end if nargin<5, lb = zeros(size(c)); end A = sparse(A); else % Lectura de los datos desde fichero ’file’ en MPS eval([’!copy ’ file ’ d:\Matlab2010b\work\tmp\in.mps’]); LIPSO = ’d:\Matlab2010b\work’; exit=mps2mat(LIPSO); fprintf(’\n’); load d:\Matlab2010b\work\tmp\default; lb=lbounds; ub=ubounds; end [m n] = size(A); zer_tol = 1.0e-5; piv_tol = 1.0e-8; niters=0; t=cputime; f=fopen(’Salida_Rsimplex’,’w’); fprintf(f,’ It. Fase Sinf/Fobj Nopt\n’); fprintf(f,’----------------------------------\n’); % FASE I v = zeros(n,1); lbdd = find(lb>-Inf); v(lbdd) = lb(lbdd); free = setdiff(1:n,lbdd); ubdd = free(ub(free)<Inf); v(ubdd) = ub(ubdd); if isempty(ubdd), N = -lbdd’; % Var no en la base: en cota inf. No hay en u else N = [-lbdd’ ubdd]; free = setdiff(free,ubdd); end; f = length(free); if f>0 % ¡OJO! Hay variables libres [L U P Q] = lu(A(:,free)); % Q es matriz de permutación free = free*Q’; i = length(find(abs(diag(U))>piv_tol)); j = free(i+1:f); if ~isempty(j) N = [N j]; free = setdiff(free,j); f = length(free); lb(j) = zeros(size(j)); ub(j) = zeros(size(j)); end; [k i] = find(P(1:f,:)); % relies on diag(U) having zeros at end v(free) = U(1:f,1:f)\(L(1:f,1:f)\(P(1:f,:)*(b - A*v))); k = setdiff(1:m,k); m = m-f; B = [free n+1:n+m]; A = [A sparse(k,1:m,sign(b(k)-A(k,:)*v+eps),m+f,m)]; else % No hay variables libres B = n+1:n+m; j = []; A = [A sparse(1:m,1:m,sign(b-A*v+eps*ones(size(b))))]; end lb = [lb; zeros(m,1)]; ub = [ub; Inf*ones(m,1)]; w = [zeros(n,1); ones(m,1)]; % Variables + artificiales para FASE I [x niters B N L U] = rsmbdd(A,b,w,lb,ub,B,N,1,niters); % FASE I if w’*x>zer_tol, error(’El problema no es factible’); end % Adaptar para FASE II ub(n+1:n+m) = zeros(m,1); c = [c; zeros(m,1)]; if ~isempty(j) c_r = c(j)’-c(B)’*(U\(L\A(:,j))); if norm(c_r,inf)>zer_tol, error(’Problema no acotado’); end end [x niters] = rsmbdd(A,b,c,lb,ub,B,N,2,niters); % FASE II x = x(1:n); fobj=c(1:n)’*x; fclose(’all’); fprintf(’[m n]=[%g %g]. Tiempo CPU:%10.4f; fun. obj.=%17.4e\n’,m,n,cputime-t,fobj); function [x niters B N L U] = rsmbdd(A,b,c,lb,ub,B,N,fase,niters) % Rutina de Símplex revisado para min c’x s.a Ax=b, lb<=x<=ub. % B vector 1xm con los índices de las variables (columnas) en la base. % N vector 1x(l-m) con los índices de las variables no básicas, % es decir, en sus límites (+/-1). [m l] = size(A); f=fopen(’Salida_Rsimplex’,’a’); zer_tol = 1.0e-5; piv_tol = 1.0e-8; [L U] = lu(A(:,B)); if any(abs(diag(U))<piv_tol), error(’La base inicial no es invertible’); end x = lb; upper = N(N>0); x(upper) = ub(upper); x(B) = U\(L\(b-A(:,abs(N))*x(abs(N)))); while 1 if any(x(B)<lb(B)-zer_tol | x(B)>ub(B)+zer_tol), error(’Punto no factible’); end u = L’\(U’\c(B)); c_r = c(abs(N))’-u’*A(:,abs(N)); % Costes reducidos no básicas if ~any(c_r.*N>zer_tol), return, end % SE HA LLEGADO A UNA SOLUCIÓN Nopt=sum(c_r.*N>zer_tol); [min_red_cost s] = max(c_r.*sign(N)); % Entra var. s no básica con>coste reducido blk = abs(N(s)); min_ratio = ub(blk) - lb(blk); order = -sign(N(s)); % Puede s ir de u a l o l a u d = order*U\(L\A(:,blk)); block_lb = find(d>=piv_tol & lb(B)>-1e32); % Comprobar básica que llega a lb if ~isempty(block_lb) [min_lb index_r] = min((x(B(block_lb))-lb(B(block_lb)))./d(block_lb)); if min_lb<min_ratio r=block_lb(index_r); min_ratio = min_lb; blk = B(r); end end block_ub = find(d<=-piv_tol & ub(B)<1e32); % Comprobar básica que llega a ub if ~isempty(block_ub) [min_ub,index_r] = min((x(B(block_ub))-ub(B(block_ub)))./d(block_ub)); if min_ub<min_ratio r=block_ub(index_r); min_ratio = min_ub; blk = B(r); end end if min_ratio>1e32, error(’Problema no acotado’); end % Readaptar solución y datos x(B) = x(B)-min_ratio*d; x(abs(N(s))) = x(abs(N(s))) + order*min_ratio; if blk == abs(N(s)), N(s) = -N(s); % Se bloquea la no básica else swap = B(r); B(r) = abs(N(s)); N(s) = -sign(d(r))*swap; [L U] = lu(A(:,B)); end niters=niters+1; fprintf(f,’%5d%4d%18.9e%6d\n’,niters,fase,c’*x,Nopt); end 105/133 Ejemplo Resolvamos min. 2x1 s. a x3 2x1 C x2 C x3 10 x1 C x2 x3 4 0 x1 4 0 x2 6 1 x3 4: Se introducen las variables de holgura: min. 2x1 s. a 4x2 4x2 x3 2x1 C x2 C x3 C x4 D 10 x1 C x2 x3 C x5 D 4 0 x1 4 0 x2 6 1 x3 4 x4; x5 0: Como es inmediato obtener una solución factible y una base de partida, entramos directamente en la fase II del método Símplex. 106/133 107/133 Partiremos de: 10 B D Œa4; a5 D ; Nl D Œa1; a2; a3 ; Nu D ; 01 y de la solución inicial x D Œ0; 0; 1; 9; 5T . La función objetivo en este punto es 1. Iteración 1. Paso 1 Calculemos los multiplicadores símplex: 10 0 0 D B T cB D D : 01 0 0 108/133 Los costes reducidos de las variables no básicas son: 2 cN1 D c1 T a1 D 2 Œ0; 0 D 2; 1 1 cN2 D c2 T a2 D 4 Œ0; 0 D 4 y 1 1 cN3 D c3 T a3 D 1 Œ0; 0 D 1: 1 Todavía no se ha llegado al óptimo del problema pues las variables x1, x2 y x3 están en sus límites inferiores y sus costes reducidos son negativos. Iteración 1. Paso 2 Se elige la variable x2 para entrar en la base por ser la no básica de coste reducido más negativo. 109/133 Se resuelve By D a2: 10 1 1 y D B 1 a2 D D : 01 1 1 Iteración 1. Paso 3 La variable a salir de la base de determinará de calcular el incremento : ) ( D mKın 1 D mKın u2 xB1 l2 D 6 y1 0 lB1 xB2 ; lB2 y2 D 9 1 0 5 ; 0 1 D 5: Saldrá, por tanto, la variable de número de índice 2 en la base, x5, pues es la que antes llega a su límite inferior. 110/133 Iteración 1. Paso 4 Readaptemos la solución y las estructuras de datos: x2 x4 x5 l2 C D 0 C 5 D 5 x4 y1 D 9 5 1 D 4 x5 y2 D 5 5 1 D 0: La nueva solución es x D Œ0; 5; 1; 4; 0T , con 11 B D Œa4; a2 D ; Nl D Œa1; a3; a5 y Nu D ;: 01 La nueva función objetivo es 21. Iteración 2. Paso 1 111/133 Calculemos los multiplicadores símplex: 1 0 0 10 0 10 D D : D B T cB D 11 4 11 4 4 Los costes reducidos de las variables no básicas son: 2 cN1 D c1 T a1 D 2 Œ0; 4 D 2; 1 1 cN3 D c3 T a3 D 1 Œ0; 4 D 5 1 0 cN5 D c5 T a5 D 0 Œ0; 4 D 4: 1 y Como la variable x3 está en su límite inferior y su coste reducido es negativo, todavía no se ha llegado al óptimo. Iteración 2. Paso 2 Se elige la variable x3 para entrar en la base. Se resuelve By D a3: 1 1 1 2 y D B 1 a3 D D : 0 1 1 1 Iteración 2. Paso 3 La variable a salir de la base de determinará de calcular : 8 nx l o ˚ 9 B B ˆ 1 D mKın 1y1 1 D 4 2 0 > > ˆ > ˆ > ˆ < nx u o ˚ = D 1: D mKın 2 D mKın B2 B2 D 5 6 y 1 > ˆ 2 > ˆ > ˆ > ˆ ; : u3 l3 D 4 1 Saldrá, por tanto, la variable de número de índice 2 en la base, x2, pues es la que antes llega a uno de sus límites: el superior. 112/133 113/133 Iteración 2. Paso 4 Readaptemos la solución y las estructuras de datos: x3 x4 x2 l3 C D 1 C 1 D 2 x4 y1 D 4 1 2 D 2 x2 y2 D 5 C 1 1 D 6: La nueva solución es x D Œ0; 6; 2; 2; 0T , con 1 1 B D Œa4; a3 D ; Nl D Œa1; a5 y Nu D Œa2: 0 1 La nueva función objetivo es 26. 114/133 Iteración 3. Paso 1 Calculemos los multiplicadores símplex: 1 1 0 0 1 0 0 0 D B T cB D D D : 1 1 1 1 1 1 1 Los costes reducidos de las variables no básicas son: 2 cN1 D c1 T a1 D 2 Œ0; 1 D 3; 1 1 cN2 D c2 T a2 D 4 Œ0; 1 D 5 1 0 cN5 D c5 T a5 D 0 Œ0; 1 D 1: 1 y Como las variables x1 y x5, que están en sus límites inferiores, tienen costes reducidos negativos, todavía no se ha llegado al óptimo del problema. Iteración 3. Paso 2 Se elige la variable x1 para entrar en la base. Se resuelve By D a1: 1 1 1 2 1 1 2 3 y D B 1 a1 D D D : 0 1 1 0 1 1 1 Iteración 3. Paso 3 La variable a salir de la base de determinará de calcular : 8 nx l o ˚ 9 B1 B1 ˆ D mK ı n D 230 > > ˆ 1 y > ˆ 1 ˆ > < nx u o ˚ = 2 D : D mKın 2 D mKın B2 B2 D 2 4 y 1 > ˆ 3 2 ˆ > > ˆ > ˆ ; : u1 l 1 D 4 0 Saldrá x4 pues es la que antes llega a uno de sus límites: el inferior. 115/133 116/133 Iteración 3. Paso 4 Readaptemos la solución y las estructuras de datos: x1 x4 x3 La nueva solución es: l1 C D 0 C 2=3 D 2=3 x4 y1 D 2 .2=3/ 3 D 0 x3 y2 D 2 C .2=3/ 1 D 8=3: 2 3 2 3 x1 2=3 6x27 6 6 7 6 7 6 7 6x37 D 68=37 : 4x45 4 0 5 x5 0 117/133 También, 2 1 B D Œa1; a3 D ; Nl D Œa4; a5 y Nu D Œa2: 1 1 La nueva función objetivo es 28. Iteración 4. Paso 1 Calculemos los nuevos multiplicadores símplex: 1 2 1 2 1=3 1=3 2 1 D B T cB D D D : 1 1 1 1=3 2=3 1 0 118/133 Los costes reducidos de las variables no básicas son: 1 cN2 D c2 T a2 D 4 Œ 1; 0 D 3; 1 1 cN4 D c4 T a4 D 0 Œ 1; 0 D1 y 0 0 D 0: cN5 D c5 T a5 D 0 Œ 1; 0 1 Los costes reducidos de las variables no básicas en sus límites inferiores, x4 y x5, son 1 y 0, y el de la variable en su límite superior, x2, es -3. Se ha llegado, por tanto, a un óptimo del problema, aunque no es el único. 119/133 En efecto, si se incrementa x5, manteniendo x2 D 6 y x4 D 0 fijos, las variables x1 y x3 se modificarán de la forma: x1 2=3 1=3 D B 1 b B 1 a5 x 5 D x: x3 8=3 2=3 5 Para cualquier x5 < 2, la solución 2 3 2 3 x1 2=3 1=3x5 7 6x27 6 6 6 7 6 7 6x37 D 68=3 C 2=3x57 5 4x45 4 0 x5 0 es óptima. El valor de la función objetivo óptimo es 28. u 120/133 Con el programa Rsimplex_1 presentado antes, se consigue esto: >> >> >> >> >> A=[2 1 1;1 1 -1]; b=[10;4]; c=[-2 -4 -1]; l=[0 0 1]; u=[4 6 4]; >> [fobj niters x]=Rsimplex_1([],A,b,c,l,u) [m n]=[2 3]. Tiempo CPU: 0.0312; fun. obj.= fobj = -28 niters = 4 x = 0.666666666666667 6.000000000000000 2.666666666666667 -2.8000e+001 Para otro ejemplo mucho más grande: » [fobj niters]=Rsimplex_1(’etam-mi.mps’) 1 archivo(s) copiado(s). NAME done ROWS done COLUMNS done RHS done RANGES done BOUNDS done reading done mps2mat doneStatus=0 [m n]=[400 816]. Tiempo CPU: 3.0888; fun. obj.= -7.5572e002+ fobj = -7.557152331775660e+002 niters = 2009 Implementaciones “comerciales” del Símplex 121/133 Forma de “tableau” z z 1 xB 0 xB 0 I cNT xN cBT B 1 N TD cBT B 1 b El tableaux es así: B 1N B 1b Si TD designa Término de la Derecha y T es una matriz cuyos coeficientes son los del tableau, en realidad éste representa el sistema 3 2 z 7 6 6 xB 7 T6 7 D 0; 4 xN 5 TD de m C 1 ecuaciones lineales y n C 1 variables: las n de x y z. Esta es una de las primeras formas en que se explicitó computacionalmente el método Símplex, con vistas a su mejor comprensión. Se diferencia de lo expuesto en que el cálculo de y cNN del Paso 1, y el de y del Paso 2 se eliminan y el Paso 4 de pivotación se lleva a cabo directamente en el tableau. Si suponemos que las variables básicas que entran y salen de la base en una determinada iteración son la q y la p, y que las filas y las columnas del tableau de esa iteración están numeradas partiendo de cero, la operación de pivotación conlleva: 122/133 i) dividir la fila p de T por tpq , el coeficiente que ocupa la fila p y la columna q de la matriz T , y ii) para 0 i m, i ¤ p, restar de la fila i la p multiplicada por tiq a fin de hacer cero el elemento q de esa fila. Los costes reducidos, cNN , y el vector de variables básicas, B 1b, se obtienen directamente del tableau. Ejemplo Resolvamos: min. x1 C x2 s. a x1 C x2 C 2x3 9 x1 C x2 x3 2 x1 C x2 C x3 4 x1 ; x2 ; x3 0: 123/133 4x3 Iteración 1 z x4 x5 x6 con variables de holgura z 1 0 0 0 x1 1 1 1 1 x2 1 1 1 1 x3 4 2 1 ¬ min. x1 C x2 s. a x1 C x2 C 2x3 C x4 D9 x1 C x2 x3 C x5 D2 x1 C x2 C x3 C x6 D 4 x1 ; x2 ; x3 ; x4 ; x5 ; x6 0: x4 0 1 0 0 x5 0 0 1 0 4x3 x6 0 0 0 1 TD 0 9 2 4 La variable que entra en la base es la no básica cuyo coste reducido es más negativo: x3. El ¬ indica que de entre las relaciones posibles, 9/2 y 4/1, (la otra afecta a un número negativo) se elige esta última, por lo que saldrá de la base aquella variable que pivota en la tercera fila: x6. Iteración 2 124/133 z x4 x5 x3 z 1 0 0 0 x1 3 ® 0 1 x2 5 1 2 1 x3 0 0 0 1 x4 0 1 0 0 x5 0 0 1 0 x6 4 2 1 1 TD z 1 0 0 0 x1 0 1 0 0 x2 4 x3 0 0 0 1 x4 1 x5 0 0 1 0 x6 2 TD 2 3 1 3 16 1 6 4 Iteración 3 z x1 x5 x3 1 3 2 2 3 1 3 0 1 3 17 1 6 1 3 13 3 Se ha llegado a un punto en el que todos los costes reducidos de las variables no básicas son positivos por lo que se ha conseguido el óptimo del problema. La solución final es por tanto Œx1; x2; x3; x4; x5; x6T D Œ1=3; 0; 13=3; 0; 6; 0T : El valor de la función objetivo es z D 17. 125/133 z x1 x2 x3 1 0 4 1 3 x1 0 1 x5 0 0 2 0 2 3 x3 z 0 La base óptima la constituyen los 2 10 B D Œa1; a5; a3 D 4 1 1 10 x6 TD 0 2 17 0 2 3 1 3 x4 x5 0 1 0 1 3 0 0 1 1 6 1 1 3 0 1 3 13 3 vectores columna a1, a5 y a3. Es decir, 3 min. x C x 4x 2 s. a x C x C 2x C x D 9 x C x x C x D 2 15 x C x C x C x D 4 x ; x ; x ; x ; x ; x 0: 1 1 2 3 1 2 3 1 2 3 1 2 3 1 4 5 6 2 3 4 5 6 La inversa de B es la submatriz que en el tableau final ocupa el lugar que en el inicial ocupaba la submatriz identidad; es decir, 2 3 1=3 0 2=3 B 1 D 4 0 1 1 5: 1=3 0 1=3 126/133 Otras variantes y mejoras del Símplex Implementación de la inversa de la base en forma de productos matriciales En problemas grandes, resolver los sistemas B T D cB y By D aq es costoso. La modificación de B 1 en una iteración es BN donde 2 E DI .y ep /epT yp 6 6 6 6 D6 6 6 6 4 1 1 D E B 1; 3 y1 =yp :: ::: 7 : 7 7 1 yp 1 =yp 7 7 y y D B 1 aq : 1=yp 7 7 ypC1 =yp 1 7 :: ::: 5 : ym =yp 1 " columna p 127/133 Si el Símplex se inicia con una matriz B igual a la identidad, después de k iteraciones la matriz B 1 se puede expresar en una forma producto, de la siguiente manera Bk 1 D E k E k 1 E 1 B 1 : Para implementar este esquema operativo se requiere almacenar los valores de los coeficientes de la columna de la matriz E i que la hace diferente de la matriz identidad, y el propio valor del índice i . Para evitar errores de redondeo, conforme avanza el proceso es aconsejable refactorizar periódicamente la matriz B 1. La variante del Símplex que incluye esta forma de actuar es la que sigue. 128/133 Paso 1 – Operación BTRAN (backward transformation). Calcular los multiplicadores símplex a partir de T T D cB B 1 D T cB Ek Ek 1 E1 : Determinar los costes reducidos de las variables no básicas a partir de cNj D cj T aj ; para todo j 2 N: Si cNj 0 para todo j … B, PARAR; la solución es óptima. Paso 2 – Operación FTRAN (forward transformation). Escoger q 2 N tal que cNq D mKınj 2N fcNj < 0g. Calcular yDB 1 aq D .E k .E k 1 .E 1 aq ///: Si y 0, PARAR; el problema es no acotado. Paso 3 – Operación CHUZR. Si xj D B 1 b, establecer la variable básica xjp que sale de la base determinando la fila p sobre la que pivota la columna q a partir de la relación xjp xji D mKın W yi > 0 : yp 1i m yi Paso 4 – Operación WRETA. Adaptar la matriz inversa de la base y la solución a partir de E kC1 La nueva inversa de la base será B 1 2 1 6 : :: 6 6 6 1 6 D6 6 6 6 6 4 3 y1 =yp 7 :: 7 : 7 7 yp 1 =yp 7 7: 1=yp 7 7 ypC1 =yp 1 7 7 :: :: 5 : : ym =yp 1 E kC1 E k E 2 E 1 y la nueva solución xj E kC1 xj . 129/133 Implementación de la base y su inversa mediante factorización LU La idea es factorizar la matriz básica en la forma LU e ir aplicándole a ella una sucesión de matrices elementales —que difieren de la identidad en un solo elemento debajo de la diagonal principal— y matrices de permutación. Si, por ejemplo, 2 3 321 U D 4 3 55 ; 4 las matrices U 1, U 2 y U 3 serán 2 3 12 U1 D 4 1 5;U2 D 4 3 5 1 1 3 3 2 Es fácil comprobar que U D U 3U 2U 1. 2 3 1 y U 3 D 4 1 55 : 4 1 130/133 Después de k iteraciones se tendrá que Bk D B0 E 1 1 E 2 1 E k 1 I es decir, que L m P m L 1 P 1 Bk D U m U m 1 U 1E 1 1 E 2 1 E k 1: Para almacenar las matrices E i , Lj y U j en la memoria del ordenador sólo es necesario guardar el valor de los subíndices y los elementos distintos de cero de las columnas que designan esos subíndices. De las matrices de permutación P i sólo es necesario guardar un puntero que indique con qué fila se intercambia la i . 131/133 Complejidad computacional del Símplex Cada iteración requiere alrededor de m.n m/ C .m C 1/2 multiplicaciones y m.n C 1/ sumas o restas: O.mn/ en los dos casos pues n m.. El número de puntos extremos de un programa lineal en forma estándar con n variables y m condiciones es C.n; m/. Si n 2m, se tiene que n m nŠ 2m : C.n; m/ D mŠ.n m/Š m De acuerdo con esto, en el peor de los casos, parece lógico temerse un número de iteraciones exponencial. Un problema clásico es el estudiado por Klee y Minty [1972]: maximizar xn s. a 0 x1 1 ıxi 1 xi 1 xi 0; 132/133 i D 2; : : : ; n; 0 < ı < 1=2; i D 1; 2; : : : ; n: ıxi 1; Tiene 2n puntos extremos. Para n D 2 y n D 3 es el de la figura. Comenzando en x D 0 (factible), con precisión absoluta, el método recorrería los 2n puntos extremos. x2 x(3) = x2 0 1 x(2) = x(1) = x(0) 1 1−δ x(6) x(5) x(4) x3 x1 x(7) x(3) 1 δ x(2) x(1) x(0) x1 La práctica de los últimos cincuenta años ha permitido constatar que los casos extremos, como el ejemplo de Klee y Minty, rara vez ocurren en la realidad. Grosso modo, en problemas de tamaño moderado, el método Símplex requiere un número de iteraciones real comprendido entre 4m y 6m. En problemas muy grandes, el número de iteraciones que cabe esperar llevar a cabo para resolverlos es ˛ m, donde e ˛ < log2.2 C n=m/. En resumen, la complejidad computacional práctica esperada del método Símplex es del O.m2n/. 133/133 Teniendo también en cuenta el efecto que el tratamiento de la dispersidad de los problemas puede acarrear en la complejidad del método, diversos estudios han establecido que la complejidad del método la define la ecuación Km˛ nd 0;33 , donde K es una constante, 1;25 < ˛ < 2;5 y d es el número de elementos distintos de cero en la matriz A, dividido por nm.