Programación Lineal para la Ingeniería Técnica Volver al bloque 3 12.1. EL MODELO DUAL A todo programa lineal, llamado problema primal, le corresponde otro que se denomina problema dual. Las relaciones existentes entre ambos problemas son las siguientes: • El dual tiene tantas variables como restricciones existen en el primal. • El dual tiene tantas restricciones como variables tiene el primal. • Los coeficientes de la función objetivo del primal son los términos independientes de las restricciones del dual. • Los términos independientes de las restricciones del primal son los coeficientes en la función objetivo del dual. • La matriz de coeficientes de las restricciones del dual es igual a la traspuesta de la del primal. Se pueden distinguir dos tipos de problemas duales: 1. Duales simétricos: para primales que incluyan restricciones de desigualdad. 2. Duales asimétricos: para primales en forma estándar, es decir, con restricciones de igualdad. Otro tipo de relaciones entre los problemas primal y dual son las siguientes: 77 Programación Lineal para la Ingeniería Técnica • Para duales simétricos el sentido de desigualdad de las restricciones del dual es inverso al de las del primal; mientras que para asimétricos, las restricciones del dual son de sentido menor o igual en caso de que el problema primal sea de minimización, y de mayor o igual en caso de maximización. Además, las variables del dual, variables duales, no están sujetas a la condición de no negatividad. • El problema dual de uno de minimización es de maximización y viceversa. • El dual del programa dual es el primal. Según estas afirmaciones, el problema dual queda unívocamente determinado por su primal. Si x1 , K , xn son las variables primales, y1 , K , y m las correspondientes variables duales, el planteamiento del problema dual es: 1. Duales simétricos: Primal: max s.a.: f ( X ) = c1 x1 + K + c n xn a11 x1 + K + a1 n xn ≤ b1 a m1 x1 + K + amn xn ≤ bm xi ≥ 0, i = 1, K , n Dual: min s.a.: g (Y ) = b1 y1 + K + bm ym a11 y1 + K + am1 ym ≥ c1 a1n y1 + K + amn ym ≥ cn yi ≥ 0, i = 1, K , m Se pueden resumir primal y dual en un cuadro como el que sigue, donde el primal se lee verticalmente y el dual de forma horizontal: 78 Programación Lineal para la Ingeniería Técnica PROGRAMAS a11 a12 K a1 n M M M M a m1 am 2 K amn DUAL (MIN.) y1 ≥ 0 y2 ≥ 0 PRIMAL (MAX.) x1 ≥ 0 ym ≥ 0 K ≥ ≥ K ≥ c1 c2 K cn ≤ b1 M M M xn ≥ 0 ≤ bm variables relación constantes 2. Duales asimétricos: a) Primal: max s.a.: f ( X ) = c1 x1 + K + c n xn a11 x1 + K + a1 n xn = b1 a m 1 x1 + K + a mn xn = bm xi ≥ 0, i = 1, K , n Dual: min s.a.: g (Y ) = b1 y1 + K + bm ym a11 y1 + K + am1 ym ≥ c1 a1n y1 + K + amn ym ≥ cn y i , i = 1, K , m , no restringidas en signo b) Primal: min s.a.: f ( X ) = c1 x1 + K + c n xn a11 x1 + K + a1 n xn = b1 a m 1 x1 + K + a mn xn = bm xi ≥ 0, i = 1, K , n Dual: max s.a.: g (Y ) = b1 y1 + K + bm ym a11 y1 + K + am 1 y m ≤ c1 a1 n y1 + K + a mn y m ≤ c n y i , i = 1, K , m , no restringidas en signo 79 Programación Lineal para la Ingeniería Técnica La tabla anterior queda ahora de la siguiente forma: PROGRAMAS DUAL MIN. (MAX.) PRIMAL MAX. (MIN.) a1 n x1 ≥ 0 a11 a12 K M M M M a m1 am 2 K amn y1 ≥ (≤ ) c1 y2 ym K ≥ (≤ ) c2 K K ≥ (≤ ) = b1 M M M xn ≥ 0 = bm variables relación constantes cn Nota: Sin distinguir en el caso de duales simétricos o asimétricos, podemos formular una tabla general, que reúne las relaciones entre el problema primal y dual, sea cual sea su formulación: VARIABLES Problema de minimización ≥ 0 ≤ 0 no restringidas ≥ RESTRICCIONES ≤ = Problema de maximización ≤ ≥ RESTRICCIONES = ≥ 0 ≤ 0 no restringidas VARIABLES La ventaja de esta tabla es que se puede leer de derecha a izquierda o viceversa, según el problema primal sea de maximización o minimización, respectivamente. Además, en el problema primal pueden darse diferentes combinaciones en cuanto al sentido de sus desigualdades o al signo de sus variables. 80 Programación Lineal para la Ingeniería Técnica Ejemplos: Volver a problema primal 1. Primal: max s.a.: 2 x1 + x2 x1 + 5 x2 ≤ 10 x1 + 3x2 ≤ 6 2 x1 + 2 x 2 ≤ 8 x1 , x2 ≥ 0 Como el primal es de maximización, el dual será de minimización, por lo que leemos la última tabla de derecha a izquierda. Esto nos dice que por ser todas las restricciones de menor o igual, las variables duales serán de signo no negativo; además por ser las variables primales no negativas, todas las restricciones duales serán de mayor o igual. El problema dual quedará por lo tanto como: Volver a problema dual 2. Dual min s.a.: 10 y1 + 6 y 2 + 8 y3 y1 + y2 + 2 y3 ≥ 2 5 y1 + 3 y 2 + 2 y3 ≥ 1 y1 , y 2 , y3 ≥ 0 Primal min s.a.: 5 x1 + 2 x2 + x3 2 x1 + 3x 2 + x3 ≥ 20 6 x1 + 8x 2 + 5 x3 ≥ 30 7 x1 + x2 + 3x3 ≥ 40 x1 + 2 x 2 + 4 x3 ≥ 50 x1 , x2 , x3 ≥ 0 En este caso, leemos la tabla de izquierda a derecha, resultando el dual: Dual max s.a.: 20 y1 + 30 y2 + 40 y3 + 50 y 4 2 y1 + 6 y 2 + 7 y3 + y 4 ≤ 5 3 y1 + 8 y 2 + y3 + 2 y 4 ≤ 2 y1 + 5 y 2 + 3 y 3 + 4 y4 ≤ 1 y1 , y 2 , y3 , y 4 ≥ 0 81 Programación Lineal para la Ingeniería Técnica 3. Primal min s.a.: x1 + 3x 2 − 2 x3 4 x1 + 8x 2 + 6 x3 = 25 7 x1 + 5 x2 + 9 x3 = 30 x1 , x2 , x3 ≥ 0 Ahora, aunque como en el ejemplo anterior hay que leer la tabla de izquierda a derecha, la formación del dual será ligeramente diferente a la de dicho ejemplo. 4. Dual max s.a.: 25 y1 + 30 y2 4 y1 + 7 y 2 ≤ 1 8 y1 + 5 y 2 ≤ 3 6 y1 + 9 y2 ≤ − 2 y1 , y2 no restringidas en signo Primal max s.a.: 3x1 + x 2 x1 + x2 = 7 2 x1 + 3x 2 = 8 x1 , x2 ≥ 0 Al igual que el ejemplo 1, leemos la tabla de derecha a izquierda, resultando: Dual min s.a.: 7 y1 + 8 y2 y1 + 2 y 2 ≥ 3 y1 + 3 y 2 ≥ 1 y1 , y2 no restringidas en signo Nota: La forma del dual asimétrico (ejemplos 3 y 4) está determinada exclusivamente por la forma del dual simétrico. Si pasamos a forma estándar el problema con restricciones de desigualdad y calculamos el dual, que sería dual asimétrico, el problema que se obtiene es el mismo que le correspondería al primal como dual simétrico. Por ejemplo: 82 Programación Lineal para la Ingeniería Técnica max s.a.: f ( X ) = c1 x1 + K + c n xn a11 x1 + K + a1 n xn ≤ b1 a m1 x1 + K + amn xn ≤ bm xi ≥ 0, i = 1, K , n Si pasamos a forma estándar: max f ( X ) = c1 x1 + s.a.: a11 x1 + a m1 x1 + K K K + cn xn + 0 xnH+ 1 + + a1n xn + x nH+ 1 = b1 + amn xn + xnH+ m = bm K + 0 x nH+ m xi ≥ 0, i = 1, K , n , xnH+ j ≥ 0, j = 1, K , m El correspondiente dual asimétrico de este último problema primal es: min s.a.: g (Y ) = b1 y1 + K + bm ym a11 y1 + K + am1 ym ≥ c1 a1n y1 + K + amn ym ≥ cn y1 ≥ 0 ym ≥ 0 Es el mismo que el dual simétrico que le correspondería al problema sin transformar en su formulación estándar. Una vez visto que los duales simétricos pueden convertirse en asimétricos utilizando variables de holgura, vamos a enunciar un teorema de dualidad válido para ambos. 83 Programación Lineal para la Ingeniería Técnica Teorema: Sea P un problema de Programación Lineal cuya región de factibilidad es F, y sea D su problema dual de región de factibilidad G. Entonces: i) Si X ∈ F , Y ∈ G , se cumple que f ( X ) ≤ g (Y ) . ii) Si para algún X ∈ F y algún Y ∈ G se verifica que f ( X ) = g (Y ) , entonces X es solución óptima de P, Y es solución óptima de D. iii) Si uno de los problemas P ó D tienen una solución óptima X * ó Y * , el otro también la tiene, verificándose además que f (X * ) = g (Y * ) . iv) Si f está acotada superiormente en F ≠ ∅ , ó g está acotada inferiormente en G ≠ ∅ , entonces ambos problemas P y D tienen solución óptima. Consecuencias del teorema: 1. Si el primal tiene solución finita, entonces el dual también la tiene y ambas coinciden. 2. Si el primal tiene solución no acotada, el dual no tiene solución. 3. Si el primal no tiene solución, entonces ó el dual no tiene solución ó tiene solución no acotada. El dual del dual: Volver al Dual del Dual Consideremos ahora como primal al dual, ¿cuál es su dual?. min s.a.: g (Y ) = b1 y1 + K + bm ym a11 y1 + K + am1 ym ≥ c1 a1n y1 + K + amn ym ≥ cn yi ≥ 0, i = 1, K , m 84 Programación Lineal para la Ingeniería Técnica Introducimos variables de holgura: min g (Y ) = b1 y1 + s.a.: a11 y1 + K + am 1 ym − y mH + 1 = c1 a1n y1 + K + amn ym − y mH+ n = cn K + bm y m + 0 y mH+ 1 + K + 0 ymH + n yi ≥ 0, i = 1, K , m , ymH+ j ≥ 0, j = 1, K , n Su dual sería: max s.a.: f ( X ) = c1 x1 + K + c n xn a11 x1 + K + a1 n xn ≤ b1 a m1 x1 + − K + amn xn ≤ bm x1 ≤ 0 − xn ≤ 0 Las últimas n restricciones son las de no negatividad, y el problema que se obtiene es el primal. Luego el dual del dual es el primal. 12.2. RELACIONES PRIMAL-DUAL Con la solución del primal, se obtiene con el Simplex implícitamente la del dual. Veámoslo: Sea el primal en forma estándar: max s.a.: Z = CX AX = b X ≥ 0 Escribimos A = (B/N), con B la submatriz formada por las columnas correspondientes a las variables básicas, y N lo mismo para las no básicas o libres. Entonces: 85 Programación Lineal para la Ingeniería Técnica max s.a.: Z = CB X B + CN X N BX B + NX N = b X B, X N ≥ 0 La solución de este problema consiste en hacer que el vector no básico X N sea cero, y resolver el vector básico en términos de la base B, es decir: BX B + NX N = b ⇒ BX B = b ⇒ X B = B − 1b y la función objetivo será: Z = CB X B + CN X N = C B X B = CB B − 1 b Ahora bien, la función objetivo dual es g (Y ) = bT Y = Y T b , y en el óptimo el valor de la función objetivo primal coincide con el valor óptimo de la función objetivo dual, esto es, Z (X * ) = g (Y * ) . Por lo tanto: Z ( X * ) = g (Y * ) ⇒ CB* (B* ) b = (Y * ) b ⇒ CB* (B* ) = (Y * ) −1 −1 T T En los casos particulares que estudiaremos, este valor no hace falta calcularlo explícitamente si hemos resuelto el primal aplicando el algoritmo del Simplex, puesto que en la última tabla: Volver a Primal-Dual Variables básicas Valor de las variables básicas Variables originales Variables de holgura B−1A B−1 XB X B = B − 1b C − CB B − 1 A Solución óptima primal 86 − CBB−1 Solución óptima dual opuesta en signo Programación Lineal para la Ingeniería Técnica Ejemplo: max s.a.: Paso a forma estándar max s.a.: 4 x1 + 3 x2 2 x1 + 3 x2 ≤ 18 4 x1 + 3 x2 2 x1 + 3x 2 + x3H = 18 4 x1 + 2 x2 + x 4H = 10 x1 , x2 , x3H , x4H ≥ 0 4 x1 + 2 x 2 ≤ 10 x1 , x2 ≥ 0 Introduciendo las variables de holgura. La última tabla es: x1 x2 x3H x 4H x3H 3 -4 0 1 -3/2 x2 5 2 1 0 1/2 -2 0 0 -3/2 Solución óptima dual: Soluciones óptimas Solución óptima primal: Función objetivo primal y dual óptimas: 3 Y * = 0, 2 * X = (0,5) f (X * ) = g (Y * ) = 15 El dual sería: Sobre el Dual min 18 y1 + 10 y2 max − s.a.: 2 y1 + 4 y 2 ≥ 4 s.a.: 2 y1 + 4 y 2 − y3H + y5A = 4 18 y1 − 10 y2 − My5A − My6A 3 y1 + 2 y2 ≥ 3 3 y1 + 2 y 2 − y4H + y6A = 3 y1 , y 2 ≥ 0 y1 , y 2 , y3H , y 4H , y5A , y6A ≥ 0 Se puede comprobar con el Simplex que da la misma solución, pero el proceso es más largo por la introducción de variables de holgura y artificiales, de ahí el interés de la relación entre dual y primal (entre otras razones). Interesará pasar al dual cuando su resolución sea más fácil que la del primal. Así, podemos resolver el dual por el Simplex y deducir, sin ningún cálculo 87 Programación Lineal para la Ingeniería Técnica suplementario, la solución óptima del primal. Este caso se presentará cuando el primal incluya restricciones de mayor o igual para las cuales es preciso introducir variables de holgura y artificiales. Ejemplo: Paso a forma estándar min 5 x1 + 6 x2 max − s.a.: 5 x1 + 2 x2 ≥ 20 s.a.: 5 x1 + 2 x2 − x3H + x5A = 20 5 x1 − 6 x2 − Mx5A − Mx6A 3x1 + 8 x2 ≥ 24 3x1 + 8x 2 − x4H + x6A = 24 x1 , x2 ≥ 0 x1 , x2 , x3H , x 4H , x5A , x6A ≥ 0 Si calculamos su dual: max s.a.: Cálculo del Dual max s.a.: 20 y1 + 24 y2 5 y1 + 3 y2 ≤ 5 20 y1 + 24 y2 5 y1 + 3 y2 + y3H = 5 2 y1 + 8 y 2 + y4H = 6 y1 , y 2 , y 3H , y4H ≥ 0 2 y1 + 8 y2 ≤ 6 y1 , y 2 ≥ 0 Se ve que es más fácil aplicar el Simplex al estándar del dual que al del primal. La última tabla es: y1 y2 11/17 10/17 y1 y2 y3H y4H 1 0 0 1 --------- --------- 0 0 -56/17 -30/17 Lo que realmente nos interesa es el valor de los costes en la tabla final, por eso dejamos sin rellenar huecos en esa tabla que no aportan nada a la solución que buscamos. Así: Soluciones óptimas 11 10 Y * = , , 17 17 88 56 30 X * = , , 17 17 f (X * ) = g (Y * ) = 460 17 Programación Lineal para la Ingeniería Técnica 12.3. MÉTODO DUAL DEL SIMPLEX Supongamos el problema de la dieta (mezcla de alimentos más barata, satisfaciendo unos valores nutritivos necesarios): min s.a.: c1 x1 + K + cn xn a11 x1 + K + a1 n xn ≥ b1 a m1 x1 + K + amn xn ≥ bm xi ≥ 0, i = 1, K , n Aquí, x j representa la cantidad del alimento j a precio c j y con una composición a ij de un cierto elemento nutritivo N i del cual hay un requerimiento de al menos bi unidades. Una posible interpretación del dual sería: supongamos que una empresa se plantea la posibilidad de fabricar un concentrado de cada uno de los elementos nutritivos que se requieren para la correcta alimentación, de modo que propondría que se ingirieran los concentrados directamente en lugar de los alimentos que contienen los elementos nutritivos, de modo que se satisfacieran las necesidades nutricionales igualmente. El problema que se plantearía la compañía consistiría en encontrar los precios unitarios y1 , K , y m para cada nutriente de forma que maximizara su beneficio, pero teniendo en cuenta que al mismo tiempo este procedimiento debería ser competitivo con el usual en el que se aportan directamente los alimentos. Así, se debe maximizar b1 y1 + K + bm y m . Esta competitividad significa que la suma de los precios totales de los elementos nutritivos en las cantidades que intervienen en cada alimento deberá ser menor o a lo sumo igual que el precio o coste de este alimento. Así, para el alimento j-ésimo de coste c j , deberá verificarse a1 j y1 + K + amj ym ≤ c j . 89 Programación Lineal para la Ingeniería Técnica Por último, el precio de cada unidad de nutriente yi debe ser positivo. Con todo esto, planteamos el dual: max s.a.: b1 y1 + K + bm y m a11 y1 + K + am1 ym ≤ c1 a1n y1 + K + amn ym ≤ cn yi ≥ 0, i = 1, K , m Podemos deducir fácilmente del estudio desarrollado en los apartados anteriores una de las aplicaciones inmediatas de la teoría de la dualidad: la resolución de problemas lineales con más restricciones que variables. Puesto que parte de la dificultad y el número de iteraciones del Simplex dependen del número de restricciones, resolveremos el primal si m < n, y el dual si m > n. Otra aplicación de la dualidad es la resolución de problemas lineales utilizando el Algoritmo Dual del Simplex, que consiste básicamente en aplicar el Simplex al problema dual, pero efectuando los cálculos sobre el primal. Lo explicamos a continuación. Para comenzar con el Simplex, si no es posible obtener una solución factible, se añaden tantas variables artificiales como sea necesario. El Método Dual del Simplex hace innecesario el empleo de dichas variables artificiales, pero necesita para comenzar a iterar una condición llamada de factibilidad dual, es decir, que todos los costes marginales c j sean negativos o nulos (en caso de máximo). Por tanto, no siempre se podrá aplicar. Volver a Método Dual del Simplex Algoritmo. Paso 1: Partimos de una tabla en la que c j = c j − z j ≤ 0 . Paso 2: Si X B (solución básica) es tal que X B ≥ 0 , estamos en la solución óptima. PARAR. 90 Programación Lineal para la Ingeniería Técnica En otro caso, elegimos para que salga de la base la variable xi , cuya coordenada ( X B )i es la más negativa. Paso 3: Si todos los elementos a ij de la fila correspondiente a la variable que sale de la base son positivos o nulos, entonces el problema no tiene solución o tiene solución óptima no acotada. Si al menos algún aij < 0 , calculamos: c j min j = 1, , n K aij ∋ aij < 0 = ck aik Si corresponde a la columna k-esima, entra en la base x k . Paso 4: Pivotamos sobre aik , efectuando las operaciones precisas para que la columna k tenga un 1 en el lugar i-ésimo y ceros en el resto. Volver al paso 2. Nótese que los problemas “ideales” para resolver mediante este algoritmo son aquellos de minimización que incluyen restricciones del tipo mayor o igual, y cuyas desigualdades contienen coeficientes positivos. Así, el problema de la dieta es un candidato para aplicarle este procedimiento. Ejemplo: min s.a.: 3x1 + 4 x2 + 5 x3 x1 + 2 x2 + 3x3 ≥ 5 2 x1 + 2 x2 + x3 ≥ 6 x1 , x2 , x3 ≥ 0 max s.a.: − 3 x1 − 4 x2 − 5x3 − x1 − 2 x2 − 3x3 ≤ − 5 − 2 x1 − 2 x2 − x3 ≤ − 6 x1 , x2 , x3 ≥ 0 Introducimos las correspondientes variables de holgura para obtener la formulación estándar: 91 Programación Lineal para la Ingeniería Técnica max − 3 x1 − 4 x2 − 5x3 s.a.: − x1 − 2 x2 − 3x3 + x 4H = − 5 − 2 x1 − 2 x2 − x3 + x5H = − 6 x1 , x2 , x3 , x 4H , x5H ≥ 0 La tabla inicial con la que comenzar a iterar, siguiendo los pasos del Algoritmo Dual del Simplex, es la siguiente: paso 2 x 4H x5H -5 -6 x1 x2 x3 x 4H x5H -1 -2 -2 -2 -3 -1 1 0 0 1 -3 -4 -5 0 0 paso 3 Puesto que c j ≤ 0, ∀ j , sale de la base la variable cuya coordenada ( X B )i es la más negativa, en este caso x5 = − 6 , y aplicamos el criterio de entrada, calculando: − 3 − 4 − 5 3 , , = 2 − 2 − 2 − 1 min Así pues, entra en la base la variable x1 , siendo el elemento pivote a 21 = − 2 . Con todo esto, la siguiente tabla quedará como sigue: paso 2 x 4H x1 -2 3 x1 x2 x3 x 4H x5H 0 1 -1 1 -5/2 1/2 1 0 -1/2 -1/2 0 -1 -7/2 0 -3/2 paso 3 92 Programación Lineal para la Ingeniería Técnica Seguimos teniendo que c j ≤ 0, ∀ j , y ahora la variable básica con valor más negativo es x4H = − 2 (la única), por tanto es la que abandona la base. Aplicamos el criterio de entrada calculando: − 1 − 7 2 − 3 2 , , =1 − 1 − 5 2 − 1 2 min que corresponde a la variable x2 , que entra en la base, siendo el elemento pivote el elemento a12 = − 1 . Con todo esto, la siguiente tabla quedará como sigue: 2 1 x2 x1 x1 x2 x3 x 4H x5H 0 1 1 0 5/2 -2 -1 1 1/2 -1 0 0 -1 -1 -1 paso 2 Todas las variables básicas son positivas, por lo que el algoritmo termina con la solución óptima: x1* = 1 , x2* = 2 , x3* = 0 , Z * = 11 Ejemplo: min s.a.: Z = 2 x1 + x 2 3x1 + x 2 ≥ 3 max s.a.: − Z = − 2 x1 − x2 H − 3 x1 − x2 + x3 = − 3 4 x1 − 3 x2 + x4H = − 6 H − x1 − 2 x 2 + x5 = − 3 4 x1 + 3x 2 ≥ 6 x1 + 2 x2 ≥ 3 − x1 , x2 ≥ 0 x1 , x2 , x3H , x 4H , x5H ≥ 0 93 Programación Lineal para la Ingeniería Técnica Una vez que hemos cambiando de signo, e introducido las correspondientes variables de holgura, la primera tabla será: paso 2 x1 x2 x3H x 4H x5H x3H -3 -3 -1 1 0 0 H 4 H 5 -6 -3 -4 -1 -3 -2 0 0 1 0 0 1 -2 -1 0 0 0 x x paso 3 paso 4 paso 2 x1 x2 x3H x 4H x5H x3H -1 -5/3 0 1 -1/3 0 x2 x5H 2 1 4/3 5/3 1 0 0 0 -1/3 -2/3 0 1 -2/3 0 0 -1/3 0 x1 x2 x3H x 4H x5H 1 0 0 0 1 0 -3/5 4/5 1 1/5 -3/5 -1 0 0 1 0 0 -2/5 -1/5 0 paso 3 paso 4 x1 x2 x5H 3/5 6/5 0 paso 2 Todas las variables básicas son positivas, por tanto el algoritmo concluye con la solución óptima: x1* = 3 5 , x2* = 6 5 , Z * = 12 5 Ir al bloque 5 94