UNIDAD 3 MÉTODO SIMPLEX Fundamentos del método simplex Teoría Este método busca la solución, en cada paso, de forma mejorada hasta que no pueda seguir mejorando dicha solución. Al comienzo el vértice principal es un vértice cualquiera, hasta que va mejorando, comparándolo con el vértice anterior, en los pasos de la ecuación. El método Simplex se basa en la siguiente propiedad: si la función objetivo, f, no toma su valor máximo en el vértice A, entonces hay una arista que parte de A, a lo largo de la cual f aumenta. Deberá tenerse en cuenta que este método sólo trabaja para restricciones que tengan un tipo de desigualdad "≤" y coeficientes independientes mayores o iguales a 0, y habrá que estandarizar las mismas para el algoritmo. En caso de que después de éste proceso, aparezcan (o no varíen) restricciones del tipo "≥" o "=" habrá que emplear otros métodos, siendo el más común el método de las Dos Fases. Resumen del método simplex. Paso 1 Convertir el LP a suma forma estándar. Paso 2 Encontrar una solución básica factible. Si todas las restricciones son de tipo =<se pueden usar las variables de holgura si para cada la i. Paso 3 Si todas las variables no básicas tienen un coeficiente no negativo en la 0, la bfs actuales optima. Si hay variables en la 0 con coeficientes negativos, se debe escoger la que acompañe al coeficiente más negativo en la 0 para entrar a la base. Esta variable se denomina la variable entrante. Paso 4 Emplear el pivoteo para hacer que la variable entrante ingrese a la base en la que restringido su valor. Una vez obtenida la base, volver al paso 3, empleando la forma canoníca actual. Solución factible Una solución basal de (2.3) en el cual todas las variables son no negativas es una Solución basal factible o bfs. Los siguientes dos teoremas explican la importancia de concepto de solución basal factible en LP. Teorema 1 La región factible para cualquier problema de programación lineal es un conjunto convexo. Además, si un LP tiene solución óptima, el óptimo debe ser un punto extremo de la región factible. La justificación del Teorema 1 fue discutida intuitivamente cuando se estudio la resolución grafica de LP de dos variables, además en dos variables también se vio que el ¶optimo corresponde un punto extremo. Teorema 2 Para cualquier LP, existe un único punto extremo de la región factible correspondiente a cada solución basal factible. Además, existe a los menos una bfs correspondiente a cada punto extremo de la región factible. Solución básica factible Siempre se debe incorporar una variable entrante en la que controla su valor máximo. En el ejemplo, para hacer que x1 sea la variable basal en la 3 se debe emplear operaciones las elementales para conseguir que x1 tenga coeficiente 1 en dicha la y 0 en las otras las. El procedimiento se denomina pivoteo en la 3. El resultado es que x1 reemplace a s3 como variable básica de la 3. Los pasos a seguir son los siguientes: Paso 1 Se crea un coeficiente 1 para x1 en la 3 multiplicando la completa por ½. El resultante de la operación es: x1 + 0;75x2 + 0;25x3 + 0;5s3 = 4 Paso 2 Se crea un coeficiente 0 para la variables x1 en la 0. Para ello basta multiplicar por 60 (3.12) y sumarla a la 0 actual: z + 15x2 ¡ 5x3 + 30s3 = 240 Paso 3 Para fabricar un coeficiente 0 para la variables x1 en la 1 se multiplica por ¡8 (3.12) y se suma a la 1 actual: ¡x3 + s1 ¡ 4s3 = 16 Paso 4 Creamos un coeficiente 0 para la variables x1 en la ¯la 2 multiplicando por ¡4 (3.12) y sumándosela a la ¯la 2 actual: ¡x2 + 0;5x3 + s2 ¡ 2s3 = 4 Debido a que en la 4 no aparece la variable x1, no es necesario aplicar operaciones las para eliminar x1 de la. Luego, la 4 queda igual que antes: x2 + s4 = 5 Efectuando todas las medicaciones descritas se completa el Cuadro 3.3. Las variables basales y no basales en este caso definen los siguientes conjuntos: BV = fz; s1; s2; x1; s4g NBV = fs3; x2; x3g Variable entrante: Se puede comenzar a desarrollar con cualquier variable solo que según la que tome se realizaran más o menos iteraciones. Se recomienda usar las variables básicas, ya que estas serán la base en la solución en estos métodos. Variable saliente Igualmente se puede comenzar con cualquiera de ellas, aunque se puede dar el caso corrido de caer en un ciclo repetitivo. Para que no ocurran estos casos de repetición no se tomaran en cuenta las variables básicas haciendo que siempre estén en la base. En caso de igualdad de las variables se, en el segundo método, se tomara las variables artificiales. Método de las dos faces Trata, en diferencia del método simplex, en que primero hay que resolver el problema auxiliar tratando de minimizar la suma las variables artificiales. Una vez resolvido el problema se ordena la tabla final y comenzamos con el método simplex normal. Fase 1 En esta primera fase, se realiza todo de igual manera que en el método Simplex normal, excepto la construcción de la primera tabla, la condición de parada y la preparación de la tabla que pasará a la fase 2 - Construcción de la primera tabla: Se hace de la misma forma que la tabla inicial del método Simplex, pero con algunas diferencias. La fila de la función objetivo cambia para la primera fase, ya que cambia la función objetivo, por lo tanto aparecerán todos los términos a cero excepto aquellos que sean variables artificiales, que tendrán valor "-1" debido a que se está minimizando la suma de dichas variables (recuerde que minimizar F es igual que maximizar F·(-1)). La otra diferencia para la primera tabla radica en la forma de calcular la fila Z. Ahora tendremos que hacer el cálculo de la siguiente forma: Se sumarán los productos Cb·Pj para todas las filas y al resultado se le restará el valor que aparezca (según la columna que se éste haciendo) en la fila de la función objetivo. - Condición de parada: La condición de parada es la misma que en el método Simplex normal. La diferencia estriba en que pueden ocurrir dos casos cuando se produce la parada: la función toma un valor 0, que significa que el problema original tiene solución, o que tome un valor distinto, indicando que nuestro modelo no tiene solución. - Eliminar Columna de variables artificiales: Si hemos llegado a la conclusión de que el problema original tiene solución, debemos preparar nuestra tabla para la segunda fase. Deberemos eliminar las columnas de las variables artificiales, modificar la fila de la función objetivo por la original, y calcular la fila Z de la misma forma que en la primera tabla de la fase 1. Método simplex revisado Procedimiento de cálculo Resolver el siguiente problema mediante el método simplex revisado. max z = −2x2 + x3 s/a x1 − 2x2 + x3 >= −4 x1 + x2 + x3 <= 9 2x1 − x2 − x3 <= 5 x1, x2, x3 >= 0 Preliminares. Lo primero que debemos hacer es convertir el problema a su forma estándar. En nuestro caso, max z = −2x2 + x3 s/a −x1 + 2x2 − x3 + x4 = 4 x1 + x2 + x3 + x5 = 9 2x1 − x2 − x3 + x6 = 5 x1, x2, x3 >= 0 Matricialmente, max z = c.x s/a A.x = b x >= 0 Donde, y c = (0,−2, 1, 0, 0, 0). Estos vectores/matrices van a permanecer constantes a lo largo del ejercicio. No obstante, cuando introduzcamos B, N, xB, xN, cB y cN, estos últimos van a variar según la base establecida en cada iteración. Búsqueda primer solución factible. El problema es origen factible, así que no tenemos necesidad de utilizar el método de las dos fases. Simplemente, Podemos comenzar con la base B = (a4, a5, a6). Obviamente, N = (a1, a2, a3). Test de optimalidad. Recordemos la forma general del diccionario, xB = B−1.b − B−1.N.xN z = cB.B−1.b + (cN − cB.B−1.N).xN Debemos investigar los coeficientes de la función objetivo (i.e.cN−cB.B−1.N). Llamemos w al vector que resulta del producto cB.B−1. Utilizando la primera solución factible hallada, cB resulta ser el vector nulo, as´ı que también w = (0, 0, 0). Lo siguiente es evaluar los coeficientes de la función objetivo (correspondientes a las variables no básicas) hasta encontrar uno que sea estrictamente positivo: c1 − w.a1 = 0, c2 − w.a2 = −2, c3 − w.a3 = 1, por lo tanto entra x3 a la base. Test de factibilidad. Ahora tenemos que hallar la variable saliente que más restricción impone, cuando x3 comienza a crecer. De la forma general del diccionario, veamos que xB = B−1.b − B−1.N.xN = b − N.xN = b − a3.x3, Pues B−1 = I y x3 dejara de ser cero, pero no así las otras variables no básicas (x1 = x2 = 0). En resumen, x4 = 4 + x3, que no impone restricción, x5 = 9 − x3, que impone la restricción x3 _ 9, x6 = 5 + x3, que no impone restricción. La variable que más restricción impone es x5 y, por lo tanto, sale de la base. Actualización. Para poder pasar a la próxima iteración (la cual comienza con el test de optimalidad) debemos actualizar la base, y con ella, los vectores/matrices B, N, xB, xN, cB y cN. Todas ellas se hallan mediante un reordenamiento de sus componentes (donde estaba antes la columna/valor correspondiente a la variable entrante, ahora estará la de la variable saliente y viceversa). Es decir, B = (a4, a3, a6), N = (a1, a2, a5), xB = (x4, x3, x6)T , xN = (x1, x2, x5)T , cB = (0, 1, 0) y cN = (0,−2, 0). Cabe destacar que también podemos aprovechar a calcular la nueva B −1 de una manera eficiente, a partir de la B−1 previa. Llamemos B1 a la matriz B antes de iterar y B2 a la matriz luego de iterar. Observemos que B2 = (a4, a3, a6) = (a4, a5, a6).T = B1.T, T es una identidad modificada, en donde se ha cambiado su columna del medio por la columna correspondiente a x3 en el resultado B−1.N ya calculado en el paso anterior (dicha columna había resultado ser simplemente a3). Luego, B−12 = (B1.T )−1 = T−1.B−11 = T−1.I = T−1 En general, T−1 es también una identidad, salvo que la columna cambiada k (en nuestro caso, es la del medio, k = 2) está formada por la columna (−t 1k/tkk,−t2k/tkk, · · · , 1/tkk, · · · )T Obsérvese que la fila k de esta columna se calcula de una manera diferente al resto. Test de optimalidad. Nuevamente, volvemos a calcular los coeficientes de la función objetivo correspondiente a las nuevas variables no básicas. En primer lugar, w = cB.B−1 = (0, 1, 0). c1 − w.a1 = −1, c2 − w.a2 = −3, c5 − w.a5 = −1. Como todos los coeficientes no son estrictamente positivos, hemos alcanzado el óptimo. Resultado. Para conocer los valores de x_ y z_, volvemos a recordar la forma general del diccionario, y hacemos x*B = B−1.b, x* N = 0, z* = cB.B*1.b = w.b. Nos queda x*B = (13, 9, 14) y z_ = 9. En particular, las slacks no nos interesan y podemos descartarlas, dejando X1 = x_ x2 = 0 y x_ x3 = 9. Realizado por los creadores del sitio: http://www.unefa-io.webnode.es Correspondiente a la unidad 3. Investigación de Operaciones