Unidad 4: PROGRAMACIÓN LINEAL INTRODUCCIÓN El problema básico de la programación lineal es el de optimizar (hacer máxima o mínima) una cierta expresión lineal (que puede expresar beneficios, gasto, tiempo...) sometida a una serie de restricciones (dinero disponible, material, personal...) que vienen expresadas por inecuaciones lineales. Sus orígenes se sitúan en el siglo XX, cerca de la Segunda Guerra Mundial. En un principio las investigaciones fueron fundamentalmente con fines militares, pero pronto se le encontraron infinidad de aplicaciones en el campo civil. En los años cuarenta se describió por primera vez, el problema del transporte, que fue estudiado independientemente por Kantorovich y Koopmans. En 1947, Dantzig ideó un algoritmo para la resolución de estos problemas, denominado método del simplex. El ejemplo con el que Dantzig presentó el “método simplex” trataba sobre la mejor asignación de 70 personas a 70 puestos de trabajo. 1 Por los complejos problemas que aborda, y por el enorme número de variables que se manejan en la práctica, es imprescindible encontrar algoritmos eficaces que se pueden implementar en ordenador. 4.1.- ¿QUÉ ES UN PROBLEMA DE PROGRAMACIÓN LINEAL? Tal y como hemos apuntado en la introducción, se puede definir la programación lineal como una técnica de optimización que permite distribuir los recursos de la mejor manera posible. A partir de un ejemplo o problema tipo se irán destacando las características comunes de los problemas de programación lineal. Ejemplo: Un fabricante de abanicos dispone de dos modelos A y B. El modelo A requiere, para su elaboración, 20 cm2 de papel, 120 cm2 de lámina de madera y 1 enganche metálico. El modelo B requiere: 60 cm2 de papel, 80 cm2 de lámina de madera y 1 enganche metálico. El coste de producción de cada modelo es 1,20 euros el A y 1,30 euros el B. El precio de venta es de 1,80 euros cada uno, independientemente del modelo. Teniendo en cuenta que las existencias son de 3000 cm2 de papel, 7200 cm2 de lámina de madera y 70 enganches. 1) Representa la región factible. 2) Determina el número de abanicos de cada modelo que ha de hacer para obtener un beneficio máximo. 3) Calcula cuál es ese beneficio. 2 Al intentar formular matemáticamente este enunciado se observa que aparecen una serie de características comunes a todos los problemas de programación y que son las siguientes: • El conjunto de variables o incógnitas que representan las decisiones que se deben tomar, designadas habitualmente por x e y, se llaman variables de decisión. En nuestro problema hemos de determinar el número de abanicos de cada modelo que se han de fabricar para obtener el máximo beneficio. x: número de abanicos del modelo A. y: número de abanicos del modelo B. • Las decisiones que se deben tomar van aparejadas a una función que se quiere hacer máxima (maximizar) como ingresos, beneficios… o hacer mínima (minimizar) como costes, distancias, tiempo… Pues bien, esta función lineal en las variables de decisión x e y, z = f(x, y) , que hay que maximizar o minimizar, se llama función objetivo. En nuestro problema queremos maximizar los beneficios. Hemos de encontrar la expresión que los obtiene: Beneficios = Ingresos – Gastos Beneficios = (1, 80x + 1, 80y ) − (1,20x + 1,30y ) = = 0, 6x + 0, 5y Así, la función objetivo será z = f(x, y) = 0, 6x + 0, 5y 3 • A lo largo del enunciado de un problema de programación lineal aparecerán una serie de condiciones que han de satisfacer las variables de decisión, y que se expresan por ecuaciones o inecuaciones lineales, llamadas restricciones. Podemos obtener las condiciones de nuestro problema a partir de la tabla siguiente: 2 Papel (cm ) Lámina de madera (cm2) Enganche metálico Modelo A 20 120 1 Modelo B 60 80 1 Disponemos de 3000 cm2 de papel, por tanto: 20x + 60y ≤ 3000 Disponemos de 7200 cm2 de lámina de madera, por tanto: 120x + 80y ≤ 7200 Disponemos de 70 enganches, por tanto: x + y ≤ 70 Además de las restricciones explícitas, o sea, indicadas en el enunciado del problema, hay que añadir las correspondientes a las variables de decisión. Es decir, como el número de abanicos no puede ser negativo, exigiremos que x e y sean mayores o iguales que cero, y también que sean números enteros: x ≥ 0, y ≥ 0, x, y ∈ » 4 El problema se puede escribir en forma resumida de la siguiente manera: Maximizar z = 0, 6x + 0, 5y s.a. 120x + 80y ≤ 7200 x + y ≤ 70 x ≥ 0, y ≥ 0, x, y ∈ » 20x + 60y ≤ 3000 • El conjunto de todos los puntos del plano (x, y) que satisfacen todas y cada una de las restricciones del problema de programación lineal, se llama región factible o conjunto solución. • La solución óptima de un problema de programación lineal es un punto de la región factible en el cual la función objetivo alcanza el máximo o el mínimo, según se trate de un problema de maximización o minimización. 5 En nuestro problema ya está representada la región factible. Por tanto, habrá que buscar la solución óptima, que, en este caso, consiste en maximizar la función objetivo z = 0, 6x + 0, 5y sobre esta región factible. O, lo que es equivalente, se trata de encontrar el mayor valor de z sobre la región factible. Comenzamos dibujando la función objetivo para z = 0 . Esto es, la recta 0 = 0, 6x + 0, 5y . A continuación se trazan paralelas a la recta z = 0 (por ejemplo: z = 10 , z = 20 ) con el fin de ir aumentando el valor de z hasta que no corte a la región factible, siendo la última recta que corta a la región factible la que define el máximo valor de z. De esta manera, corresponde al punto (40,30) de la región factible el mayor valor de z, que es 39. 6 La solución de nuestro problema será, por tanto, que para obtener el máximo beneficio se han de fabricar 40 abanicos del modelo A y 30 del modelo B. Dicho beneficio máximo será de 39 euros. Primer resultado fundamental de la programación lineal: Si un problema de programación lineal tiene solución óptima, ésta se alcanza en alguno de los vértices de la región factible. Este resultado permite reducir la búsqueda de la solución óptima a los vértices de la región factible, de tal forma que una alternativa al trazado de paralelas de la función objetivo realizada anteriormente, consiste en calcular el valor de la función objetivo en cada uno de los vértices de la región factible. Así, el mayor valor indicará el vértice donde se alcanza el máximo y, de forma análoga, el menor valor mostrará el vértice donde se encuentra el mínimo. Ejercicio 5. Beneficio máximo (pág. 110) Con 80 kg de acero y 120 kg de aluminio se quieren fabricar bicicletas de montaña y de paseo que se venderán a 200 € y 150 €, respectivamente. Para la de montaña son necesarios 1 kg de acero y 3 kg de aluminio y para la de paseo 2 kg de cada uno de los dos metales. ¿Cuántas bicicletas de paseo y cuántas de montaña se deben fabricar para obtener el máximo beneficio? 7 4.2.- PROBLEMAS DE PROGRAMACIÓN LINEAL CON MÚLTIPLES ÓPTIMOS Consideremos el siguiente problema de programación lineal: Maximizar z = x + y s.a. x−y≥0 3x + 2y ≥ 6 x ≥ 0, y ≥ 0 x+y≤6 La región factible está delimitada por el polígono ABCD. Los vértices de este polígono son las intersecciones de los siguientes pares de rectas: t : 3x + 2y = 6 ⇒ x = 2, eje OX : y = 0 y=0 A(2, 0) 8 ⇒ x = 6, eje OX : y = 0 r:x+ y = 6 r : x + y = 6 ⇒ x = 3, s : x − y = 0 y =3 6 ⇒x= , t : 3x + 2y = 6 5 s:x−y = 0 y=0 y= B(6, 0) C(3,3) 6 5 6 6 D , 5 5 Como se trata de una región acotada, se calcula el valor de la función objetivo en cada uno de los vértices: Vértices Valor de la función objetivo z=x+y A(2, 0) B(6, 0) C(3,3) 6 6 D , 5 5 2 6 → Máximo 6 → Máximo 12 = 2, 4 5 En este caso, la función objetivo alcanza el máximo en los vértices B(6,0) y C(3,3) con el mismo valor z = 6 . Procediendo de otra manera, se traza la función objetivo para z = 0 , o sea: x + y = 0 y se la desplaza paralelamente a sí misma sobre la región factible, observando que se superpone al segmento BC . Por tanto, alcanza el máximo en los infinitos puntos de la arista BC , y el problema tiene infinitas soluciones o múltiples óptimos. 9 Segundo resultado fundamental de la programación lineal: Si la región factible está acotada, entonces el máximo o el mínimo de la función objetivo se encuentra en uno de los vértices de la región factible. Pero si el máximo o el mínimo se encuentran en dos vértices adyacentes de la región factible, entonces se alcanzará en los infinitos puntos de la arista que los une. Ejercicio 7. Solución múltiple (pág. 112) Un comerciante desea comprar dos tipos de frigoríficos, F1 y F2. Los de tipo F1 cuestan 300 € y los de tipo F2, 500 €. Sólo dispone de sitio para 20 frigoríficos y de 7000 € para hacer las compras. 10 ¿Cuántos frigoríficos ha de comprar de cada tipo para obtener beneficios máximos con su venta posterior, sabiendo que en cada frigorífico gana el 30% de su compra? 4.3.- PROBLEMAS DE PROGRAMACIÓN LINEAL CON REGIÓN FACTIBLE NO ACOTADA Cuando la región factible de un problema de programación lineal está acotada, siempre será posible encontrar el óptimo. Sin embargo, en el caso de que la región factible no esté acotada puede ocurrir que exista o no solución óptima. Veamos dos ejemplos: Ejemplo 1: Minimizar z = 7x + 10y s.a. 3x + 2y ≥ 18 2x + 8y ≥ 32 x ≥ 0, y ≥ 0, x, y ∈ » 11 La región factible no está acotada. Hemos trazado la función objetivo para z = 0 y trasladándola paralelamente a sí misma, el primer punto de la región factible que se alcanza es el vértice A(4,3). En este punto se obtendrá el valor mínimo de z sobre la región factible. Por tanto, la solución del problema será x = 3, y = 4. Ejemplo 2: Maximizar z = 3x + y s.a. 5x + 2y ≥ 10 3x + 7y ≥ 21 x ≥ 0, y ≥ 0 12 La región factible no está acotada, por lo que, trazando paralelas a la función objetivo para z = 0 , se observa que z puede alcanzar valores arbitrariamente grandes y, por tanto, no se puede encontrar la solución óptima. En este caso el problema no tiene solución o tiene solución no acotada (no se puede determinar). Ejercicio 6. Coste mínimo. Solución única. (pág. 111) Una refinería de petróleo tiene dos fuentes de petróleo crudo: ligero y pesado. Cada barril de crudo ligero cuesta 70 dólares y con él la refinería produce 0,3 barriles de gasolina (G); 0,2 barriles de combustible de calefacción (C) y 0,3 barriles de combustible para turbinas (T). Cada barril de crudo pesado cuesta 60 dólares y produce 0,3 barriles de G; 0,4 barriles de C y 0,2 barriles de T. La refinería ha contratado el suministro de 900000 barriles de G, 800000 barriles de C y 500000 de T. Halla las cantidades de crudo ligero y pesado que debe comprar para poder cubrir sus necesidades con un coste mínimo. Ejercicio. Coste mínimo. Solución múltiple. Se quiere elaborar una dieta diaria para ganado que satisfaga unas condiciones mínimas de contenidos vitamínicos al día: 2 mg de vitamina A, 3 mg de vitamina B, 30 de la C y 2 de la D. Para ello se van a mezclar piensos de dos tipos, P y Q, cuyo precio por kg es para ambos de 3 euros, y cuyo contenido vitamínico por kg se recoge en la tabla adjunta. ¿Cómo deben mezclarse los piensos para que el gasto sea mínimo? ¿Cuál es este gasto mínimo? 13 4.4.- EL PROBLEMA DEL TRANSPORTE El problema del transporte es un importante tipo de problema de programación lineal. Veamos un ejemplo de una versión muy sencilla. Ejemplo Desde dos almacenes, A y B, se tiene que distribuir fruta a tres mercados de la ciudad. El almacén A dispone de 10 toneladas de fruta diarias y el B de 15 toneladas, que se reparten en su totalidad. Los dos primeros mercados necesitan, diariamente, 8 toneladas de fruta, mientras que el tercero necesita 9 toneladas diarias. El coste del transporte por tonelada desde cada almacén a cada mercado viene dado por los datos de la tabla adjunta. COSTE Mercado 1 Mercado 2 Mercado 3 Almacén A 10 15 15 10 20 10 Almacén B Planifica el transporte para que el coste sea mínimo. Si llamamos “x” a la cantidad de mercancía que entrega el almacén A al mercado 1, e “y” a la mercancía que entrega el almacén A al mercado 2, el resto de la mercancía se distribuye en la forma que se recoge en la siguiente tabla: Mercancía (en toneladas) Mercado 1 Mercado 2 Mercado 3 Almacén A x y 10 − x − y 8−x 8−y Almacén B 15 − (8 − x ) − (8 − y ) = = −1 + x + y 14 Las cantidades entregadas a cada mercado deben ser no negativas, es decir, deben cumplir las desigualdades siguientes: x ≥ 0 , y ≥ 0 , 10 − x − y ≥ 0 , 8 − x ≥ 0 , 8 − y ≥ 0 , −1 + x + y ≥ 0 Simplificando las desigualdades anteriores, se obtienen las siguientes inecuaciones: x ≥ 0 , y ≥ 0 , x + y ≤ 10 , x ≤ 8 , y ≤ 8 , x + y ≥ 1 Teniendo en cuenta la tabla de costes del enunciado y la tabla anterior, resulta la siguiente función objetivo que se ha de minimizar: z = 10x + 15y + 20 (10 − x − y ) + 15 ( 8 − x ) + 10 (8 − y ) + 10 ( −1 + x + y ) Operando y simplificando, se obtiene la función: z = 390 − 15x − 5y El problema de programación a resolver es: Minimizar z = 390 − 15x − 5y s.a. y≤8 x + y ≤ 10 x+y ≥1 x ≥ 0, y ≥ 0 x≤8 15 La región factible está delimitada por el polígono ABCDEF. Los vértices de este polígono son los puntos A(1,0), B(8,0), C(8,2), D(2,8), E(0,8) y F(0,1). Como se trata de una región acotada, se calcula el valor de la función objetivo en cada uno de los vértices: Vértices Valor de la función objetivo z = 390 − 15x − 5y A(1,0) B(8,0) C(8,2) D(2,8) E(0,8) F(0,1) 375 270 260 320 350 385 Se observa que en el vértice C se minimiza la función objetivo; por tanto, la solución es x = 8 , y = 2, es decir, las cantidades a transportar son las que se recogen en la tabla adjunta: 16 Mercancía (en toneladas) Almacén A Almacén B Mercado 1 Mercado 2 Mercado 3 8 0 2 6 0 9 Ejercicio Para abastecer de madera a tres aserraderos, A1, A2 y A3, hay dos bosques, B1 y B2, que producen 26 toneladas y 30 toneladas, respectivamente. Las necesidades de cada aserradero son: 20, 22 y 14 toneladas, respectivamente. Si los costes de transporte por tonelada de los bosques a los aserraderos son, en cientos de euros, los que se indican en la tabla adjunta, propón el transporte con el coste mínimo. COSTE Aserradero A1 Aserradero A2 Aserradero A3 Bosque B1 1 2 3 1 1 1 Bosque B2 Ejercicios: 13, 14, 15, 16 y 17 pág. 115, 19, 20, 21, 22, 23 y 24 pág. 116. 17