Pontificia Universidad Católica Escuela de Ingeniería Departamento de Ingeniería Industrial y de Sistemas Clase 20 • El Método Simplex ICS 1102 • Optimización Profesor : Claudio Seebach 16 de octubre de 2006 Apuntes de Clases • Optimización • Claudio Seebach Programación Lineal • 48 Pasos en el Método Simplex • El método Simplex está compuesto por tres pasos: Paso Inicial Paso Iterativo Prueba de Optimalidad No óptima Solución Óptima Fin Apuntes de Clases • Optimización • Claudio Seebach Programación Lineal • 49 Pasos en el Método Simplex • Los tres pasos son: 1. Paso inicial: Determinar una solución factible en un vértice. 2. Prueba de optimalidad: La solución factible en un vértice es óptima cuando ninguna de las soluciones en vértices adyacentes a ella sean mejores. 3. Paso iterativo: Traslado a una mejor solución factible en un vértice adyacente (repetir las veces que sea necesario). Apuntes de Clases • Optimización • Claudio Seebach Programación Lineal • 50 Ejercicio Simplex • Recordemos el ejemplo de las planchas de aluminio: P ) min −800x1 − 600x2 s.a 15x1 + 5x2 7x1 + 14x2 0, 3x1 + 0, 3x2 x 1 , x2 ≤ ≤ ≤ ≥ 600 630 15 0 • Introducir tres variables de holgura: P ) min −800x1 − 600x2 s.a. 15x1 + 5x2 + x3 7x1 + 14x2 + x4 0, 3x1 + 0, 3x2 + x5 x 1 , x2 x 3 , x4 , x 5 Apuntes de Clases • Optimización • Claudio Seebach = = = ≥ ≥ 600 (minutos disponibles) 630 (m2 de aluminio) 15 (lts de pintura) 0 0 Programación Lineal • 51 Ejercicio Simplex 1. Paso Inicial: Tipo 2 • Determinar una solución inicial factible. • Si todas las restricciones son desigualdades de menor o igual, todas las variables son no negativas y todos los recursos disponibles son no negativos, existe una solución factible trivial: – Asignar un valor cero a cada una de las variables originales. x1= x2=0 Tipo 1 Apuntes de Clases • Optimización • Claudio Seebach Programación Lineal • 52 Ejercicio Simplex • Las variables básicas son x3, x4, x5 y las no básicas son x1, x2. • En formato tableau: v.b. x1 x2 x3 x4 x5 15 5 1 0 0 600 x3 7 14 0 1 0 630 x4 0,3 0,3 0 0 1 15 x5 -800 -600 0 0 0 0 0 • Los coeficientes de la última fila se denominan costos reducidos • La casilla inferior derecha del tableau indica el inverso aditivo del valor de la función objetivo. Apuntes de Clases • Optimización • Claudio Seebach Programación Lineal • 53 Ejercicio Simplex 2. Prueba de Optimalidad: • Si el valor de Z puede mejorar (en este caso disminuir) al hacer que una de las variables no básicas crezca. • Esto se puede verificar observando la última fila del tableau (Z): si todos los valores son positivos o cero, estamos en el óptimo, de lo contrario regresamos al paso iterativo. • Tanto la variable x1 como x2 mejoran la función objetivo si aumentan en una unidad ya que sus coeficientes en la fila de la función objetivo son estrictamente negativos, por lo que nos convendrá que una de ellas (cualquiera) entre a la base. Apuntes de Clases • Optimización • Claudio Seebach Programación Lineal • 54 Ejercicio Simplex 3. Paso Iterativo: 3.1 Parte I: Determinar la variable no básica que entra a la base. • Tı́picamente se escoge la variable cuyo coeficiente en la función objetivo sea el más negativo. • Sin embargo podrı́a escogerse cualquier variable con costo reducido negativo y el método igual convergerı́a. • En nuestro ejemplo, la variable que más aporta a la función objetivo es x1, por lo que ésta será la variable entrante. Apuntes de Clases • Optimización • Claudio Seebach Programación Lineal • 55 Ejercicio Simplex 3.2 Parte II: Se determina la variable básica que sale de la base: • Se elige la variable básica que primero alcanza el valor cero cuando se incrementa la variable básica entrante. 630 15 • La variable saliente es x3, de min{ 600 15 , 7 , 0,3 } = 40. 3.3 Parte III: Se determina la nueva solución básica factible. x1 x2 x3 x4 x5 1 1 1 0 0 40 3 15 • El nuevo tableau es: −7 0 35 1 0 350 3 15 • El nuevo valor óptimo es -32.000 1 −1 0 3 5 50 0 1 1000 800 0 − 3 15 0 0 32.000 Apuntes de Clases • Optimización • Claudio Seebach Programación Lineal • 56 Tipo 2 Ejercicio Simplex µ2= -333.3 µ3= 53.3 x1= 40 x2= 0 Apuntes de Clases • Optimización • Claudio Seebach Tipo 1 Programación Lineal • 57 v.b. x1 x4 x5 Ejercicio Simplex • Aún existe una variable no básica cuyo costo reducido es negativo: x2. • Esta variable reduce en 1000 3 la función objetivo por cada unidad que aumente su valor, por lo que conviene que entre a la base. • ¿por qué una unidad extra del producto 2 agrega sólo $ 1000 3 a la función objetivo siendo que su utilidad era $600? • Dada la combinación actual de productos, y nula disponibilidad de recursos del tipo 1 (tiempo), cada unidad extra del producto 2 exige dejar de producir 13 de unidad del producto 1. La utilidad neta es $600 − 13 · $800, esto es $ 1000 3 . • La variable que sale de la base es x5: ! " 40 350 3 min 1 , 35 , 1 = {120, 30, 15} = 15 3 3 5 Apuntes de Clases • Optimización • Claudio Seebach Programación Lineal • 58 Ejercicio Simplex x4 x5 35 0 −5 3 1 −175 175 3 0 5 15 5000 0 3 37.000 v.b. x1 x4 x2 Tipo 2 • El tableau siguiente es: x1 x2 x3 1 1 0 10 7 0 0 10 0 1 −1 10 0 0 20 µ3= 20 µ5= 1666.6 x2= 15 x1= 35 Apuntes de Clases • Optimización • Claudio Seebach Tipo 1 Programación Lineal • 59 Ejercicio Simplex • Prueba de optimalidad: todos los costos reducidos no básicos son positivos, por lo que estamos en una solución óptima. • Por lo tanto, la solución obtenida es la siguiente: x1 x2 x3 x4 x5 = = = = = 35 15 0 (Restricción activa) 175 (Holgura de aluminio) 0 (Restricción activa) Y el valor óptimo es -$37.000 (este valor calza con lo que se esperaba: −32.000 − 15 ∗ 1000 3 ). Apuntes de Clases • Optimización • Claudio Seebach Programación Lineal • 60 Ejercicio Simplex • La optimalidad de esta solución es evidente si uno transforma este tableau en el problema de minimización correspondiente: 5000 x5 − 37.000 P ) min 20x3 + 3 1 5 s.a x1 + x3 − x5 = 35 10 3 7 175 x3 + x4 − x5 = 175 10 3 1 x2 − x3 + 5x5 = 15 10 x 1 , x2 ≥ 0 x 3 , x4 , x5 ≥ 0 • Dado que las variables deben ser no negativas, el valor óptimo no puede ser inferior a -$37.000. • Basta hacer x3 = x5 = 0 para obtener una solución factible que alcanza la cota mı́nima para el valor óptimo −37.000. Apuntes de Clases • Optimización • Claudio Seebach Programación Lineal • 61 Ejercicio Simplex • El tableau final entrega los multiplicadores asociados a cada uno de los recursos necesarios para producir planchas de aluminio. • µ1 y µ2 son los multiplicadores asociados a la no negatividad de las variables x1 y x2, mientras que µ3, µ4 y µ5 los multiplicadores asociados a las restricciones de minutos de trabajo, m2 de material y litros de pintura, respectivamente. • Los costos reducidos indican que si x3 aumenta en una unidad, la función objetivo empeora en $20. Es decir, µ3 = 20. • Análogamente, µ4 = 0 y µ5 = 1666, 6 lo que es consistente con nuestros resultados previos. Apuntes de Clases • Optimización • Claudio Seebach Programación Lineal • 62 Solución Básica Factible Inicial • El método Simplex requiere de una solución inicial factible básica (SIFB) para comenzar a iterar. • En cualquier problema de programación lineal en forma estándar con !b ≥ !0, es fácil identificar una SIFB: – Definir el conjunto de variables básicas como el conjunto de holguras de las restricciones: !xholguras = !b, y las demás variables originales (no básicas) iguales a cero. • Los problemas que tienen restricciones de igualdad o desigualdades ”≥”, tal que al asignar un valor cero a las variables originales del problema no se obtiene un punto factible del dominio. Apuntes de Clases • Optimización • Claudio Seebach Programación Lineal • 63 Solución Básica Factible Inicial • En el ejemplo del aluminio, supongamos ahora que estamos forzados a utilizar al menos 15 lts de pintura. • El problema en forma estándar serı́a entonces: min −800x1 − 600x2 s.a 15x1 + 5x2 + x3 7x1 + 14x2 + x4 0, 3x1 + 0, 3x2 − x5 xi = = = ≥ 600 630 15 0, i ∈ {1, 2, 3, 4, 5} en que x3 y x4 son variables de holgura y x5 es de exceso. Apuntes de Clases • Optimización • Claudio Seebach Programación Lineal • 64 Solución Básica Factible Inicial Tipo 2 • Como podemos ver, no el problema no posee una SIFB trivial: D (0,0) no es factible Apuntes de Clases • Optimización • Claudio Seebach Tipo 1 Programación Lineal • 65 Primera Fase • Solución: resolver el problema en dos fases: – En la primera fase se usa el Simplex para determinar una SIFB – En la segunda fase se usa el método Simplex a partir de la SIFB encontrada. • En la primera fase se procurará inventar una solución básica al problema que sea evidente: – Agregará una variable artificial yi no negativa en cada una de las restricciones que no cumpla con el formato estándar. – Esto genera inmediatamente una SBIF del nuevo problema. • Cualquier solución a este nuevo problema sólo será factible en el problema original si todas las variables artificiales son nulas. • Reemplazar, sólo durante la primera fase del algoritmo, la función objetivo del problema original por: # min yi i Apuntes de Clases • Optimización • Claudio Seebach Programación Lineal • 66 Primera Fase • Supongamos que el problema original es el siguiente: min c!x s.a. A1x A2x A3x x • El problema queda: min # yi ∈a2 yi + ≤ ≥ = ≥ # yi ∈a3 b1 b2 b3 0 yi s.a. A1x + h1 A2x − e2 + a2 A3x + a3 x, h1, e2, a2, a3 = = = ≥ b1 b2 b3 0 • La SIFB de este problema es evidente: h1, a2 y a3 como el conjunto de variables básicas. Apuntes de Clases • Optimización • Claudio Seebach Programación Lineal • 67 Primera Fase • Es posible aplicar Simplex directamente comenzando en dicha SIBF. • Se pueden dar dos casos: 1. En la solución óptima a este problema todos los elementos yi tanto de a2 como de a3 son nulos, entonces basta eliminar las variables artificiales del problema y utilizar la solución óptima como SIFB para el problema original. 2. La solución óptima contempla algún yi > 0 significa que no es posible encontrar una solución en que todos los yi sean nulos. Esto indica que el dominio del problema original no admite soluciones factibles, es decir, es vacı́o. Apuntes de Clases • Optimización • Claudio Seebach Programación Lineal • 68 Primera Fase • En una primera fase, nos interesa resolver el siguiente problema: min y3 s.a 15x1 + 5x2 + x3 7x1 + 14x2 + x4 0, 3x1 + 0, 3x2 − x5 + y3 xi y3 • Su tableau asociado es el siguiente: x1 x2 15 5 7 14 0, 3 0, 3 0 0 −800 −600 Apuntes de Clases • Optimización • Claudio Seebach x3 1 0 0 0 0 = = = ≥ ≥ x4 0 1 0 0 0 600 630 15 0, 0 x5 0 0 −1 0 0 y3 0 0 1 1 0 i ∈ {1, 2, 3, 4, 5} v.b. 600 x3 630 x4 15 y3 0 0 Programación Lineal • 69 Primera Fase • Es útil incluir una fila adicional en la parte inferior del tableau con la función objetivo original. Esto facilita la transición entre la Fase 1 y la Fase 2, en la que se vuelve a la función objetivo original. • La función objetivo de la Fase I está en la penúltima fila. • La SBIF corresponde a x3 = 600, x4 = 630, y3 = 15. Las demás variables (no básicas) son cero. • Hay que ajustar la función objetivo en el tableau para que contenga sólo ceros en las columnas asociadas a las variables básicas: x1 x2 x3 x4 x5 y3 v.b. 15 5 1 0 0 0 600 x3 7 14 0 1 0 0 630 x4 0, 3 0, 3 0 0 −1 1 15 y3 −0, 3 −0, 3 0 0 1 0 −15 −800 −600 0 0 0 0 0 Apuntes de Clases • Optimización • Claudio Seebach Programación Lineal • 70 Primera Fase • La solución anterior no es óptima: x1 y x2 tienen costo reducido negativo • Después de una iteración de Simplex en el pivote destacado se alcanza el siguiente tableau: x1 x2 0 1 0 0 −500 0 25 2 1 2 3 20 −3 20 x3 x4 x5 y3 1 −5 0 0 375 14 1 0 14 0 0 45 −3 0 140 −1 1 1, 5 3 0 140 1 0 −1, 5 600 0 14 0 0 27000 Apuntes de Clases • Optimización • Claudio Seebach v.b. x3 x2 y3 Programación Lineal • 71 Tipo 2 Primera Fase Gráficamente (0,45) D Tipo 1 Apuntes de Clases • Optimización • Claudio Seebach Programación Lineal • 72 Primera Fase • La solución básica anterior aún no es factible para el problema original pues y3 aún es positiva. • La solución no es óptima para la Fase I: el costo reducido de la variable 3 ). x1 es negativo (− 20 • Una iteración adicional y obtenemos: x1 0 0 1 0 0 x2 0 1 0 0 0 x3 x4 1 10 7 0 17 0 −1 7 0 0 0 −200 7 x5 250 3 10 3 −20 3 0 y3 −250 3 −10 3 20 3 1 −10000 10000 3 3 v.b. 250 x3 40 x2 10 x1 0 32000 • La solución básica alcanzada es óptima para la Fase I, ya que todas las variables artificiales han salido de la base. Apuntes de Clases • Optimización • Claudio Seebach Programación Lineal • 73 Tipo 2 Primera Fase Gráficamente (0,45) (10,40) D Tipo 1 Apuntes de Clases • Optimización • Claudio Seebach Programación Lineal • 74 Fin Primera Fase • A través de operaciones fila transformamos el problema de la Fase I en el siguiente: s.a min y3 20 250 250 x 3 + x4 + x5 − y3 14 3 3 1 10 10 x2 + x4 + x5 − y3 7 3 3 1 20 20 x1 − x4 − x5 + y3 7 3 3 xi y3 = 250 = 40 = 10 ≥ 0, ≥ 0 i ∈ {1, 2, 3, 4, 5} • La solución óptima prescinde de la variable y3. • La solución básica factible alcanzada es: x1 = 10, x2 = 40, x3 = 250, x4 = x5 = 0 y es factible para el problema original. • Basta eliminar la variable artificial y3 y reemplazar la función objetivo por la original para poder comenzar la segunda fase. Apuntes de Clases • Optimización • Claudio Seebach Programación Lineal • 75 Transición Fase I a Fase II • Las v. b. x1, x2 de esta solución aparecen en la función objetivo original: min −800x1 − 600x2 • Es necesario realizar operaciones adicionales para que la función objetivo quede expresada sólo en función de las variables no básicas. • Esto se obtiene gracias a mantener durante la primera fase la última fila del tableau con la función objetivo original. • Basta reemplazar el valor de las v. b. en la función objetivo original: f (x1, x2) = −800x1 − 600x2 20 20 1 10 10 1 = −800(10 + x4 + x5 − y3 ) − 600(40 − x4 − x5 + y3) 7 3 3 7 3 3 200 10000 10000 = −32.000 − x4 − x5 + y3 7 3 3 • Esto es la expresión que aparece en la última fila del tableau. Apuntes de Clases • Optimización • Claudio Seebach Programación Lineal • 76