Tema 3 Optimización lineal. Algoritmo del simplex José R. Berrendero Departamento de Matemáticas Universidad Autónoma de Madrid Contenidos del tema 3 I Teorema fundamental de la programación lineal. I Algoritmo del simplex. I Ejemplos. I La tabla del simplex. Pivoteo. I Método de las dos fases. I Optimización lineal con R Teorema fundamental de la programación lineal Por el teorema de representación, el problema lineal: minimizar s.a. c >x Ax = b x ≥0 es equivalente a: minimizar s.a. hP i P` k c> λ x + µ d i=1 i i j=1 j j Pk i=1 λi = 1 λi ≥ 0, i = 1, . . . , k µj ≥ 0, j = 1, . . . , `, donde x1 , . . . , xk son los puntos extremos del conjunto factible y d1 , . . . , d` son sus direcciones extremas. Teorema fundamental de la programación lineal Teorema: Consideremos un problema de optimización lineal en forma estándar. Sean x1 , . . . , xk los puntos extremos del conjunto factible y sean d1 , . . . , d` sus direcciones extremas. El problema tiene solución factible óptima si y solo si c > dj ≥ 0, para todo j = 1, . . . , `. Si esta condición se cumple, existe un punto extremo que es solución factible óptima del problema. I Interpretación de la condición de existencia de solución. I ¿Puede haber exactamente dos soluciones factibles óptimas? I Para resolver un problema lineal se podrı́a comprobar que tiene solución, evaluar c > xi para todos los puntos extremos y elegir el mejor de ellos. En la práctica este método no es útil porque el número de puntos extremos puede ser muy grande. El algoritmo del simplex I Es un método sistemático para pasar de un punto extremo a otro de manera que siempre mejore el objetivo. I En cada paso se puede detectar si ya hemos llegado al óptimo o aún tenemos que pasar a otro punto extremo. También se puede detectar si el problema no tiene solución óptima. I Pasar de un punto extremo a otro corresponde a cambiar la base B por una base nueva B̂. I En el simplex ambas bases difieren en un único vector de modo que las operaciones del cambio de base son relativamente sencillas. El algoritmo del simplex I Solución factible básica inicial: > x̄ = (x1 , . . . , xm , 0, . . . , 0) = (x̄B> , x̄N> )> −1 B b b̄ = := . 0 0 I b̄ es el vector de coordenadas de b respecto a la base B. I Valor objetivo inicial: z̄ = cB> B −1 b = cB> b̄. I Valor objetivo en cualquier otro punto factible x = (xB> , xN> )> : z = cB> (b̄ − B −1 NxN ) + cN> xN = z̄ − (cB> B −1 N − cN> )xN X = z̄ − (zj − cj )xj , j∈N donde zj = cB> B −1 aj := cB> yj . I yj = B −1 aj ⇔ aj = y1j a1 + · · · + ymj am , es decir, yj es el vector de coordenadas de la columna no básica aj respecto a la base B. El algoritmo del simplex z = z̄ − X (zj − cj )xj . j∈N I ¿Qué ocurre si zj − cj ≤ 0, para todo j ∈ N? I Supongamos que existe k ∈ N con zk − ck > 0. I Vamos a pasar de x̄ a una nueva solución factible básica: (r ) (k) x̂ = (x̂1 , . . . , 0 , . . . , x̂m , 0, . . . , α , . . . , 0)> , I El nuevo valor objetivo es: ẑ = z̄ − (zk − ck )α. α > 0. El algoritmo del simplex I Criterio de entrada: Entra a la base la variable k tal que zk − ck = max{zj − cj : zj − cj > 0}. j∈N I Hay que aumentar α tanto como sea posible sin salirnos del conjunto factible: Ax̂ = b es equivalente a −yk x̂ = x̄ + α , donde yk = B −1 ak . ek I ¿Qué ocurre si yk ≤ 0? I Supongamos que yk 0. El algoritmo del simplex I Para que x̂ sea factible también hace falta x̂ ≥ 0: x̂B ≥ 0 ⇔ b̄ − αyk ≥ 0 ⇔ α ≤ b̄i , yik para todo i = 1, . . . , m tal que yik > 0. I El mayor valor posible de α es: b̄i b̄r α = min : yik > 0 := yik yrk I Criterio de salida: sale de la base la variable r en la que se alcanza el mı́nimo anterior. Ejemplo maximizar s.a. 3x1 + x2 + 2x3 2x1 + x2 + x3 x1 + 2x2 + 3x3 2x1 + 2x2 + x3 x1 ≥ 0, x2 ≥ 0, x3 ≤2 ≤5 ≤6 ≥0 Pasamos primero a la forma estándar: minimizar s.a. −3x1 − x2 − 2x3 2x1 + x2 + x3 + x4 = 2 x1 + 2x2 + 3x3 + x5 = 5 2x1 + 2x2 + x3 + x6 = 6 xi ≥ 0, i = 1, . . . , 6. Ejemplo Solución factible básica inicial: x̄ = (0, 0, 0, 2, 5, 6)> , para la que el objetivo es z̄ = 0. I Escribe los valores de: B, b̄, cB , yj y zj − cj , para todo j ∈ N. I ¿Es x̄ la solución factible óptima del problema? I ¿Qué variable k entra en la base? ¿Qué yk le corresponde? I ¿Qué variable r sale de la base? Pivoteo Necesitamos expresar los vectores aj y b respecto a la nueva base B̂ = {a1 , a5 , a6 }. A esta operación se le llama pivoteo. El pivote es el coeficiente yrk correspondiente a la fila de la variable que sale y la columna de la que entra. ¿Cuál es el pivote en el ejemplo? 2x1 + x2 + x3 + x4 = 2 x1 + 2x2 + 3x3 + x5 = 5 2x1 + 2x2 + x3 + x6 = 6 Pivoteo 2x1 + x2 + x3 + x4 = 2 x1 + 2x2 + 3x3 + x5 = 5 2x1 + 2x2 + x3 + x6 = 6 I I La fila r se divide por el pivote para que el coeficiente de xk sea 1. Al resto de filas se les resta la fila r multiplicada por el valor adecuado para que xk ya no aparezca en esa fila. x1 + x2 /2 + x3 /2 + x4 /2 = 1 3x2 /2 + 5x3 /2 − x4 /2 + x5 = 4 Ejemplo Solución factible básica actual: x̂ = (1, 0, 0, 0, 4, 4)> , para la que el objetivo es ẑ = −3. I Escribe los valores de: cB , yj y zj − cj , para todo j ∈ N. I ¿Es x̄ la solución factible óptima del problema? I ¿Qué variable k entra en la base? ¿Qué yk le corresponde? I ¿Qué variable r sale de la base? Convergencia Si en cada paso encontramos b̄ = B −1 b > 0, entonces x̄ y x̂ son puntos extremos distintos. Como hay un número finito de puntos extremos, el algoritmo converge en un número finito de iteraciones. Si en algún paso b̄r = 0, entonces α = 0. Cambia la base, pero el punto extremo es el mismo. Esto podrı́a ocurrir infinitas veces y entonces el algoritmo del simplex no converge (se dice que ha ocurrido un ciclo). Hay criterios de entrada y salida para evitar los ciclos: regla de Bland Tabla simplex Los elementos para efectuar cada iteración se suelen disponer ordenadamente en forma de tabla: c cB> cN> Variables xB> xN> xB = b̄ Im×m B −1 N z −c 0 cB> B −1 N − cN> I Las columnas corresponden a variables básicas y no básicas. I Las filas corresponden a las variables básicas. Ejemplo minimizar s.a. −4x1 − 3x2 −x1 + x2 + x3 = 2 x1 + 2x2 + x4 = 6 2x1 + x2 + x5 = 6 xi ≥ 0, i = 1, . . . , 5. Tabla inicial: B = (a3 , a4 , a5 ) = I3×3 c -4 -3 0 0 0 Variables x1 x2 x3 x4 x5 x3 = 2 x4 = 6 x5 = 6 -1 1 2 1 2 1 1 0 0 0 1 0 0 0 1 zj − cj 4 3 0 0 0 Aplica los criterios de entrada y salida a la base. Ejemplo (primera iteración) c -4 -3 0 0 0 Variables x1 x2 x3 x4 x5 x3 = 2 x4 = 6 x5 = 6 -1 1 2 1 2 1 1 0 0 0 1 0 0 0 1 zj − cj 4 3 0 0 0 c -4 -3 0 0 0 Variables x1 x2 x3 x4 x5 x3 = 5 x4 = 3 x1 = 3 0 0 1 3/2 3/2 1/2 1 0 0 0 1 0 1/2 -1/2 1/2 zj − cj 0 1 0 0 -2 Ejemplo (segunda iteración) c -4 -3 0 0 0 Variables x1 x2 x3 x4 x5 x3 = 5 x4 = 3 x1 = 3 0 0 1 3/2 3/2 1/2 1 0 0 0 1 0 1/2 -1/2 1/2 zj − cj 0 1 0 0 -2 c -4 -3 0 0 0 Variables x1 x2 x3 x4 x5 x3 = 2 x2 = 2 x1 = 2 0 0 1 0 1 0 1 0 0 -1 2/3 -1/3 1 -1/3 2/3 zj − cj 0 0 0 -2/3 -5/3 La solución factible óptima es (2, 2, 2, 0, 0)> y el valor objetivo Actualización de la tabla Columna de la izquierda x̂i = b̄i − αyik = b̄i − x̂k = α = b̄r yik yrk b̄r . yrk Valores yij ak = y1k a1 + · · · + yrk ar + · · · + ymk am y1k 1 ymk ar = − a1 − · · · + ak − · · · − am yrk yrk yrk yrj y1k ymk aj = y1j − yrj a1 + · · · + ak + · · · + ymj − yrj am yrk yrk yrk Actualización de la tabla Valores yij ŷij = yij − ŷrj = yrj yik , si i 6= r , yrk yrj yrk Última fila: ẑj − ĉj = = m X r 6=i=1 m X ci ŷij + ck ŷrj − cj = ci yij − cj − i=1 m X ci i=1 yrj yrk m X i=1 ci yik + ck yrj yij − yik yrk + ck yrj − cj yrk yrj yrj = (zj − cj ) − (zk − ck ) yrk yrk Actualización de la tabla En resumen: I La fila del pivote (fila r ) se divide por el pivote (yrk ). Ası́ se consigue que ŷrk = 1. I A la fila i se les resta la fila r actualizada y multiplicada por yik . Ası́ se consigue que ŷik = 0. I A la última fila se le resta la fila r actualizada y multiplicada por zk − ck . Ası́ se consigue que ẑk − ĉk = 0 Método de las dos fases Es un método útil para: I Encontrar una solución factible básica inicial. I Detectar si el conjunto factible es vacı́o. I Detectar si hay restricciones redundantes. Fase 1: Se introducen variables artificiales y se minimiza su suma. Fase 2: Si la suma óptima no es cero entonces el problema original no es factible. En caso contrario las variables artificiales habrán abandonado la base y dispondremos de una base inicial de variables legı́timas. Fase 1 Si e = (1, . . . , 1)> , se resuelve el problema: minimizar s.a. e >x a Ax + Ix a = b x ≥ 0, x a ≥ 0 I Variables artificiales son diferentes a variables de holgura. I Este problema tiene una solución factible básica obvia en la que las variables básicas son las artificiales. I Sea (x̄, x̄ a ) el óptimo al final de la fase 1. Fase 2 Caso 1: x̄ a 6= 0, el problema original no es factible (¿por qué?). Caso 2: x̄ a = 0, pueden ocurrir a su vez dos casos I Ninguna variable artificial es básica. En este caso se eliminan de la tabla las columnas de las variables artificiales. Se calculan los valores zj − cj y se continúa como en el método simplex habitual. I Hay alguna variable artificial en la base al nivel 0 (degeneración). Se busca en la fila un pivote para poder sustituirla por una variable legı́tima. Se calculan los valores zj − cj y se continúa como en el método simplex habitual. Ejemplo Problema original: minimizar s.a. 4x1 + x2 + x3 2x1 + x2 + 2x3 = 4 3x1 + 3x2 + x3 = 3 x1 ≥ 0, x2 ≥ 0, x3 ≥ 0 Problema a resolver en la fase 1: minimizar s.a. x1a + x2a 2x1 + x2 + 2x3 + x1a = 4 3x1 + 3x2 + x3 + x2a = 3 xi ≥ 0, xia ≥ 0 Fase 1 0 c 0 0 1 1 x2a Variables x1 x2 x3 x1a x1a = 4 x2a = 3 2 3 1 3 2 1 1 0 0 1 zj − cj 5 4 3 0 0 0 1 1 x2a 0 c 0 Variables x1 x2 x3 x1a x1a = 2 x1 = 1 0 1 -1 1 4/3 1/3 1 0 -2/3 1/3 zj − cj 0 -1 4/3 0 -5/3 c 0 0 0 1 1 x2a -1/2 Variables x1 x2 x3 x1a x3 = 3/2 0 -3/4 1 3/4 Fase 2 I Partimos de la solución factible básica en la última tabla de la fase 1. I Se eliminan las variables artificiales. I Se actualizan la primera y la última fila de la tabla. c 4 1 1 Variables x1 x2 x3 x1 = 1/2 x3 = 3/2 1 0 5/4 -3/4 0 1 zj − cj 0 13/4 0 Para las variables básicas zj − cj = 0. Además, 5/4 z2 − c2 = (4, 1) − 1 = 13/4. −3/4 Fase 2 c 4 1 1 Variables x1 x2 x3 x2 = 2/5 x3 = 9/5 4/5 3/5 1 0 0 1 zj − cj -13/5 0 0 La solución factible óptima del problema viene dada por x̄1 = 0, x̄2 = 2/5 y x̄3 = 9/5 y el valor objetivo óptimo es z̄ = 11/5. Ejemplo Aplica el método de las dos fases para resolver: minimizar s.a. −x1 + 2x2 − 3x3 x1 + x2 + x3 = 6 −x1 + x2 + 2x3 = 4 2x2 + 3x3 = 10 x3 ≤ 2 xi ≥ 0