Unidad 4 Método Simplex Se ha visto que los problemas de programación lineal (pl) tienen una estructura bien definida, se trata de optimizar una función pero respetando una serie de restricciones que están dadas por un sistema de ecuaciones, casi todas desigualdades. Encontrar la solución de tales problemas implica encontrar las soluciones posibles de este sistema de ecuaciones. En los cursos de álgebra lineal se establece que cuando un sistema tiene menos ecuaciones que incógnitas, generalmente tiene un número infinito de soluciones. En la unidad 2 se mostró cómo encontrar la solución a problemas de solamente dos incógnitas que incluyen desigualdades, ya que en ese caso se puede trabajar en el espacio R2. En estos casos se vio que las restricciones determinan una región factible que es el lugar geométrico de los puntos solución del sistema de ecuaciones (desigualdades) correspondientes a las restricciones. También se vio que de esas infinitas soluciones, la solución óptima, o sea, la que optimiza a la función objetivo (fo), tiene que estar en uno de los vértices de la región factible, y estos vértices corresponden a la intersección de un par de ecuaciones de restricción. Como se trata de sistemas lineales, se pueden encontrar analíticamente los “vértices” intersección, ver cuáles quedan dentro de la región factible –y que por lo tanto son una solución básica factible– y ver cual de ellos da el mejor valor a la fo. Pero los problemas reales suelen tener mucho más que dos variables; en muchos problemas no muy complicados, se trata de decenas y hasta cientos de variables sujetas a decenas de restricciones. Si se piensa en un problema pequeño de 2 variables y 6 restricciones, habrá que encontrar todas las intersecciones de cada par de rectas, que en este caso serían 15. En general en R2, el número de intersecciones entre n rectas será el número de combinaciones de n tomados de a 2, o sea, Cn2. A estos vértices hay que agregar las intersecciones de cada recta con los ejes coordenados, otros 2n vértices. Pero no todos estos 2n + Cn2 puntos pertenecen a la frontera de la región factible; habrá que ver cuáles de ellos son soluciones factibles; en el caso de seis restricciones se reducen como máximo a siete, y determinar en cuál de ellos se encuentra la solución óptima. En los problemas reales, el número de puntos que se han de analizar es tan grande que se necesita contar con una estrategia eficiente de búsqueda que permita encontrar solamente aquellos puntos que se encuentran en la frontera, o sea, que corresponden a una solución posible. 121 Programación lineal Para solucionar estos problemas en el año de 1947 George Dantzig desarrolló un método extraordinariamente eficiente conocido como Simplex, que es capaz de encontrar la solución óptima de entre las muchas soluciones posibles analizando sólo algunas de las soluciones básica (o sea, vértices): parte de una solución básica inicial y continúa inspeccionando las soluciones adyacentes que permitan mejorar el objetivo del problema. El cálculo de problemas reales fue posible gracias a que simultáneamente ocurrió el desarrollo de las computadoras digitales en que estaban trabajando Eckert, Wilkes y finalmente von Neumann, lo que permitió que las operaciones aritméticas se realizarán en pocos segundos y posibilitaron así la computación de miles de operaciones en poco tiempo. Dantzig fue un doctor en matemáticas de la Universidad de California que durante la Segunda Guerra Mundial tuvo que trabajar en el ejército en la planificación de la logística para el abastecimiento. Esta visión de los problemas reales lo llevó al desarrollo del método Simplex. Eckert junto con Mauchly fabricaron, en la Universidad de Pensylvania, la primera computadora de propósito general, la enac; esta computadora integró a la electrónica el concepto de programa resultado de la teoría de autómatas desarrollada por von Newmman, científico húngaro radicado en Estados Unidos. Von Newman hizo notables aportaciones a la física cuántica, contribuyó al desarrollo de la lógica y para la economía propuso la teoría de juegos y la del equilibrio general como herramientas fundamentales para su análisis. El trabajo de estos brillantes científicos durante la década de 1940 hizo posible que se desarrollara el método Simplex, que permite la solución de una variadísima gama de problemas de manera muy eficiente dando una herramienta fundamental para la investigación de operaciones. El método Simplex es un algoritmo iterativo, esto es, un procedimiento que a partir de un paso inicial realiza un cálculo para encontrar una solución posible; verifica si esta solución es mejorable y, si lo es, vuelve a calcular una nueva solución mejor que la anterior, esto es, realiza una iteración; cuando ya no la pueda mejorar, es que llegó a la solución óptima. El procedimiento de iteración es similar a un paso del método de Gauss con pivote. Sin embargo, el método de Gauss se aplica a sistemas de ecuaciones (igualdades) y no a desigualdades; este inconveniente es subsanado agregando una variable a cada restricción que representa la holgura o sobrante de ese recurso. Aunque no se verá la demostración formal del método Simplex, es importante destacar las premisas o teoremas en que se basa: 1)Todo sistema de la forma A x = b, o no tiene solución o el conjunto de las soluciones factibles forman un conjunto convexo (polígono convexo en R2). 2)Si un problema de pl tiene solución óptima, ésta es un punto extremo o de la frontera del conjunto de soluciones del sistema de restricciones del problema. Si más de un punto es óptimo, entonces lo son todos los puntos en combinación lineal de los dos anteriores. 122 Método simplex En esta unidad se explicará el método Simplex para el caso canónico, esto es, un problema en que se quiere maximizar la utilidad sujeta a restricciones debido a recursos limitados como materias primas y horas de trabajo, representadas por relaciones de menor o igual. Para facilitar la explicación del método se utilizará un ejemplo típico: la producción de dos artículos sujeta a restricciones de mano de obra, materias primas y demanda. Se resolverá primero por el método gráfico para luego resolverlo con el método Simplex. Ejemplo 4.1 Una empresa produce dos tipos de artículos, el a y el b. La utilidad que se obtiene por unidad es de $150 por el a y $200 por el b. El gerente de producción quiere realizar la planeación semanal sabiendo que solamente cuenta con 64 horas para la elaboración y 24 unidades de materia prima. De semanas anteriores sabe que la demanda máxima del artículo b es de 6 unidades. En el cuadro se indican los requisitos para realizar cada uno de los artículos. Cuadro 4.1 a b Mano de obra (h) 8 8 Materia prima 4 2 Variables de decisión: x1: cantidad del artículo a a producir x2: cantidad del artículo b a producir Función objetivo: Máx U = 150x1 + 200x2(4.1a) Restricciones: Mano de obra: 8x1 + 8x2 ≤ 64 horas Materias primas:4x1 + 2x2 ≤ 24 unidades Demanda:x2 ≤ 6 artículos (4.1b) (4.1c) (4.1d) La solución del problema se muestra en la gráfica 4.1: 123 Programación lineal Gráfica 4.1 14 12 4x1 + 2x2 = 24 10 8 8x1 + 8x2 = 64 6 D : 0x1 + 1x2 = 6 C 4 B 2 Payoff: 150x1 + 200x2 = 1 500 A 0 0 4 2 Optimal Decisions (x1, x2) : (2, 6) : 8x1 + 8x2 ≤ 64 : 4x1 + 2x2 ≤ 24 : 0x1 + 1x2 ≤ 6 6 8 10 12 14 En la gráfica 4.1 aparecen como vértices de la región factible los puntos B = (4, 4) intersección entre la recta de la restricción de mano de obra y la correspondiente a las materias primas; el vértice C = (2, 6) en el que se agotan las horas de mano de obra y se satisface totalmente la demanda, y las intersecciones con los ejes debido a las condiciones de no negatividad D = (0, 6) y A = (6, 0). Todos los anteriores son soluciones factibles, que en el método Simplex se les llama soluciones básicas factibles. Hay otros puntos de intersección de las restricciones en la gráfica 4.1 como el (3, 6), pero están fuera de la región de soluciones posibles del problema, en este punto se exceden las horas disponibles. Para poder trabajar analíticamente es más conveniente tener un sistema de ecuaciones lineales, por lo que el primer paso es transformar las desigualdades en igualdades agregando variables que se denominan variables de holgura; por ejemplo, la ecuación (4.1b) sobre las horas hombre utilizadas: 8x1 + 8x2 ≤ 64 124 Método simplex se convierte en: 8x1 + 8x2 + h1 = 64 (4.2b) donde h1 son las horas hombre no utilizadas. De la misma manera la ecuación correspondiente a las materias primas: 4x1 + 2x2 ≤ 24 se transforma en: 4x1 + 2x2 + h2 = 24 (4.2c) donde h2 son las unidades de materia prima sobrantes. Por último la ecuación de la demanda: x2 ≤ 6 se convierte en: x2 + h3 = 6 (4.2d) donde con x2 será el número de artículos a producidos y h3 representa cuantos aún se pueden producir sin superar la demanda máxima. El sistema queda entonces así: Máx U = 150x1 + 200x2 s.a. 8x1 + 8x2 + h1= 64 4x1 + 2x2+ h2= 24 x2+ h3 = 6 x1, x2, h1, h2, h3 ≥ 0 A este sistema se le llama sistema aumentado, y cuenta con cinco variables y tres ecuaciones, por lo que se trata de un sistema con infinitas soluciones. Si las tres ecuaciones son linealmente independientes, para obtener una de las soluciones es necesario dar un valor arbitrario a dos de las variables, y quedan entonces solo tres incógnitas que podrán despejarse. 8x1 + 8x2 + h1= 64 4x1 + 2x2 + h2= 24 x2+ h3 = 6 125 (4.2b) (4.2c) (4.2d) Programación lineal Primer paso El método Simplex propone como primer paso asignar a las variables originales los valores (x1, x2) = (0, 0), con lo que el sistema se reduce a: 8(0) + 8(0) + h1= 64 4(0) + 2(0) + h2 = 24 0+ h3 = 6 (4.3b) (4.3c) (4.3d) y despejando las variables restantes: h1 = 64 – 8x1 – 8x2(4.3b) h2 = 24 – 4x1 – 2x2(4.3c) h3 = 6 (4.3d) la solución inicial queda así: xo = (x1, x2, h1, h2, h3) = (0, 0, 64, 24, 6) si se sustituye en la función de utilidad: Uo = 0 Segundo paso El siguiente paso es preguntarse si puede mejorarse esta solución forzando que sea cero a otra variable diferente de las que actualmente lo son, y asignando un valor diferente de cero a una de las que en el paso anterior lo eran: x1 o x2 . Para esto se analizan los coeficientes de la fo para ver cuál de las variables ofrece un incremento mayor por unidad producida. U = 150x1 + 200x2 en este caso cada unidad de la variable x2 contribuye con 200, por lo que se tratará de hacer que la variable x2 tome el mayor valor posible; esto significa tratar de producir la mayor cantidad posible de unidades del artículo b. 126 Método simplex Tercer paso Si la solución es mejorable, hay que calcular la nueva solución. Se deberá tratar de que x2 tome el mayor valor posible. Las restricciones son las que limitan este valor; en las ecuaciones (4.3) se observa que se cuenta con 64 horas hombre y se necesitan 8 horas para hacer cada artículo, por lo tanto el número máximo que se podría producir es x2 = 64 / 8 = 8. En cuanto a materias primas, se requieren de 2 unidades por cada artículo b, y se dispone de 24 unidades, por lo que sólo se podrían producir x2 = 24 / 2 = 12. Además, por cuestiones de demanda del mercado, x2 = 6; entonces el valor máximo que puede tomar x2 es el menor de los anteriores: x2 máximo = 6 Si se produjeran más unidades, no podrían venderse en el mercado. Por lo tanto, h3 , que corresponde al número de artículos que aún se podrían fabricar, se hace igual a cero: x2 = 6 y h3 = 0 Se dice que x2 es la variable de entrada y que h3 es la variable de salida. Para determinar cuáles son los recursos aún disponibles, de (4.2d) se despeja la nueva variable básica y se sustituye en las ecuaciones de los otros recursos disponibles, (4.3b) y (4.3c): x2 = 6 – h3 h1 = 64 – 8x1 – 8 (6 – h3) = h1 = 16 – 8x1 + 8 h3 h2 = 24 – 4x1 – 2 (6 – h3) = h2 = 12 – 4x1 + 2 h3 Se llega entonces a una solución básica mejorada, nuevamente un sistema con cinco incógnitas y tres ecuaciones, por lo que es necesario asignar valor a dos de ellas, en este caso x1 = 0 y h3 = 0; en este sistema: x2 = 6 – h 3 h1 = 16 – 8x1 + 8 h3(4.4b) h2 = 12 – 4x1 + 2 h3(4.4c) 127 Programación lineal Esto indica que se deben producir 6 unidades del producto b, pero que aún se dispone de 16 de las 64 horas hombre y de 12 unidades de materia prima de las 24 originales. La utilidad en este caso será de $1 200, superior a la solución anterior: x1 = (x1, x2, h1, h2, h3) = (0, 6, 16, 12, 0) U1 = 1 200 Una vez obtenida la nueva solución es necesario regresar al paso 2. ¿Es posible mejorar esta solución? Para esto hay que calcular el efecto neto sobre la función de utilidad de cada una de las variables. Ya que no es posible seguir incrementando el valor de x2 , las utilidades marginal o unitaria de cada una de las variables pueden no ser las que teníamos al comenzar. Para esto se sustituyen las ecuaciones de las variables básicas en la fo y se observa el valor de los coeficientes: U = 150x1 + 200x2 + 0 h1 + 0 h2 + 0 h3 Como las variables de holgura tienen coeficiente cero, se anulan y queda así: U1 = 150x1 + 200 (6 – h3) = 1 200 + 150x1 – 200 h3 Esta nueva expresión nos informa que por cada unidad del artículo a que se produzca la fo se incrementará en $150, y por cada unidad que se incremente h3 , se dejarán de ganar $200. (Aquí es importante señalar que la utilidad incremental por cada artículo a coincide con el valor original, pero esto no siempre es así, ya que en ciertos casos habrá que dejar de producir parte de un artículo para poder hacer el otro, con lo que la utilidad será menor.) De la ecuación (4.4b) se obtiene x1 = 2, y de la (4.4c), x1= 3; o sea, las 16 horas hombre aún disponibles permiten producir 2 unidades de a, aunque se dispone de materia prima para 3 de ellas; por lo tanto se podrán producir sólo x1 = 2; la nueva solución será ésta: x1 = 2 x2 = 6 h1 =16 –16 = 0 h2 = 12 – 8 = 4 h3 = 0 La nueva solución tiene tres variables distintas de cero y dos igual a cero; en este paso la variable entrante fue x1, y la saliente, h1 . Las tres primeras son las nuevas variables básicas. Sustituyendo la variable entrante en la fo: 128 Método simplex U2 = U2 = U2 = U2 = 1 200 + 150x1 – 200 h3 1 200 + 150x1 – 200 h3 = 1 200 +150 (2 – h3) – 200 h3 1 500 – 350 h3 1 500 La nueva solución es ésta: x2 = (x1, x2, h1, h2, h3) = (2, 6, 0, 4, 0) U2 = 1 500 Esta solución es mejor que la anterior ya que la fo aumentó. La ecuación de la fo ya no tiene variables con coeficientes positivos, por lo tanto ya no es posible incrementar la utilidad, pues si h3 tomara un valor positivo, es decir, si se produjeran menos de seis unidades del producto b, la utilidad disminuiría, por lo que se ha llegado a la solución óptima. El método Simplex en forma tabular La resolución de estos problemas por el método analítico utilizado en la sección anterior facilita entender el significado físico de cada una de las variables y parámetros con el problema concreto que se está analizando. Pero así como se puede resolver un sistema de ecuaciones lineales por sustitución o por los métodos matriciales, lo realizado no difiere mucho del método de Gauss con pivote, aunque tiene sus particularidades. Para poder aplicar el método matricial, es necesario contar con un sistema de ecuaciones, no de desigualdades, por lo que el primer paso es reescribir el sistema; a partir de allí el método realiza una serie de iteraciones hasta encontrar la mejor solución. Cada iteración es una transformación del sistema de ecuaciones que mejora la solución anterior. El método se puede bosquejar así: 1)Transformar las desigualdades del problema en un problema estándar introduciendo las variables de holgura. 2)Construir la tabla inicial. 3)Determinar la solución inicial, llamada solución básica inicial. 4)Determinar si se puede mejorar la solución dependiendo de los coeficientes de la función objetivo según el criterio de mejorabilidad: Si sí, entonces hay que calcular la nueva solución: a) determinar cuál es la variable entrante b) determinar cuál es la variable saliente c) modificar las restricciones por pivoteo 129 Programación lineal d) calcular el valor de la fo e) explicitar la nueva solución f ) volver al inciso 4 Si no, entonces se termina y la última solución es la solución óptima. Para explicar el método se resolverá el problema planteado por las ecuaciones (4.1): Máx U = 150x1 + 200x2(4.1a) 8x1 + 8x2≤ 64 (4.1b) 4x1 + 2x2≤ 24 (4.1c) x2 ≤ 6 (4.1d) 1) Se deben transformar las desigualdades de las restricciones como se hizo en (4.2): 8x1 + 8x2 + h1= 64 4x1 + 2x2 + h2 = 24 x2+ h3 = 6 (4.2b) (4.2c) (4.2d) Pero la fo también debe modificarse ya que en el método matricial todas las variables deben estar del mismo lado e igualadas al término independiente; entonces (4.1a) se convierte en: U – 150x1 – 200x2 = 0 (4.2a) Hay que señalar que sólo en esta ecuación aparece la variable U y que las variables de holgura no aparecen de manera explícita ya que representan el sobrante de recursos, y éstos no afectan a la utilidad; por lo tanto es equivalente a: U – 150x1 – 200x2 + 0 h1 + 0 h2 + 0 h3 = 0 (4.2a’) 2) Construcción de la tabla inicial. La tabla inicial tiene una columna por cada una de las variables, una columna para los términos independientes y se agrega una columna especial que se utilizará para un cálculo auxiliar. Tiene una fila especial para la fo y a continuación una fila por restricción, en este caso tres restricciones. Se vacían en la tabla los coeficientes de las ecuaciones (4.2). 130 Método simplex Cuadro 4.2 Tabla inicial del método Simplex U x1 x2 1 -150 -200 8 8 4 2 h1 h2 h3 b b/aij 0 1 64 1 1 24 1 6 3) Determinación de la solución inicial. La matriz correspondiente a las restricciones tiene cinco variables y tres ecuaciones, por lo que tendrá infinitas soluciones; para obtener alguna de las soluciones es necesario asignar un valor arbitrario a dos de ellas (5 – 3 = 2). El método Simplex asigna valor cero a aquellas variables a las que correspondan vectores columna diferentes de un vector unitario: en este caso x1 = x2 = 0, por lo tanto de la primera restricción se obtiene h1 = 64, de la segunda, h2 = 24, y h3 = 6 de la tercera restricción. De la fila correspondiente a la fo se obtiene U = 0, que coincide con la solución inicial obtenida analíticamente: Xo = (x1, x2, h1, h2, h3) = (0, 0, 64, 24, 6) Uo = 0 4) ¿Se puede mejorar esta solución? Para determinar si es mejorable la solución se analizan los coeficientes de la fo. La ecuación (4.1a) indica que se quiere maximizar U, y dado que la utilidad marginal o contribución unitaria de x1 es 150 y la de x2 es 200, se escoge la mayor (si hay empates, cualquiera de ellas), en este caso es x2. Se dice que esta es la variable entrante, cuyo valor actual es cero, y pasará a tomar el mayor valor positivo posible cumpliendo todas las restricciones para con esto incrementar el valor de U. En la tabla del Simplex, si se trata de maximizar habrá que escoger la variable que tenga el coeficiente más negativo ya que al convertir la ecuación (4.1a) en la (4.2a) se invierten los signos de los coeficientes de las variables originales.1 Como en este caso sí hay una variable que actualmente no está en la solución (vale cero) con un coeficiente en la fo que permita aumentar el valor de ésta, se puede mejorar la solución y se debe calcular una nueva solución. Pero el método introduce una variable a la solución y quita otra, por lo que es necesario determinar cuál es la variable que sale. El criterio es ver cuál es el recurso o restricción que se agota primero. Para esto se divide el término independiente de cada restricción por el coeficiente de la columna 1 Si se trata de minimizar se debe escoger el coeficiente positivo de mayor valor. 131 Programación lineal correspondiente a la variable entrante: por cada unidad que aumente x2 , se necesitan 8 horas del recurso 1; 2 unidades del recurso 2, y 1 unidad del recurso 3. El cociente entre la disponibilidad del recurso y este requerimiento se anota en la columna auxiliar; el menor de estos cocientes determina cuál es la variable saliente. En este caso el recurso 1 permite producir 8 unidades, con el recurso 2 se podrían producir 12, pero la demanda es solamente de 6, por lo que sólo se puede producir esta cantidad (véase el cuadro 4.3).2 Una vez definida la variable entrante (columna) y la saliente (fila), se utiliza como pivote el elemento intersección, al que se debe hacer igual a 1; y con las operaciones de renglón utilizadas en el método de Gauss con pivote, se transforma la matriz como se muestra en la parte inferior del cuadro: i) Para hacer 1 el pivote, se divide el renglón de la variable saliente por el coeficiente pivote; en este caso se divide el tercer renglón entre a32 . Como el elemento a32 = 1, la fila queda idéntica. ii)Se deben transformar en 0 los elementos de la columna correspondiente a la variable entrante, en este caso a12 y a22 así como el coeficiente de la fo c2. Para hacerlo se debe utilizar el renglón pivote: (renglón i = renglón i – β renglón pivote) Cuadro 4.3 Tabla de la primera iteración x1 x2 -150 -200 8 8 4 2 h1 h2 h3 b b/aij 0 1 1 1 1 64 8 24 12 6 6 -150 0 0 0 200 1 200.00 8 0 1 0 -8 16 4 0 0 1 -2 12 1 0 0 1 6 Una vez concluida la iteración se debe analizar cuál es la nueva solución. Nuevamente se observa el sistema de restricciones de 3 x 5, para obtener una solución se debe 2 La columna de U se suprime por simplicidad ya que esa variable no afecta las otras filas. 132 Método simplex dar un valor arbitrario a dos variables. El método indica asignar el valor cero a aquellas variables cuyos vectores columna no sean un vector unitario; por lo tanto, si x1 = h3 = 0, la solución del sistema es x2 = 6, h1 = 16, h2 = 12, que coincide con la solución obtenida en el apartado anterior: x1 = (x1, x2, h1, h2, h3) = (0, 6, 16, 12, 0) U1 = 1 200 En este momento hay que regresar al punto 4), ¿se puede mejorar esta solución? Observando el renglón de la fo se encuentra que aún hay un coeficiente negativo, por tanto sí se puede mejorar la utilidad, por lo que debemos repetir el proceso. a) Determinar la variable entrante: x1. b) Determinar la variable saliente: mín (16 / 8, 12 / 4, 6 / 0) = (2, 3, -) = 2, entonces variable saliente h1 . Aquí no se pudo realizar el tercer cociente pues se trataba de una división entre cero; no se toman en cuenta las variables a las que correspondan divisiones entre cero o cocientes negativos. c) El pivote debe estar en la posición (1, 1), por lo que se divide el primer renglón entre 8 y luego se utiliza este renglón para hacer cero los demás elementos de la columna 1. d) Se lee la solución obtenida en la nueva tabla en la que escogiendo h1 = 0 y h3 = 0 se obtienen x1 = 2, x2 = 6 y h2 = 4, con una utilidad de 1 500, que corresponde con la obtenida en la sección anterior (cuadro 4.4). x2 = (x1, x2, h1, h2, h3) = (2, 6, 0, 4, 0) U2 = 1 500 Cuadro 4.4 Tabla de la segunda iteración -150 0 0 0 200 1 200.00 8 0 1 0 -8 16 4 0 0 1 -2 12 1 0 0 1 6 0 0 18.77 0 50 1 500.00 1 0 1/8 0 -1 2 0 0 -1 / 2 0 1 133 1 2 4 0 1 6 Programación lineal e) regresar al punto 4: ¿se puede mejorar esta solución? Observando la fila de la fo de la segunda iteración, se encuentra que ya no hay un coeficiente negativo, por tanto no se puede mejorar la utilidad; esta es la solución óptima. Cuadro 4.5. Tabla completa del Simplex x1 x2 h1 -150 -200 8 8 4 2 h2 h3 b 0 1 64 1 1 24 1 6 -150 0 0 0 200 1 200 8 0 1 0 -8 16 4 0 0 1 -2 12 1 0 0 1 6 0 0 18.77 0 50 1 500 1 0 1/8 0 -1 2 0 0 -1 / 2 1 2 4 0 1 0 0 1 6 En el cuadro 4.5 se presentan todas las iteraciones. Se observa que al terminar la segunda iteración no queda ningún coeficiente negativo en el renglón correspondiente a la fo, por lo que ésta es la solución óptima. En la solución h1 = 0, por lo tanto, se utilizarán todas las horas disponibles: h3 = 0, lo que indica que se cubrirá exactamente la demanda del artículo b; se deben producir 2 unidades del artículo a y 6 del artículo b, y sobran 4 unidades de materia prima, con lo que se obtiene una utilidad de 1 500. x2 = (x1, x2, h1, h2, h3) = (2, 6, 0, 4, 0) U2 = 1 500 La adaptación del método Simplex a problemas no estándar Restricciones “igual que” y “mayor o igual que” En las secciones anteriores se analizó el caso estándar en el que se trata de maximizar un objetivo, sujeto a restricciones de menor o igual. En esta sección se mostrarán las mo134 Método simplex dificaciones necesarias para llegar a la tabla inicial del Simplex cuando las restricciones son “mayor o igual que” e “igual que”. Cuando se trata de una desigualdad de la forma, 2x + 4y ≥ 20 para poder escribirla como una igualdad, la ecuación quedará así: 2x + 4y – h = 20 Pero esto no es suficiente para poder utilizar el método Simplex. Cuando se tiene una desigualdad ≥, se introduce una variable de holgura con coeficiente negativo y por lo tanto no generará el vector unitario correspondiente; para solucionar esto se agrega otra variable llamada variable artificial, que no tiene un sentido físico y por lo tanto es necesario que no aparezca en la solución final. La ecuación anterior queda así: 2x + 4y – h + A = 20 Esto nos indica que una restricción del tipo mayor o igual genera dos variables auxiliares, una de holgura o excedencia, en este caso, y una variable artificial. Cuando se trata de restricciones de igualdad, a pesar de que no se debería modificar la ecuación, como el método Simplex necesita que la matriz agrandada tenga una matriz unitaria, se necesita agregar una variable artificial: 3x – 2y = 12 → 3x – 2y + A = 12 En el caso de la igualdad, es muy claro que en la solución final A debe ser igual a cero, lo mismo debe ocurrir en el caso de mayor o igual. Para poder anular las variables artificiales, es necesario incluirlas en la fo. Mientras las variables de holgura no afectan a la fo pues se trata de sobrantes de recursos, ya sea horas hombre o materias primas o de excedentes, las variables artificiales no tienen un significado físico, y para garantizar que éstas desaparezcan, el método Simplex les asigna un valor contrario al objetivo, que puede interpretarse como una multa. Para entender el proceso se resolverá el siguiente problema: Máx z = 30x + 70y s.a. 20x + 15y ≤ 300 10x + 4y ≥ 100 x, y ≥ 0 135 Programación lineal La primera restricción se transforma en: 20x + 15y + h1 = 300 donde h1 es el sobrante de las 300 unidades del recurso y se mide en las mismas unidades. La segunda restricción es una desigualdad de ≥, por lo tanto la igualdad queda así: 10x + 4y – h2 + A2 = 100 (Se utilizó A2 aunque no exista A1 solamente para indicar que corresponde a la segunda restricción, pero puede ponérsele cualquier nombre.) La fo quiere maximizar: z = 30x + 70y Para que la variable artificial no aparezca en la solución del problema (A = 0), se introduce en la fo con un coeficiente tal que se oponga al objetivo de maximizar: z = 30x + 70y – MA2 M es el valor de la multa que se pagará por cada unidad que valga A. (Lo que se dirá a continuación corresponde al método de la gran M aunque hay otros como el método de la doble fase.) Para poder introducirlo en la tabla del Simplex, primero debe rescribirse la fo: z – 30x – 70y + MA2 = 0 El cuadro 4.6 muestra la resolución de este problema. Pero hay una diferencia en el cuadro inicial; en este caso, cuando hay variables artificiales, la fila de la fo aparece dos veces porque es necesario volver a calcularlo previamente. Si se observan las filas de las restricciones, se trata de un sistema de dos ecuaciones con cinco incógnitas, por lo que, para encontrar una solución, se le debe dar valor arbitrario a tres variables. Se puede observar que la columna 3 y 5 (h1 y A2, respectivamente) corresponden a vectores unitarios que conforman la matriz identidad de 2 x 2, y son las que inicialmente deben ser distintas de cero. Pero si las variables h1 = A2 ≠ 0 son la solución básica inicial, es necesario que los coeficientes de estas variables en la fo sean cero. Por eso es necesario modificar la fo restándole M veces la segunda restricción. El resultado es el que se muestra en la segunda fila. En este momento se puede empezar con el método tal como se utilizó anteriormente. 136 Método simplex La solución inicial es Xo = (x, y, h1, h2, A2) = (0, 0, 300, 0, 100) Uo = – 100M En este caso como A = 100 la utilidad inicial es negativa igual a 100 multas. El valor de M se considera mucho más grande que los otros coeficientes de la fo. El siguiente paso es elegir la variable entrante entre las que tengan coeficiente negativo en la fo; entonces entra x ya que -30 – 10 M < -70 – 4 M (M >> 30, 70) y la variable saliente es la correspondiente a la segunda restricción ya que 10 < 15, entonces será la variable A2. Cuadro 4.6. Tabla del Simplex del problema z 1 x y -30 -70 -10M -30 h1 h2 A2 b b/aij 0 0 M 0 -4M -70 0 M 0 -100M 20 15 1 0 0 300 15 10 4 0 -1 1 100 10 0 -58 0 -3 M+3 300.00 0 7 1 2 -2 100 14.29 1 0.4 0 -0.1 0.1 10 25 0 0 8.29 12.86 M -12.85 528.00 0 1 0.14 0.29 -0.28 14.29 1 0 -0.01 -0.21 0.21 4.29 La solución después de realizar una iteración es: x1 = (x, y, h1, h2, A2) = (10, 0, 100, 0, 0) U1 = 300 La solución no es óptima porque aún queda un coeficiente negativo en la fo; la variable y entra, y sale h1 por ser el recurso que se acaba antes. La solución después de realizar la segunda iteración es: x2 = (x, y, h1, h2, A2) = (4.28, 14.29, 0, 0, 0) U1 = 528 Y se trata de la solución óptima porque no quedan coeficientes negativos en la fo, por lo tanto no se puede mejorar. 137 Programación lineal Caso de minimización Por último hay que analizar el caso en que se quiera minimizar, por ejemplo, los costos o el tiempo. Se tiene una función como esta: Mín z = 3x – 2y +5w Por cada unidad que aumente x, el valor de z aumentará tres; por cada unidad que aumente y, el valor de z disminuirá en dos unidades, y por cada unidad que aumente w, el valor de z se incrementará en cinco unidades. Es claro que la variable que conviene aumentar es y, pues hace disminuir la fo, lo que coincide con el objetivo de minimizar. Cuando se reescribe la ecuación para introducirla en la tabla del Simplex, la ecuación queda así: z – 3x + 2y – 5w = 0 Para escoger cuál es la variable de entrada, se debe escoger la que más convenga; en este caso, como se invirtieron los signos, habrá que elegir de entre las variables que tengan coeficiente positivo en el renglón de la fo, la que tenga el mayor coeficiente. Si en un problema de minimización hay restricciones de igualdad o de “mayor que”, aparecerán las variables artificiales, y como ya se vio éstas deben afectar a la fo en sentido negativo; debe ser una penalización. Como se trata de minimizar, las variables artificiales aparecerán en la fo como: Mín z = 3x – 2y + 5w + MA1 + MA2 y en la función modificada: z – 3x + 2y – 5w – MA1 – MA2 = 0 El resto del procedimiento es exactamente el mismo que para el caso de maximización. El procedimiento se muestra en el siguiente ejemplo: Mín z = x – 2y s.a. x+y>2 y < 3 x, y > 0 138 Método simplex Después de modificar las ecuaciones, queda así: Mín z = x – 2 y + MA x + y – h1 + A = 2 y + h2 = 3 Cuadro 4.7 z x y h1 1 -1 2 -1 + M 2+M -M 1 1 h2 A -M 0 0 0 2M -1 0 1 2 1 0 1 0 3 -3 0 2 0 -2 -4 1 1 -1 0 1 2 -1 0 1 1 -1 1 -1 0 0 -2 0 -6 0 1 0 1 0 3 -1 0 1 1 -1 1 Del cuadro 4.7 se observa que la solución óptima es: z = -6, (x, y, h1, h2) = (0, 3, 1, 0) Casos especiales: empates, problemas inconsistentes Hay que agregar unas palabras para considerar los casos especiales como empate en las variables de entrada o de salida, problemas con soluciones múltiples, degeneramiento y problemas sin solución. El método Simplex utiliza un criterio de mejorabilidad para determinar cuál es la variable entrante comparando los coeficientes en la fo; en algunos casos puede haber dos coeficientes iguales; en estos casos se debe escoger arbitrariamente cualquiera de ellos. Lo mismo puede ocurrir con la variable de salida, puede ser que simultáneamente se acaben dos recursos. También se escogerá como variable de salida cualquiera de ellas. Lo importante aquí es que el problema se vuelve degenerado, esto es, alguna de las variables básicas es igual a cero. En estos casos se puede llegar al ciclamiento de la solu- 139 Programación lineal ción, y el Simplex queda como atrapado en una serie de vértices y no puede converger a la solución óptima. Este problema ocurre muy raramente y en modelos grandes. El hecho de llegar a una solución degenerada no implica que no se pueda encontrar la solución óptima, pero el problema es que la información que se obtiene con el análisis de sensibilidad a veces no es aceptable. Se había visto con el método gráfico que en ciertos casos la fo puede ser paralela a uno de los lados de la solución factible, y entonces la función se optimiza en ambos vértices y en todos los puntos intermedios. En el Simplex se llega a un punto en que la solución alterna entre dos puntos con igual valor en la función objetivo. Lecturas complementarias Arreola y Arreola (2003), especialmente los capítulos 7 y 9. Budnick (2007), las secciones 11.2 y 11.3. Hillier (2003), el capítulo 4. Problemas de la unidad 4 Para cada uno de los siguientes problemas agregue las variables de holgura, excedencia y las variables artificiales; construya la tabla inicial del Simplex cuando sea posible. Problema 4.1 3x – 2y + 5z ≤ 1 200 5x – 2y – 3z ≥ 0 Problema 4.2 120 M – 100 N – R ≥ 1/100 20 M + R = 2/7 N ≤ 30 140 Método simplex Problema 4.3 Máx 10x1 + 25x2 + 30x3 + 40x4 + x5 s.a. 5x1 – 3x3≤ 30 x1≥ 5 x1≤ 30 x2 + 3x3 – 3x5 ≥ 50 x3 + x4 + x5= 18 x 1, x 2, x 3, x 4, x 5 ≥ 0 ¿Cuántas ecuaciones y cuántas incógnitas tiene este problema?, ¿cuántas variables deben igualarse a cero en la solución básica inicial? Para cada uno de los siguientes problemas plantee el sistema de ecuaciones modificado, construya el cuadro y obtenga la solución del problema. En cada iteración señale cuál es la variable entrante y la saliente, y cuál es la solución alcanzada. Problema 4.4 Máx 10x + 20y s.a. 2x + y ≤ 16 x + y ≤ 10 x, y ≥ 0 Problema 4.5 Máx z = 6xa + 8xb + 10xc s.a. xa + 2.5xb ≤ 1 200 2xa + 3xb + 4xc ≤ 2 600 xa, xb, xc ≥ 0 141 Programación lineal Problema 4.6 Máx z = 25xa + 25xb s.a. xa + xb ≤ 12 2xa + 0.5xb ≤ 12 xa≤ 5 xb ≤ 10 xa, xb ≥ 0 Problema 4.7. Máx 16x + 25y s.a. 2x + 4y ≤ 40 x + 2y ≤ 30 x, y ≥ 0 Problema 4.8 Máx z = 10xa + 3xb + 4xc s.a. 8xa + 2xb + 3xc ≤ 400 4xa + 3xb≤ 200 xc ≤ 40 xa, xb, xc ≥ 0 Problema 4.9 Máx 2 x – 3 y + 4 z s.a. x + 2y ≥ 6 2x + z ≤ 12 y≥ 5 z≤ 1 x, y, z ≥ 0 142 Método simplex Respuesta a los problemas de la unidad 4 Problema 4.1. 3x – 2y + 5z + h1 = 1 200 5x – 2y – 3z – h2 + A = 0 Problema 4.2. 120 M – 100 N – R – h1 + A1= 0.01 20 M + R + A2= 2/7 N+ h3 = 30 Problema 4.3. Cinco ecuaciones (restricciones) y doce variables, por lo tanto, siete variables deben igualarse a cero. Problema 4.4. (x, y, h1, h2) = (6, 4, 0, 0), z = 140 Problema 4.5. (xa, xb, xc, h1, h2) = (1 200, 0, 50, 0, 0), z = 7700 Problema 4.6. (xa, xb, xc, h1, h2, h3, h4) = (2, 10, 0, 3, 3, 0), z = 300 o (xa, xb, xc, h1, h2, h3, h4) = (4, 8, 0, 0, 1, 2), z = 300 Problema 4.7. (x, y, h1, h2) = segmento (0, 12) a (12, 6), z = 96 Problema 4.8. (xa, xb, xc, h1, h2) = (0, 66.6, 88.88, 0, 0), z = 55.55 Problema 4.9. (x, y, z) = (0, 5, 1), mínimo -11 143