Metodo Simplex
Metodo Simplex
Metodo Simplex
El mtodo Simplex es un procedimiento iterativo que permite ir mejorando la solucin a cada paso. El proceso concluye cuando no es posible seguir mejorando ms dicha solucin. Partiendo del valor de la funcin objetivo en un vrtice cualquiera, el mtodo consiste en buscar sucesivamente otro vrtice que mejore al anterior. La bsqueda se hace siempre a travs de los lados del polgono (o de las aristas del poliedro, si el nmero de variables es mayor). Cmo el nmero de vrtices (y de aristas) es finito, siempre se podr encontrar la solucin. (Vase mtodo Grfico) El mtodo Simplex se basa en la siguiente propiedad: si la funcin objetivo, f, no toma su valor mximo en el vrtice A, entonces hay una arista que parte de A, a lo largo de la cual f aumenta. Deber tenerse en cuenta que este mtodo slo 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 despus de ste proceso, aparezcan (o no varen) restricciones del tipo "" o "=" habr que emplear otros mtodos, siendo el ms comn el mtodo de las Dos Fases.
PREPARANDO EL MODELO PARA ADAPTARLO AL MTODO SIMPLEX Esta es la forma estndar del modelo: Funcin objetivo: Sujeto a: c1x1 + c2x2 + ... + cnxn a11x1 + a12x2 + ... + a1nxn = b1 a21x1 + a22x2 + ... + a2nxn = b2 ... am1x1 + am2x2 + ... + amnxn = bm x1,..., xn 0
Para ello se deben cumplir las siguientes condiciones: 1. El objetivo es de la forma de maximizacin o de minimizacin. 2. Todas las restricciones son de igualdad. 3. Todas las variables son no negativas. 4. Las constantes a la derecha de las restricciones son no negativas.
Cambio del tipo de optimizacin. Si en nuestro modelo, deseamos minimizar, podemos dejarlo tal y como est, pero deberemos tener en cuenta nuevos criterios para la condicin de parada (deberemos parar de realizar iteraciones cuando en la fila del valor de la funcin objetivo sean todos menores o iguales a 0), as como para la condicin de salida de la fila. Con objeto de no cambiar criterios, se puede convertir el objetivo de minimizar la funcin F por el de maximizar F(-1). Ventajas: No deberemos preocuparnos por los criterios de parada, o condicin de salida de filas, ya que se mantienen. Inconvenientes: En el caso de que la funcin tenga todas sus variables bsicas positivas, y adems las restricciones sean de desigualdad "", al hacer el cambio se quedan negativas y en la fila del valor de la funcin objetivo se quedan positivos, por lo que se cumple la condicin de parada, y por defecto el valor ptimo que se obtendra es 0. Solucin: En la realidad no existen este tipo de problemas, ya que para que la solucin quedara por encima de 0, alguna restriccin debera tener la condicin "", y entonces entraramos en un modelo para el mtodo de las Dos Fases.
Conversin de signo de los trminos independientes (las constantes a la derecha de las restricciones) Deberemos preparar nuestro modelo de forma que los trminos independientes de las restricciones sean mayores o iguales a 0, sino no se puede emplear el mtodo Simplex. Lo nico que habra que hacer es multiplicar por "-1" las restricciones donde los trminos independientes sean menores que 0. Ventaja: Con sta simple modificacin de los signos en la restriccin podemos aplicar el mtodo Simplex a nuestro modelo. Inconvenientes: Puede resultar que en las restricciones donde tengamos que modificar los signos de las constantes, los signos de las desigualdades fueran ("=", ""), quedando ("=","") por lo que en cualquier caso deberemos desarrollar el mtodo de las Dos Fases. Este inconveniente no es controlable, aunque nos podra beneficiar si slo existen trminos de desigualdad ("",""), y los "" coincidieran con restricciones donde el trmino independiente es negativo.
Todas las restricciones son de igualdad. Si en nuestro modelo aparece una inecuacin con una desigualdad del tipo "", deberemos aadir una nueva variable, llamada variable de exceso si, con la restriccin si 0. La nueva variable aparece con coeficiente cero en la funcin objetivo, y restando en las inecuaciones. Surge ahora un problema, veamos como queda una de nuestras inecuaciones que contenga una desigualdad "" : a11x1 + a12x2 b1 a11x1 + a12x2 - 1xs = b1
Como todo nuestro modelo, est basado en que todas sus variables sean mayores o iguales que cero, cuando hagamos la primera iteracin con el mtodo Simplex, las variables bsicas no estarn en la base y tomarn valor cero, y el resto el valor que tengan. En este caso nuestra variable xs, tras hacer cero a x1 y x2, tomar el valor -b1. No cumplira la condicin de no negatividad, por lo que habr que aadir una nueva variable, xr, que aparecer con coeficiente cero en la funcin objetivo, y sumando en la inecuacin de la restriccin correspondiente. Quedara entonces de la siguiente manera: a11x1 + a12x2 b1 a11x1 + a12x2 - 1xs + 1 xr = b1
Este tipo de variables se les llama variables artificiales, y aparecern cuando haya inecuaciones con desigualdad ("=",""). Esto nos llevar obligadamente a realizar el mtodo de las Dos Fases, que se explicar ms adelante.
Del mismo modo, si la inecuacin tiene una desigualdad del tipo "", deberemos aadir una nueva variable, llamada variable de holgura si, con la restriccin si "" 0 . La nueva variable aparece con coeficiente cero en la funcin objetivo, y sumando en las inecuaciones. A modo resumen podemos dejar esta tabla, segn la desigualdad que aparezca, y con el valor que deben estar las nuevas variables. Tipo de desigualdad = Tipo de variable que aparece - exceso + artificial + artificial + holgura
DESARROLLANDO EL MTODO SIMPLEX Una vez que hemos estandarizado nuestro modelo, puede ocurrir que necesitemos aplicar el mtodo Simplex o el mtodo de las Dos Fases. Vase en la figura como debemos actuar para llegar a la solucin de nuestro problema.
Explicaremos paso a paso los puntos de cada mtodo, concretando los aspectos que hay que tener en cuenta.
Mtodo Simplex
- Construccin de la primera tabla: En la primera columna de la tabla aparecer lo que llamaremos base, en la segunda el coeficiente que tiene en la funcin objetivo cada variable que aparece en la base (llamaremos a esta columna Cb), en la tercera el trmino independiente de cada restriccin (P0), y a partir de sta columna aparecern cada una de las variables de la funcin objetivo (Pi). Para tener una visin ms clara de la tabla, incluiremos una fila en la que pondremos cada uno de los nombres de las columnas. Sobre sta tabla que tenemos incluiremos dos nuevas filas: una que ser la que liderar la tabla donde aparecern las constantes de los coeficientes de la funcin objetivo, y otra que ser la ltima fila, donde tomar valor la funcin objetivo. Nuestra tabla final tendr tantas filas como restricciones.
Tabla C1 Base Pi1 Pi2 ... Pim Z Cb Ci1 Ci2 ... Cim P0 bi1 bi2 ... bim Z0 P1 a11 a21 ... am1 Z1-C1 C2 P2 a12 a22 ... am2 Z2-C2 ... ... ... ... ... ... ... Cn Pn a1n a2n ... amn Zn-Cn
Los valores de la fila Z se obtienen de la siguiente forma: El valor Z0 ser el de sustituir Cim en la funcin objetivo (y cero si no aparece en la base). El resto de columnas se obtiene restando a este valor el del coeficiente que aparece en la primera fila de la tabla. Se observar al realizar el mtodo Simplex, que en esta primera tabla, en la base estarn las variables de holgura. - Condicin de parada: Comprobaremos si debemos de dar una nueva iteracin o no, que lo sabremos si en la fila Z aparece algn valor negativo. Si no aparece ninguno, es que hemos llegado a la solucin ptima del problema. - Eleccin de la variable que entra: Si no se ha dado la condicin de parada, debemos seleccionar una variable para que entre en la base en la siguiente tabla. Para ello nos fijamos en los valores estrictamente negativos de la fila Z, y el menor de ellos ser el que nos de la variable entrante. - Eleccin de la variable que sale: Una vez obtenida la variable entrante, obtendremos la variable que sale, sin ms que seleccionar aquella fila cuyo cociente P0/Pj sea el menor de los estrictamente positivos (teniendo en cuenta que slo se har cuando Pj sea mayor de 0). La interseccin entre la columna entrante y la fila saliente nos determinar el elemento pivote. - Actualizacin de la tabla: Las filas correspondientes a la funcin objetivo y a los ttulos permanecern inalterados en la nueva tabla. El resto deber calcularse de dos formas diferentes:
Si
es
la
fila
pivote
cada
nuevo
elemento
se
calcular:
Para
el
resto
de
elementos
de
filas
se
calcular:
Nuevo Elemento Fila = Elemento Fila Pivote actual - (Elemento Columna Pivote en la fila actual * Nuevo Elemento Fila).
Mtodo de las Dos Fases ste mtodo difiere del Simplex en que primero hay que resolver un problema auxiliar que trata de minimizar la suma de las variables artificiales. Una vez resuelto este primer problema y reorganizar la tabla final, pasamos a la segunda fase, que consiste en realizar el mtodo Simplex normal. FASE 1 En esta primera fase, se realiza todo de igual manera que en el mtodo Simplex normal, excepto la construccin de la primera tabla, la condicin de parada y la preparacin de la tabla que pasar a la fase 2. - Construccin de la primera tabla: Se hace de la misma forma que la tabla inicial del mtodo Simplex, pero con algunas diferencias. La fila de la funcin objetivo cambia para la primera fase, ya que cambia la funcin objetivo, por lo tanto aparecern todos los trminos a cero excepto aquellos que sean variables artificiales, que tendrn 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 clculo de la siguiente forma: Se sumarn los productos CbPj para todas las filas y al resultado se le restar el valor que aparezca (segn la columna que se ste haciendo) en la fila de la funcin objetivo.
Tabla C0 Base Pi1 Pi2 ... Pim Z Cb Ci1 Ci2 ... P0 bi1 bi2 ... Z0 C1 P1 a11 a21 ... Z1 C2 P2 a12 a22 ... Z2 ... ... ... ... ... ... Cn-k Pn-k a1n-k a2n-k ... Zn-k ... ... ... ... ... ... Cn Pn a1n a2n ... Zn
am2 ...
Siendo Zj = (CbPj) - Cj y los Cj = 0 para todo j comprendido entre 0 y n-k (variables de decisin, holgura y exceso), y Cj = -1 para todo j comprendido entre n-k y n (variables artificiales).
- Condicin de parada: La condicin de parada es la misma que en el mtodo Simplex normal. La diferencia estriba en que pueden ocurrir dos casos cuando se produce la parada: la funcin toma un valor 0, que significa que el problema original tiene solucin, o que tome un valor distinto, indicando que nuestro modelo no tiene solucin. - Eliminar Columna de variables artificiales: Si hemos llegado a la conclusin de que el problema original tiene solucin, debemos preparar nuestra tabla para la segunda fase. Deberemos eliminar las columnas de las variables artificiales, modificar la fila de la funcin objetivo por la original, y calcular la fila Z de la misma forma que en la primera tabla de la fase 1.
IDENTIFICANDO CASOS ANMALOS Y SOLUCIONES Obtencin de la solucin: Cuando se ha dado la condicin de parada, obtenemos el valor de las variables bsicas que estn en la base y el valor ptimo que toma la funcin que estn en la base mirando la columna P0. En el caso de que estemos minimizando, se multiplicar por "-1" el valor ptimo. Infinitas soluciones: Cumplida la condicin de parada, si se observa que alguna variable que no est en la base, tiene un 0 en la fila Z, quiere decir que existe otra solucin que da el mismo valor ptimo para la funcin objetivo. Si estamos ante este caso, estamos ante un problema que admite infinitas soluciones, todas ellas comprendidas dentro del segmento (o porcin del plano, o regin del espacio, dependiendo del nmero de variables del problema) que define Ax+By=Z0. Si se desea se puede hacer otra iteracin haciendo entrar en la base a la variable que tiene el 0 en la fila Z, y se obtendr otra solucin.
Solucin ilimitada: Si al intentar buscar la variable que debe abandonar la base, nos encontramos que toda la columna de la variable entrante tiene todos sus elementos negativos o nulos, estamos ante un problema que tiene solucin ilimitada. No hay valor ptimo concreto, ya que al aumentar el valor de las variables se aumenta el valor de la funcin objetivo, y no viola ninguna restriccin. No existe solucin: En el caso de que no exista solucin, seguro que tendremos que realizar las dos fases, por lo que al trmino de la primera sabremos si estamos en tal situacin. Empate de variable entrante: Se puede optar por cualquiera de ellas, sin que afecte a la solucin final, el inconveniente que presenta es que segn por cual se opte se harn ms o menos iteraciones. Se aconseja que se opte a favor de las variables bsicas, ya que son aquellas las que quedarn en la base cuando se alcance la solucin con estos mtodos. Empate de variable saliente: Se puede nuevamente optar por cualquiera de ellas, aunque se puede dar el caso degenerado y entrar en ciclos perpetuos. Para evitarlos en la medida de lo posible, discriminaremos a favor de las variables bsicas haciendo que se queden en la base. Ante el caso de estar en la primera fase (del mtodo de las Dos Fases), se optar por sacar en caso de empate las variables artificiales. Curiosidad Fase 1: Al finalizar la fase 1, si el problema original tiene solucin, todas las variables artificiales, en la fila Z deben tener el valor "1". Pivote puede ser 0?: No, ya que siempre se realizan los cocientes entre valores no negativos y mayores que cero.
Donde:
v es el producto escalar de los vectores (cb1,cb2,...,cbm) y (b1,b2,...,bm) yk es el producto escalar de los vectores (cb1,cb2,...,cbm) y (a1k,a2k,...,amk) para k=1,2,...m. zk=ck-yk para k=1,2,...,m.
En la primera fila de la tabla se colocan los coeficientes de las variables en la funcin objetivo.
En las tres primeras columnas aparecen los coeficientes de las variables bsicas en la funcin objetivo, las variables bsicas iniciales y el vector de trminos independientes de las restricciones, respectivamente. La parte central de la tabla est formada por la matriz de coeficientes A. Los elementos de la penltima fila son los productos escalares del vector de la primera columna con los vectores de la tabla que quedan encima de cada uno de esos elementos. Finalmente, en la ltima fila aparece la diferencia de las filas primera y penltima.
*IMPORTANTE* Las variables bsicas iniciales deben tener una matriz de base asociada igual a la identidad. En muchas ocasiones, al introducir las variables de holgura en las restricciones se genera una matriz bsica identidad, que puede ser utilizada como base inicial del algoritmo. En los casos en los que sto no ocurra existen tcnicas para obtener una submatriz identidad, como puede ser por ejemplo el uso de variables artificiales.
Cada tabla del Simplex est asociada a una solucin bsica factible. De forma que, una vez construida la tabla inicial, deben establecerse las reglas que permitan obtener las tablas asociadas a las siguientes soluciones bsicas, as como saber la solucin bsica que lleva asociada cada tabla. Adems es necesario saber cuando una tabla corresponde a la solucin ptima, esto ltimo se consigue analizando los signos de la ltima fila de la tabla: Si todos los elementos de la ltima fila de la tabla son mayores o iguales que cero, el ptimo ha sido alcanzado. Cuando alguno de los elementos de la ltima fila es negativo, el valor ptimo puede mejorarse y por tanto debe construirse una nueva tabla de la manera siguiente:
Se selecciona de la ltima fila el elemento negativo de mayor valor absoluto. La variable correspondiente al ndice del zi seleccionado es la que pasar a ser bsica. Para saber a que variable bsica sustituye, se dividen los valores de la tercera columna entre los valores positivos de la columna de A seleccionada en el paso anterior (la que corresponde al elemento negativo de mayor valor absoluto). En caso de no existir valores positivos, puede asegurarse que el problema no tiene ptimo finito.
De todos los cocientes calculados se selecciona el mnimo, el elemento de la matriz A que ha servido para construir ese valor mnimo es el que actuar como pivot y la variable de la segunda columna de la tabla en la posicin de la fila del pivot es la que deja de ser bsica. Mediante transformaciones elementales de filas sobre el bloque central de la tabla (el bloque de fondo amarillo en la tabla) se llega a transformar en 1 el pivot y anular los restantes elementos de la correspondiente columna. Las nicas transformaciones que son permitidas son: o Multiplicar por constantes la fila que contiene el pivot. o Sumar o restar a una fila un mltiplo de la fila que contiene el pivot. Intercambiar las variables bsicas en la segunda columna al mismo tiempo que se modifica el correspondiente elemento de la primera columna. Calcular los nuevos valores de las dos ltimas filas de la tabla de acuerdo a las instrucciones ya indicadas.
Se repiten todos estos procesos y se van transformando las tablas hasta que el test de parada sea positivo (todos los elementos de la ltima fila mayores o iguales que cero) en cuyo caso se tiene:
El ptimo se alcanza en el punto cuyas coordenadas son nulas excepto las correspondientes a las variables bsicas, cuyos valores aparecen en la tercera columna de la tabla ptima. El valor de la funcin en el ptimo es el que aparece en el ltimo elemento de esa misma columna
Todas las tablas que se van obteniendo tienen dos caractersticas en comn: los elementos de la tercera columna son todos ellos mayores o iguales que cero, salvo el ltimo (el que indica el valor de la funcin objetivo) que pudiera ser negativo. Por otro lado, las columnas de A asociadas a las variables bsicas siempre forman una matriz identidad. Analizando ms en profundidar cada una de las etapas expuestas, se puede comprobar la correspondencia con el mtodo Simplex enunciado de una forma ms terica anteriormente. Por supuesto, la mejor manera de comprender la resolucin mediante tablas es con ejemplos particulares; a continuacin se exponen dos de estos ejemplos.
0 0
x3 2 x4 6 0
Se toman como variables bsicas x3 y x4 porque llevan asociadas como matriz de base la identidad. El elemento sealado en color rojo en la tabla es el que actuar como pivot, ha sido determinado teniendo en cuenta que en la ltima fila de la tabla solo hay un elemento negativo; tras esto se debe calcularmin{2/1,6/1}, dicho mnimo se obtiene a partir del pivot. La posicin del pivot dentro de la tabla indica:
Para construir la siguiente tabla, han de realizarse operaciones elementales sobre las filas del bloque central hasta conseguir que el pivot sea 1 y los restantes elementos de su columna sean 0. En este caso el pivot ya tiene el valor 1, para anular el otro elemento de la columna basta restar a la segunda fila la primera. Tras estas manipulaciones, se sustituye la variable x3 por x2 y el valor 0 de la primera columna de la tabla por c2=-1. A continuacin se realizan las operaciones que definen los elementos de las dos ltimas filas de la tabla para completar la segunda tabla del algoritmo.
Segunda Tabla 2 -1 0 -1 x2 2 -1 1 1 0 x4 4 3 0 -1 -2 1 -1 -1 1 0 1 0 0 1 0 0
Como puede observarse, la ltima fila de la tabla est formada por elementos mayores o iguales que cero todos ellos, lo que significa que se ha alcanzado un ptimo. En concreto, el ptimo se alcanza sobre el punto x1=0 x2=2 x3=0 x4=4 El valor ptimo es adems -2 (ltimo elemento de la tercera columna de la tabla).
Ejemplo: Programa lineal min x1-x2 x1+2x2 >= 6 2x1+x2 <= 6 4x1+x2= = 4 x1,x2 >= 0 Formulacin estndar min x1-x2 x1+2x2-x3 = 6 2x1+x2+x4 = 6 4x1+x2= = 4 x1,x2,x3,x4 >= 0
De la matriz A del problema no se puede obtener una submatriz igual a la identidad. Podra por tanto, recurrirse a introducir dos variables artificiales x5 y x6. Observar como se introducen esas variables en la funcin objetivo con un coeficiente M que se supone muy grande. Adems al aadir esas variables a la
primera y tercera restriccin se consigue, tomando como variables bsicas x5, x4 y x6, una matriz bsica igual a la identidad. Por la propia construccin, en el ptimo las variables artificiales se anularn y por tanto las restricciones no se vern afectadas por la modificacin que supone aadirlas.
El problema tras introducir las variables artificiales sera: min x1-x2+Mx5+Mx6 x1+2x2-x3+x5 = 6 2x1+x2+x4 = 6 4x1+x2+x6= = 4 x1,x2,x3,x4,x5,x6 >= 0 Y aplicando el mtodo Simplex se obtiene el ptimo tras cuatro tablas: Tabla Inicial 1 -1 0 0 M M 6 1 2 -1 0 1 0 6 2 1 0 1 0 0 4 4 1 0 0 0 1 10M 5M 3M -M 0 M M 1-5M -1-3M M 0 0 0
M 0 M
x5 x4 x6
Para un valor muy grande de M los dos primeros elementos de la ltima fila de la tabla son negativos y de ellos es el primero el que tiene mayor valor absoluto, es por tanto en la primera columna en la que se busca el pivot.
Tras efectuar las correspondientes transformaciones, las sucesivas tablas son: Segunda Tabla 1 -1 0 0 M M 5 0 7/4 -1 0 1 -1/4 4 0 1/2 0 1 0 -1/2 1 1 1/4 0 0 0 1/4 1 (7M+1)/4 -M 0 M (5M+1 M+1)/4 0 (-7M-5)/4 M 0 0 (5M1)/4
M 0 1
x5 x4 x1
Obsrvese como una de las variables artificiales ha dejado de ser bsica. Tercera Tabla 1 0 0 1 -1 0 0 M 1 -4/7 0 4/7 0 2/7 1 -2/7 0 1/7 0 -1/7 M -1/7 -3/7 2/7
-1 0 1
x2 x4 x1
En la tercera tabla ya han desaparecido de la lista de variables bsicas las dos artificiales. A partir de este momento puede prescindirse de las dos ltimas columnas de la tabla, de forma que la siguiente tabla sera: Cuarta Tabla 1 4 -2 7 -4 5 -1 1 0 0 -1 0 0 0 0 1 0 0 0 0 1 0 0 0
-1 0 0
x2 x4 x3
4 2 2 -4
Al no existir ningn valor negativo en la ltima fila, el ptimo ha sido encontrado en el punto correspondiente a: x1=0 x2=4 x3=2 x4=2