3.3.2 Detalles de cálculo del algoritmo sı́mplex En esta sección se explican los detalles de cálculo de una iteración sı́mplex, que incluyen las reglas para determinar las variables de entrada y de salida, ası́ como para detener los cálculos cuando se ha llegado a la solución óptima. Como medio de explicación usaremos un ejemplo numérico. Ejemplo 3.3-1 Usaremos el modelo de Reddy Mikks (Ejemplo 2.1-1) para explicar los detalles del método sı́mplex. El problema se expresa en forma de ecuaciones como sigue: Maximizar z = 5x1 + 4x2 + 0s1 + 0s2 + 0s3 + 0s4 s.a. 6x1 + 4x2 + s1 x1 + 2x2 + s2 = = 24 (materia prima M1) 6 (materia prima M2) −x1 + x2 + s3 x2 + s 4 x1 , x 2 , s 1 , s 2 , s 3 , s 4 = 1 (lı́mite de demanda) = 2 (lı́mite de demanda) 0 ≥ Las variables s1 , s2 , s3 y s4 son las holguras asociadas con las restricciones respectivas. A continuación se expresará la función objetivo como sigue: z − 5x1 − 4x2 = 0 De esta manera, la tabla inicial sı́mplex se puede representar como sigue: Básica z s1 s2 s3 s4 z 1 0 0 0 0 x1 -5 6 1 -1 0 x2 -4 4 2 1 1 s1 0 1 0 0 0 s2 0 0 1 0 0 s3 0 0 0 1 0 s4 0 0 0 0 1 Solución 0 24 6 1 2 fila z fila s1 fila s2 fila s3 fila s4 En el diseño de la tabla se especifica el conjunto de variables básicas y no básicas, y también se muestra la solución asociada con la iteración de inicio. Como se explicó en la sección 3.3.1, las iteraciones sı́mplex comienzan en el origen (x1 , x2 ) = (0, 0). Ası́, el conjunto asociado de variables no básicas y básicas se define como sigue: Variables no básicas (cero) Variables básicas : (x1 , x2 ) : (s1 , s2 , s3 , s4 ) Dado que las variables no básicas (x1 , x2 ) = (0, 0), y al observar el arreglo especial 0-1 de los coeficientes de las variables básicas (s1 , s2 , s3 , s4 ) en la tabla, se dispone de inmediato de la siguiente solución (sin más cálculos): 1 z = 0, s1 = 24, s2 = 6, s3 = 1, s4 = 2 Esta solución se muestra en la tabla, con la lista de las variables básicas en la columna Básica de la izquierda, y sus valores en la columna Solución de la derecha. De hecho, la tabla define el punto esquina actual especificando sus variables básicas y sus valores, ası́ como el valor correspondiente para la función objetivo, z. Recuerde que las variables no básicas (las que no aparecen en la lista Básica) siempre son igual a cero. ¿Es óptima la solución de inicio? En la sección 3.3.1 dijimos que la variable no básica con el coeficiente más positivo en una función objetivo de maximización se selecciona para entrar a la solución básica. Esta regla se basa en expresar la función objetivo como z = 5x1 + 4x2 . Como la tabla sı́mplex expresa la función objetivo en la forma z − 5x1 − 4x2 = 0, la variable de entrada es x1 , porque tiene el coeficiente más negativo en la función objetivo, que es de maximización. Si fuera el caso que todos los coeficientes de la función objetivo fueran ≥ 0, no serı́a posible mejorar z y eso querrı́a decir que se habrı́a llegado al óptimo. Para determinar la variable de salida, en forma directa con la tabla, se calculan las intersecciones, o coordenadas (x1 ) al origen, de todas las restricciones con la dirección no negativa del eje x1 (recuérdese que x1 es la variable de entrada). Esas intersecciones son las razones del lado derecho de las ecuaciones (columna Solución) entre los coeficientes de restricción correspondientes, abajo de la variable de entrada x1 , como se ve en la siguiente tabla: Básica s1 s2 s3 s4 Entra x1 6 1 -1 0 Solución 24 6 1 2 Razón (o intersección) x1 = 24/6 = 4 ← mı́nimo x1 = 6/1 = 6 x1 = 1/(−1) = −1 (ignorar) x1 = 2/0 = ∞ (ignorar) Como se ve en la figura 3.6, las razones no negativas son iguales a las intersecciones en dirección de x1 creciente. Las razones (intersecciones) que corresponden a s3 y s4 no se toman en cuenta, porque no limitan a x1 en la dirección no negativa. La razón no negativa mı́nima corresponde a s1 básica, y quiere decir que s1 es la variable de salida (su valor es cero en la nueva iteración). El valor de la variable de entrada x1 en la nueva solución también es igual a la razón mı́nima: x1 = 4 (compárela con el punto B de la figura 3.6). El aumento correspondiente del valor de la z objetivo es ($5 × 4ton) = $20. El resultado final de “intercambiar” las variables de entrada y de salida es que las variables no básicas y básicas en el nuevo punto solución (el punto B) son: 2 Figure 1: Variables no básicas (cero) Variables básicas : (s1 , x2 ) : (x1 , s2 , s3 , s4 ) Ahora se deben manipular las ecuaciones de la última tabla de modo que la columna Básica y la columna Solución identifiquen la nueva solución en el punto B. El proceso se llama operaciones de Gauss-jordan. Los cálculos son tediosos y voluminosos, por lo que la computadora es el medio esencial para resolver los programas lineales. Se pide al lector que haga la prueba con cálculos a mano, al menos una vez, para que pueda apreciar cómo funciona el método. Después de esta experiencia es posible que nunca deba volver a usar cálculos a mano. La siguiente es una réplica de la tabla de inicio. Asocia a la columna pivote y a la fila pivote con las variables de entrada y de salida, respectivamente. A la intersección de la columna pivote con el fila pivote se le llama pivote o elemento pivote. 3 ↓ Básica z x1 x2 z 1 -5 -4 ← s1 0 6 4 s2 0 1 2 s3 0 -1 1 s4 0 0 1 Columna pivote Los cálculos de Gauss-Jordán necesarios básica son de dos tipos: s1 0 1 0 0 0 s2 0 0 1 0 0 s3 0 0 0 1 0 s4 0 0 0 0 1 Solución 0 24 6 1 2 fila pivote para obtener la nueva solución 1. fila pivote Nueva fila pivote = fila pivote actual ÷ Elemento pivote 2. Todos los demás renglones, incluyendo z Nuevo fila = (fila actual) - (Su coeficiente en la columna pivote) × (Nueva fila pivote) Esos cálculos se aplican a la tabla anterior en la siguiente forma: 1. 2. 3. 4. 5. Nueva Nueva Nueva Nueva Nueva fila fila fila fila fila pivote x1 = fila pivote s1 actual ÷ 6 z = fila z actual - (-5) × Nueva fila pivote s2 = fila s2 actual - (1) × Nueva fila pivote s3 = fila s3 actual - (-1) × Nueva fila pivote s4 = fila s4 actual - (0) × Nueva fila pivote La tabla nueva que corresponde a la nueva solución básica (x1 , s2 , s3 , s4 ) se convierte en (¡verifı́quelo!): ← Básica z x1 s2 s3 s4 z 1 0 0 0 0 x1 0 1 0 0 0 ↓ x2 -2/3 2/3 4/3 5/3 1 Columna pivote s1 5/6 1/6 -1/6 1/6 0 s2 0 0 1 0 0 s3 0 0 0 1 0 s4 0 0 0 0 1 Solución 20 4 2 5 2 Observe que la nueva tabla tiene las mismas propiedades que la de inicio. Cuando se igualan las variables no básicas x2 y s1 a cero, la columna Solución muestra en forma automática la nueva solución básica (x1 = 4, s2 = 2, s3 = 5, s4 = 2). El nuevo valor objetivo correspondiente es z = 20. Este “acondicionamiento” de la tabla es el resultado de aplicar las operaciones fila de GaussJordán. 4 fila pivote La última tabla identifica a x2 y s2 como las variables de entrada y de salida, respectiva mente. La justificación de esas selecciones es la siguiente: al examinar la tabla se ve que no es óptimo, porque la variable no básica x 2 tiene un coeficiente negativo en el fila z. Este razonamiento, igual al que usamos en la tabla de inicio, se aclara al expresar el fila z en la forma 5 2 x2 − s1 + 20 3 6 Es benéfico un aumento en x2 respecto a su valor actual de cero, porque hará aumentar el valor de z, y por consiguiente x2 es la variable de entrada. A continuación, los cálculos de razones de la siguiente tabla indican que s 2 es la variable de salida. z= Básica x1 s2 s3 s4 Entra x2 2/3 4/3 5/3 1 Razón (o intersección) x2 = 4÷ 2/3 =6 x2 = 2÷4/3=1.5← mı́nimo x2 = 5÷5/3=3 x2 = 2÷1=2 Solución 4 2 5 2 Se ve que x2 = 1.5, y que el aumento correspondiente en z es 2/3 × 1.5 = 1, dando la nueva z = 20 + 1 = 21. Dadas x2 y s2 como variables de entrada y de salida, necesitamos aplicar las siguientes operaciones de fila de Gauss-Jordan para obtener la siguiente tabla. 1. 2. 3. 4. 5. Nuevo Nuevo Nuevo Nuevo Nuevo fila fila fila fila fila pivote x2 = fila pivote s2 actual ÷ 4/3 z = fila actual z − (−2/3)× Nuevo fila pivote x1 = fila x1 actual - (2/3)× Nuevo fila pivote s3 = fila s3 actual - (3) × Nuevo fila pivote s4 = fila s4 actual - (1) × Nuevo fila pivote Con estos cálculos se obtiene la siguiente tabla: Básica z x1 x2 s3 s4 z 1 0 0 0 0 x1 0 1 0 0 0 x2 0 0 1 0 0 s1 3/4 1/4 -1/8 3/8 1/8 s2 1/2 -1/2 3/4 -5/4 -3/4 s3 0 0 0 1 0 s4 0 0 0 0 1 Solución 21 3 3/2 5/2 1/2 Como ninguno de los coeficientes del fila z asociados con las variables no básicas y s2 son negativos, esta última tabla es óptima. 5 Se puede leer la solución óptima en la tabla sı́mplex como sigue: los valores óptimos de las variables en la columna Básica se ven en la columna Solución del lado derecho, y se pueden interpretar del siguiente modo Variable de desición x1 Valor óptimo 3 x2 3/2 z 21 Recomendación Producir 3 ton diarias de pinturas para exteriores Producir 1.5 ton diarias de pinturas para interiores La utilidad diaria es de $21.000 El lector puede comprobar que los valores s1 = s2 = 0, s3 = 5/2, s4 = 1/2 son consistentes con los valores dados de x1 y x2 . La tabla sı́mplex muestra una gran cantidad de información adicional, que comprende: 1. El estado de los recursos. 2. El valor por unidad (precios duales) de los recursos. 3. Todos los datos necesarios para efectuar un análisis de sensibilidad con la solución óptima. Un recurso se llama escaso si las actividades (variables) del modelo lo usan por completo. En caso contrario, es abundante. Esta información se obtiene en la tabla óptima revisando el valor de la variable de holgura asociada con la restricción que representa al recurso. Si la variable de holgura es cero, el recurso se usa por completo, y el recurso es escaso. En caso contrario, una holgura positiva indica que el recurso es abundante. En el modelo de Reddy Mikks, las cuatro restricciones se clasifican como sigue: Recurso Materia prima, M1 Materia prima, M2 Lı́mite de demanda 1 Lı́mite de demanda 2 Variable de holgura s1 = 0 s2 = 0 s3 = 5/2 s4 = 1/2 Estado o condición Escasa Escasa Abundante Abundante El estado de los recursos indica que está garantizado un aumento en la disponibilidad de las materias primas M1 y M2, porque los dos son escasos. La cantidad del aumento se puede calcular con procedimientos adecuados de análisis de sensibilidad. Este punto se explicó en las secciones 2.3.2 y 2.3.3. El ejemplo 3.3-1 es de una maximización. En una minimización, la selección de las variables de salida es igual que en el caso de la maximización. Para la variable de entrada, ya que máx z = -mı́n(-z), el caso de minimización selecciona la variable de entrada como la variable no básica con el coeficiente objetivo más positivo, y se llega a z mı́nima cuando todos los coeficientes del fila z son no 6 positivos. Las reglas para seleccionar las variables de entrada y de salida se llaman condiciones de optimalidad y de factibilidad. Por comodidad se resumirán a continuación esas condiciones, y los pasos del método sı́mplex. Condición de optimalidad. La variable de entrada en un problema de maximización (minimización) es la variable no básica que tenga el coeficiente más negativo (positivo) en el fila de z. Los empates se rompen en forma arbitraria. Se llega al óptimo en la iteración en la que todos los coeficientes de las variables no básicas en el fila z son no negativos (no positivos). Condición de factibilidad. En los problemas de maximización y de minimización, la variable de salida es la variable básica asociada con la mı́nima razón no negativa (con denominador estrictamente positivo). Los empates se rompen en forma arbitraria. Los pasos del método sı́mplex son los siguientes: Paso 0. Determinar una solución básica factible de inicio. Paso 1. Seleccionar una variable de entrada aplicando la condición de optimalidad. Detenerse si no hay variable de entrada; la última solución es la óptima. Paso 2. Seleccionar una variable de salida aplicando la condición de factibilidad. Paso 3. Determinar la nueva solución básica con los cálculos adecuados de Gauss-Jordán. Ir al paso 1. 7