INVESTIGACION DE OPERACIONES I PROGRAMACIÓN ENTERA&BINARIA Modelos • Modelos de costo fijo • Modelos de lote mínimo • Restricciones excluyentes (K de N) • Funciones con N valores posibles • Variables que toman un conjunto de valores • Ejercicios diversos [revisar y completar] 3 MODELO DE COSTO FIJO Cuando la actividad económica incurre en dos tipos de costos: un costo fijo necesario para iniciar la actividad y un costo variable proporcional al nivel de la actividad; y el costo fijo sólo existe si la actividad se inicia (si se produce, si se contrata, si se alquila, etc). Dado que F es el costo fijo, c es el costo unitario variable y X es el nivel de producción, la función de costo se expresa como: F + cX , si X > 0 C(X) = 0, en caso contrario La función C(X) es analíticamente insoluble porque implica una discontinuidad en X=0. Las variables binarias nos ayudarán a convertir el modelo en analíticamente soluble. Se formula un modelo general para n actividades, cada una con la estructura de costos indicada, Si se define: 1 si Xi > 0 (se realiza la actividad i) Yi = 0 si Xi = 0 La función objetivo estaría representada por los costos totales (fijo + variable) y el problema se puede expresar, para m variables: m Min Z = Fi ∗ Yi + cj ∗ Xi i=1 Y la restricción que relaciona Xcon Y: (donde Mi es una cota superior para Xi) Xi ≤ M ∗ Yi i SELECCIÓN DE OPERADORES [COSTO FIJO] Tres compañías telefónicas (operadores) me ofrecen suscribirme a su servicio de larga distancia. Movistar cobra una cuota fija de $16 por mes más $0.25 por minuto. Claro cobra $25 por mes, pero reduce el costo por minuto a $0.21. Por otro lado en Entel, la cuota fija mensual es de $18 y el costo por minuto es de $0.22. Usualmente utilizo un promedio de 200 minutos de llamada de larga distancia al mes. Suponiendo que no tenga que pagar la cuota fija mensual a menos que realice llamadas y que pueda repartirlas entre los tres operadores como me plazca. Formule el programa matemático que represente el problema y presente el reporte administrativo, es decir: ¿Cómo debería utilizar las tres compañías para minimizar mi recibo telefónico mensual? Costo Fijo Costo Variable ($) ($/minuto) Operadores de telefonía Movistar 16 0.25 Claro 25 0.21 Entel 18 0.22 Yi Xi Variables Binarias: Y1 = Seleccionar a Movistar Y2 = Seleccionar a Claro Y3 = Seleccionar a Entel → → → 200 minutos → (tiempos) Variables Continuas X1 = Minutos a contratar en Movistar X2 = Minutos a contratar en Claro X3 = Minutos a contratar en Entel Es decir, solo si se selecciona al operador i, podré consumir Xi minutos” Índice: SETS: i: operador (1..3) [i=1 movistar; i=2 claro; i=3 entel] OPERADOR/1..3/:X,Y,CUOTAFIJA,COSTOMINUTO; ENDSETS Variables de decisión X(i) = Cantidad de minutos a contratar al operador i Y(i) = Opción de selección del operador i [1 se selecciona al operador o 0 no se selecciona] Estructura de datos Cuotafijai = [16 23 24] Costominutoi = [0.25 0.21 0.22] DATA: CUOTAFIJA= 16 23 24; COSTOMINUTO= 0.25 0.21 0.22; ENDDATA Min Z = Cuotafijai ∗ Yi + Costominutoi ∗ Xi MIN=@SUM(OPERADOR:CUOTAFIJA*Y+COSTOMINUTO*X); 3 i=1 Sujeto a ∀i: Xi ≤ 200 ∗ Yi 3 Xi = 200 i=1 ∀i: Xi ≥ 0 y Yi = 𝟏 𝐨 𝟎 @FOR(OPERADOR:X<=200*Y); @SUM(OPERADOR:X)=200; @FOR(OPERADOR:@BIN(Y)); SETS: OPERADOR/1..3/:X,Y,CUOTAFIJA,COSTOMINUTO; ENDSETS DATA: CUOTAFIJA= 16 23 24; COSTOMINUTO= 0.25 0.21 0.22; ENDDATA MIN=@SUM(OPERADOR:CUOTAFIJA*Y+COSTOMINUTO*X); @FOR(OPERADOR:X<=200*Y); @SUM(OPERADOR:X)=200; @FOR(OPERADOR:@BIN(Y)); END MODEL: [_1] MIN= 0.25 * X_1 + 16 * Y_1 + 0.21 * X_2 + 23 * Y_2 + 0.22 * X_3 + 24 * Y_3; [_2] X_1 - 200 * Y_1 <= 0; [_3] X_2 - 200 * Y_2 <= 0; [_4] X_3 - 200 * Y_3 <= 0; [_5] X_1 + X_2 + X_3 = 200; @BIN( Y_1); @BIN( Y_2); @BIN( Y_3); END Variable X( 1) X( 2) X( 3) Y( 1) Y( 2) Y( 3) CUOTAFIJA( 1) CUOTAFIJA( 2) CUOTAFIJA( 3) COSTOMINUTO( 1) COSTOMINUTO( 2) COSTOMINUTO( 3) Row 1 2 3 4 5 Value 0.000000 200.0000 0.000000 0.000000 1.000000 0.000000 16.00000 23.00000 24.00000 0.2500000 0.2100000 0.2200000 Slack or Surplus 65.00000 0.000000 0.000000 0.000000 0.000000 Reduced Cost 0.4000000E-01 0.000000 0.1000000E-01 16.00000 23.00000 24.00000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 Dual Price -1.000000 0.000000 0.000000 0.000000 -0.2100000 Reporte administrativo Contratar los 200 minutos solo con el servicio del operador Claro, con un costo mínimo de $65 ALQUILER DE ALMACENES (costo fijo) Un distribuidor decide alquilar un máximo de dos lugares para establecer almacenes en algunas regiones. En la tabla adjunta se muestran los tres almacenes candidatos que puede rentar, sus costos mensuales de alquiler, el número máximo de camiones que pueden cargar y despachar en un mes, la demanda mensual de cargas de camión para cada uno de los cuatro distritos que desea atender y el costo promedio de enviar un camión de cada almacén a cada distrito. Distrito [costo de ventas por camión ($) Almacén A B C Demanda 1 170 150 150 100 2 90 165 240 90 3 120 100 140 110 4 160 140 120 60 Capacidad mensual (camiones) 200 250 300 Costo de alquiler ($) 7750 4000 5500 Formule el programa matemático en lingo compacto y presente el reporte administrativo, es decir, determinar que almacenes alquilar y cuál es el plan de distribución para minimizar los costos totales. ALMACÉN DISTRITO (i) (j) 170 1 100 2 90 150 200 CostoAlquiler = $7750 A 90 120 160 CAPACIDAD (camiones) CONTRATAR SOLO UN MÁXIMO DE DOS ALMACENES 250 CostoAlquiler = $4000 350 CostoAlquiler = $5500 165 DEMANDA (camiones)| B 100 150 240 C 140 60 costo de envío ($/camión) 3 110 4 60 140 Datos, información y modelamiento i: almacén (1..3) i= 1 (A) , i= 2 (B); i=3 (C) j: distrito (1..4) j= 1 (distrito 1) , j= 2 (distrito 2), j= 3 (distrito 3) , j= 4 (distrito 4) Sets: ALMACEN/A B C/:CAPACIDAD, ALQUILER, Y; DISTRITO/1..4/:DEMANDA; CAMIONES(ALMACEN,DISTRITO): COSTO, X; End Sets Xij = Cantidad en camiones a enviar del almacén i al distrito j Yi = Opción de alquiler de almacén i [Yi = 1 se alquila o Yi = 0 no se alquila] Capacidadi = 200 250 300 Alquileri = 7750 4000 5500 Demandaj = 100 90 110 60 Costoij = 170 90 120 160 150 165 100 140 150 240 140 120 Data: CAPACIDAD = 200 250 300; ALQUILER = 7750 4000 5500; DEMANDA = 100 90 110 60; COSTO = 170 90 120 160 150 165 100 140 150 240 140 120; End Data Datos, información y modelamiento 3 4 3 Min Z = Costoij ∗ Xij + Alquileri ∗ Yi i=1 j=1 i=1 Sujeto a: 3 ∀j: Xij ≥ Demandaj i=1 4 ∀i: Xij ≤ Capacidadi ∗ Yi j=1 3 Min = @Sum(CAMIONES(i,j):COSTO(i,j)*X(i,j))+ @Sum(ALMACEN(i):ALQUILER(i)*Y(i)); @For(DISTRITO(j): @Sum(ALMACEN(i):X(i,j))>= DEMANDA(j)); @For(ALMACEN(i): @Sum(DISTRITO(j):X(i,j))<= CAPACIDAD(i)*Y(i)); @Sum(ALMACEN(i): Y(i))<= 2; Yi ≤ 2 i=1 Xij ≥ 0, entero Yi = 0 o 1 ∀ i ∀ i, ∀j; @For(CAMIONES(i,j):@Gin(X(i,j))); @For(ALMACEN(i):@Bin(Y(i))); Sets: ALMACEN/A B C/:CAPACIDAD, ALQUILER, Y; DISTRITO/1..4/:DEMANDA; CAMIONES(ALMACEN,DISTRITO): COSTO, X; End Sets Data: CAPACIDAD = 200 250 300; ALQUILER = 7750 4000 5500; DEMANDA = 100 90 110 60; COSTO = 170 90 120 160 150 165 100 140 150 240 140 120; End Data Min = @Sum(CAMIONES(i,j): COSTO(i,j)*X(i,j))+@Sum(ALMACEN(i):ALQUILER(i)*Y(i)); @For(DISTRITO(j): @Sum(ALMACEN(i):X(i,j))>= DEMANDA(j)); @For(ALMACEN(i): @Sum(DISTRITO(j):X(i,j))<= CAPACIDAD(i)*Y(i)); @Sum(ALMACEN(i): Y(i))<= 2; @For(CAMIONES(i,j):@Gin(X(i,j))); @For(ALMACEN(i):@Bin(Y(i))); End Variable CAPACIDAD( A) CAPACIDAD( B) CAPACIDAD( C) ALQUILER( A) ALQUILER( B) ALQUILER( C) Y( A) Y( B) Y( C) DEMANDA( 1) DEMANDA( 2) DEMANDA( 3) DEMANDA( 4) X( A, 1) X( A, 2) X( A, 3) X( A, 4) X( B, 1) X( B, 2) X( B, 3) X( B, 4) X( C, 1) X( C, 2) X( C, 3) X( C, 4) COSTO( A, 1) COSTO( A, 2) COSTO( A, 3) COSTO( A, 4) COSTO( B, 1) COSTO( B, 2) COSTO( B, 3) COSTO( B, 4) COSTO( C, 1) COSTO( C, 2) COSTO( C, 3) COSTO( C, 4) Value 200.0000 250.0000 300.0000 7750.000 4000.000 5500.000 1.000000 1.000000 0.000000 100.0000 90.00000 110.0000 60.00000 0.000000 90.00000 0.000000 20.00000 100.0000 0.000000 110.0000 40.00000 0.000000 0.000000 0.000000 0.000000 170.0000 90.00000 120.0000 160.0000 150.0000 165.0000 100.0000 140.0000 150.0000 240.0000 140.0000 120.0000 Reduced Cost 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 7750.000 4000.000 5500.000 0.000000 0.000000 0.000000 0.000000 170.0000 90.00000 120.0000 160.0000 150.0000 165.0000 100.0000 140.0000 150.0000 240.0000 140.0000 120.0000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 Row 1 2 3 4 5 6 7 8 9 Slack or Surplus 54650.00 0.000000 0.000000 0.000000 0.000000 90.00000 0.000000 0.000000 0.000000 Dual Price -1.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 MODEL: [_1] MIN= 170 * X_A_1 + 90 * X_A_2 + 120 * X_A_3 + 160 * X_A_4 + 150 * X_B_1 + 165 * X_B_2 + 100 * X_B_3 + 140 * X_B_4 + 150 * X_C_1 + 240 * X_C_2 + 140 * X_C_3 + 120 * X_C_4 + 7750 * Y_A + 4000 * Y_B + 5500 * Y_C; [_2] X_A_1 + X_B_1 + X_C_1 >= 100; [_3] X_A_2 + X_B_2 + X_C_2 >= 90; [_4] X_A_3 + X_B_3 + X_C_3 >= 110; [_5] X_A_4 + X_B_4 + X_C_4 >= 60; [_6] X_A_1 + X_A_2 + X_A_3 + X_A_4 - 200 * Y_A <= 0; [_7] X_B_1 + X_B_2 + X_B_3 + X_B_4 - 250 * Y_B <= 0; [_8] X_C_1 + X_C_2 + X_C_3 + X_C_4 - 300 * Y_C <= 0; [_9] Y_A + Y_B + Y_C <= 2; @GIN( X_A_1); @GIN( X_A_2); @GIN( X_A_3); @GIN( X_A_4); @GIN( X_B_1); @GIN( X_B_2); @GIN( X_B_3); @GIN( X_B_4); @GIN( X_C_1); @GIN( X_C_2); @GIN( X_C_3); @GIN( X_C_4); @BIN( Y_A); @BIN( Y_B); @BIN( Y_C); END Reporte administrativo: Alquilar solamente los almacenes A y B y desde el almacén A, atender la demanda de los distritos 2 y 4 con 90 y 20 camiones, respectivamente y desde el almacén B, atender la demanda de los distritos 1, 3 y 4, con 100, 110 y 40 camiones, respectivamente. El mínimo costo de distribución y alquiler de los dos almacenes con las que se trabajará, asciende a $54,650. MODELOS DE LOTE MÍNIMO En la fabricación de un determinado producto, se puede presentar la condición “deben producirse al menos m unidades y como máximo M unidades”. Dado que Xi es la cantidad a fabricar del producto i, se añadirán las siguientes restricciones: Xi <= M*Yi Xi >= m*Yi La variable Yi es entera binaria (0 o 1). La variable M es un número cuyo valor es sustancialmente mayor al resto de los valores del modelo o una cota superior para el valor de Xi. El valor m es la cantidad mínima a fabricar de Xi cuando se produce alguna unidad de Xi. Es decir que Xi puede ser: Xi = 0 o m ≤ Xi ≤M Cuando Yi =0 las restricciones se reducen a: Xi≤0 y Xi≥0 con lo que Xi = 0 Cuando Yi =1 las restricciones se reducen a: Xi ≤ M y Xi ≥m LOTE MÍNIMO DE PRODUCCIÓN CARSA planea producir al menos 2000 artefactos con tres máquinas. El tamaño mínimo del lote es de 500 artefactos. La siguientes tabla ofrece los datos pertinentes de la situación. Máquina 1 2 3 Costo de preparación ($) 300 100 200 Costo de producción unitario ($) 2 10 5 Capacidad (unidades) 600 800 1200 Formule el problema como un programa entero binario en lingo compacto y determine la solución y el valor óptimo y presente el reporte administrativo. Índice i: máquina (1..3) Variables de decisión X(i) = Número de artefactos a producir en la máquina i Y(i) = 1 si la máquina i produce artículos o 0 no produce Datos estructurados: CostoPrepara(i) = [300, 100, 200] CostoProduce(i) = [2, 10, 5] Capacidad(i) = [600, 800, 1200] 3 3 Min Z = CostoPreparai ∗ Yi + CostoProducei ∗ Xi i=1 i=1 Sujeto a: ∀i: Xi ≤ Capacidadi ∗ Yi ∀i: Xi ≥ 500 ∗ Yi 3 Xi ≥ 2000 i=1 ∀i: Xi ≥ 0, entero; ∀i: Yi = 0 o 1 Datos, información y modelamiento Índice i: máquina (1..3) Variables de decisión X(i) = Número de artefactos a producir en la máquina i Y(i) = 1 si la máquina i produce artículos o 0 no produce Datos estructurados: CostoPrepara(i) = [300 100 200] CostoProduce(i) = [2 10 5] Capacidad(i) = [600 800 1200] 3 3 Min Z = CostoPreparai ∗ Yi + CostoProducei ∗ Xi i=1 i=1 Sujeto a: ∀i: Xi ≤ Capacidadi ∗ Yi ∀i: Xi ≥ 500 ∗ Yi Sets: MAQUINA/1..3/:X, Y, COSTOPREPARA, COSTOPRODUCE, CAPACIDAD; End Sets Data: COSTOPREPARA = 300 100 200; COSTOPRODUCE = 2 10 5; CAPACIDAD = 600 800 1200; End Data Min = @Sum(MAQUINA: COSTOPREPARA*Y+COSTOPRODUCE*X); @For(MAQUINA: X <= CAPACIDAD*Y); @For(MAQUINA: X >= 500*Y); 3 Xi ≥ 2000 i=1 ∀i: Xi ≥ 0, entero; ∀i: Yi = 0 o 1 @Sum(MAQUINA: X)>= 2000; @For(MAQUINA: @Gin(X); @Bin(Y)); Sets: MAQUINA/1..3/:X,Y,COSTOPREPARA,COSTOPRODUCE,CAPACIDAD; End Sets Data: COSTOPREPARA = 300 100 200; COSTOPRODUCE = 2 10 5; CAPACIDAD = 600 800 1200; End Data Min = @Sum(MAQUINA: COSTOPREPARA*Y + COSTOPRODUCE*X); @For(MAQUINA: X <= CAPACIDAD*Y); @For(MAQUINA: X >= 500*Y); @Sum(MAQUINA: X)>= 2000; @For(MAQUINA: @Gin(X); @Bin(Y)); End MODEL: [_1] MIN= 2 * X_1 + 300 * Y_1 + 10 * X_2 + 100 * Y_2 + 5 * X_3 + 200 * Y_3; [_2] X_1 - 600 * Y_1 <= 0; [_3] X_2 - 800 * Y_2 <= 0; [_4] X_3 - 1200 * Y_3 <= 0; [_5] X_1 - 500 * Y_1 >= 0; [_6] X_2 - 500 * Y_2 >= 0; [_7] X_3 - 500 * Y_3 >= 0; [_8] X_1 + X_2 + X_3 >= 2000; @GIN( X_1); @BIN( Y_1); @GIN( X_2); @BIN( Y_2); @GIN( X_3); @BIN( Y_3); END Variable X( 1) X( 2) X( 3) Y( 1) Y( 2) Y( 3) COSTOPREPARA( 1) COSTOPREPARA( 2) COSTOPREPARA( 3) COSTOPRODUCE( 1) COSTOPRODUCE( 2) COSTOPRODUCE( 3) CAPACIDAD( 1) CAPACIDAD( 2) CAPACIDAD( 3) Row 1 2 3 4 5 6 7 8 Value 600.0000 500.0000 900.0000 1.000000 1.000000 1.000000 300.0000 100.0000 200.0000 2.000000 10.00000 5.000000 600.0000 800.0000 1200.000 Slack or Surplus 11300.00 0.000000 300.0000 300.0000 100.0000 0.000000 400.0000 0.000000 Reduced Cost 2.000000 10.00000 5.000000 300.0000 100.0000 200.0000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 Dual Price -1.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 Reporte administrativo: Trabajar con las 3 máquinas y producir 600 unidades en la máquina 1, 500 unidades en la máquina 2 y 900 unidades en la máquina 3, con un costo mínimo de $11,300. RESTRICCIONES EXCLUYENTES (K de N) Si el modelo completo incluye un conjunto de N restricciones posibles, entre las que solo deben cumplir K de ellos (K<N). La lógica de optimización será elegir la combinación de K restricciones que permita alcanzar el mejor objetivo. Este caso se considera: f1(X1, X2, … Xn) <= d1 f2(X1, X2, … Xn) <= d2 … fN(X1, X2, … Xn) <= dN Entonces, se debe plantear una formulación equivalente, para que se deban cumplir K restricciones: f1(X1, X2, … Xn) <= d1 + M*Y1 f2(X1, X2, … Xn) <= d2 + M*Y2 N … Yi = N − K fN(X1, X2, … Xn) <= dN + M*YN i=1 PRODUCCIÓN ALTERNATIVA Una empresa ha diseñado tres nuevos productos y dispone de dos plantas que los pueden producir. Sin embargo, para evitar una diversificación excesiva de la línea de productos de la empresa, la administración ha dispuesto en primer lugar que deben producirse como máximo dos de estos tres nuevos productos posibles. Y, en segundo lugar, que solo una de las plantas debe asignarse para la fabricación de los nuevos productos. Se considera que el costo unitario de fabricación de cada producto sería el mismo en las dos plantas, pero por diferencia de instalaciones, el número de horas de producción por unidad de cada producto puede diferir entre ellas. Estos datos se dan en la tabla adjunta junto con la información del departamento de mercadotecnia del número de unidades de cada producto que se pueden vender a la semana si se producen. El objetivo es seleccionar los productos, la planta y las tasas de producción de los nuevos productos de manera que se maximice la ganancia total. Hay que considerar que las tasas de producción no pueden adoptar valores decimales Tiempo de producción utilizado por cada unidad producida (horas) Producto 1 Producto 2 Producto 3 Planta 1 Planta 2 3 4 5 6 2 2 Ganancia unitaria Ventas potenciales 5 7 7 5 3 9 Horas disponibles por semana 30 40 (miles de $) (unid/sem) Datos, información y modelamiento Índice i: producto (1..3) j: planta (1..2) Sets: PRODUCTO/1..3/:X, Y, GANANCIA, VENTA; PLANTA /1..2/: W, CAPACIDAD; PXP (PRODUCTO,PLANTA):TIEMPO; End Sets Variables de decisión X(i) = Número de unidades de productos i a fabricar Y(i) = 1 si se elaborar el producto i o 0 si no se elabora W(j) = 1 NO se considera la planta j o 0 SI se considera Datos estructurados: Ganancia(i) = [5 7 3] Ventas(i) = [7 5 9] Capacidad(j) = [30 40] Tiempo(i,j) = [3 4 5 6 2 2] Data: GANANCIA = 5 7 3; VENTA = 7 5 9; CAPACIDAD = 30 40; TIEMPO = 3 4 5 6 2 2; End Data Datos, información y modelamiento 3 Max Z = Gananciai ∗ Xi Max = @Sum(PRODUCTO: GANANCIA*X); i=1 Sujeto a: ∀i: Xi ≤ Ventasi ∗ Yi @For(PRODUCTO: X <= VENTA*Y); 3 @Sum(PRODUCTO: Y)<= 2; Yi ≤ 2 i=1 3 ∀j: Tiempoij ∗ Xi ≤ Capacidadj + 10000 ∗ Wj i=1 2 Wj = 2 − 1 j=1 ∀i: Xi ≥ 0, entero y Yi = 0 o 1; ∀j: Wj = 1 o 0 N= 2; K=1 → N-K = 2-1 @For(PLANTA(j): @Sum(PRODUCTO(i): TIEMPO(i,j)*X(i))<=CAPACIDAD(j)+10000*W(j)); @Sum(PLANTA: W)= 2-1; @For(PRODUCTO: @Gin(X); @Bin(Y)); @For(PLANTA: @Bin(W)); Sets: PRODUCTO/1..3/:X, Y, GANANCIA, VENTA; PLANTA /1..2/: W, CAPACIDAD; PXP (PRODUCTO,PLANTA):TIEMPO; End Sets Data: GANANCIA = 5 7 3; VENTA = 7 5 9; CAPACIDAD = 30 40; TIEMPO = 3 4 5 6 2 2; End Data Max = @Sum(PRODUCTO: GANANCIA*X); @For(PRODUCTO: X <= VENTA*Y); @Sum(PRODUCTO: Y)<= 2; @For(PLANTA(j):@Sum(PRODUCTO(i):TIEMPO(i,j)*X(i))<=CAPACIDAD(j)+10000*W(j)); @Sum(PLANTA: W)= 2-1; @For(PRODUCTO: @Gin(X); @Bin(Y)); @For(PLANTA: @Bin(W)); End Variable X( 1) X( 2) X( 3) Y( 1) Y( 2) Y( 3) GANANCIA( 1) GANANCIA( 2) GANANCIA( 3) VENTA( 1) VENTA( 2) VENTA( 3) CAPACIDAD( 1) CAPACIDAD( 2) W( 1) W( 2) TIEMPO( 1, 1) TIEMPO( 1, 2) TIEMPO( 2, 1) TIEMPO( 2, 2) TIEMPO( 3, 1) TIEMPO( 3, 2) Row 1 2 3 4 5 6 7 8 Value 6.000000 0.000000 8.000000 1.000000 0.000000 1.000000 5.000000 7.000000 3.000000 7.000000 5.000000 9.000000 30.00000 40.00000 1.000000 0.000000 3.000000 4.000000 5.000000 6.000000 2.000000 2.000000 Slack or Surplus 54.00000 1.000000 0.000000 1.000000 0.000000 9996.000 0.000000 0.000000 Reduced Cost -5.000000 -7.000000 -3.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 Dual Price 1.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 MODEL: [_1] MAX= 5 * X_1 + 7 * X_2 + 3 * X_3; [_2] X_1 - 7 * Y_1 <= 0; [_3] X_2 - 5 * Y_2 <= 0; [_4] X_3 - 9 * Y_3 <= 0; [_5] Y_1 + Y_2 + Y_3 <= 2; [_6] - 10000 * W_1 + 3 * X_1 + 5 * X_2 + 2 * X_3 <= 30; [_7] - 10000 * W_2 + 4 * X_1 + 6 * X_2 + 2 * X_3 <= 40; [_8] W_1 + W_2 = 1; @BIN( W_1); @BIN( W_2); @GIN( X_1); @BIN( Y_1); @GIN( X_2); @BIN( Y_2); @GIN( X_3); @BIN( Y_3); END Reporte administrativo: Producir 6 unidades del producto 1 y 8 unidades del producto 3 y trabajar solo en la planta 2, obteniendo un beneficio de $ 54 mil. PRODUCCIÓN SIDERURGICA Una siderúrgica produce unas planchas de metal a partir de aleaciones, cada una de las cuales tienen un porcentaje de agentes contaminantes A, B y C. Los porcentajes máximos aceptables para cada contaminante es de 2.3% de A, 1.7% de B y 3.1 % de C. El costo y las propiedades de cada aleación aparecen en la siguiente tabla: Costo por tonelada(mil$) % de A % de B % de C Aleación 1 190 2.2% 1.8% 3.2% Aleación 2 200 2.5% 1.5% 4.1% Aleación 3 185 2.4% 1.9% 2.9% Si fuese aceptable con que se cumplan con dos de las restricciones de los agentes contaminantes, entonces, determinar cómo minimizar los costos para cinco toneladas de producción. Formular el modelo matemático en lingo compacto y presentar el reporte administrativo Datos, información y modelamiento Índice i: aleación (1..3) j: agente contaminante (1..3) Variables de decisión X(i) = Número tonelada de aleación i a producir Y(j) = 1 aceptar el contaminante i o 0 no aceptar Datos estructurados: Costo(i) = [190 200 185] Tolerancia(j) = [0.023 0.017 0.031] Contaminante(i,j) = [0.022 0018 0.032 0.025 0.015 0.041 0.024 0.019 0.029] Sets: ALEACION/1..3/:X,COSTO; AGENTE/1..3/: Y, TOLERANCIA; AXA (ALEACION,AGENTE):CONTAMINANTE; End Sets Data: COSTO = 190 200 185; TOLERANCIA = 0.023 0.017 0.031; CONTAMINANTE = 0.022 0018 0.032 0.025 0.015 0.041 0.024 0.019 0.029; End Data Datos, información y modelamiento 3 Min Z = Costoi ∗ Xi Min = @Sum(ALEACION: COSTO*X); i=1 Sujeto a: 3 ∀j: Contaminanteij ∗ Xi ≤ Toleranciaj ∗ 5 + 10000 ∗ Yj i=1 3 Yj = 3 − 2 j=1 3 Xi = 5 i=1 ∀i: Xi ≥ 0 ∀j: Yj = 0 o 1 N= 3; K=2 → N-K = 3-2 @For(AGENTE(j): @Sum(ALEACION(i): CONTAMINANTE(i,j)*X(i))<=TOLERANCIA(j)*5+10000*Y(j)); @Sum(AGENTE: Y)<= 3-2; @Sum(ALEACION: X)= 5; @For(AGENTE:@Bin(Y)); Sets: ALEACION/1..3/:X,COSTO; AGENTE/1..3/: Y, TOLERANCIA; AXA (ALEACION,AGENTE):CONTAMINANTE; End Sets Data: COSTO = 190 200 185; TOLERANCIA = 0.023 0.017 0.031; CONTAMINANTE = 0.022 0.018 0.032 0.025 0.015 0.041 0.024 0.019 0.029; End Data Min = @Sum(ALEACION: COSTO*X); @For(AGENTE(j):@Sum(ALEACION(i): CONTAMINANTE(i,j)*X(i))<=TOLERANCIA(j)*5+10000*Y(j)); @Sum(AGENTE: Y)<= 3-2; @Sum(ALEACION: X)= 5; @For(AGENTE:@Bin(Y)); End Variable X( 1) X( 2) X( 3) COSTO( 1) COSTO( 2) COSTO( 3) Y( 1) Y( 2) Y( 3) TOLERANCIA( 1) TOLERANCIA( 2) TOLERANCIA( 3) CONTAMINANTE( 1, 1) CONTAMINANTE( 1, 2) CONTAMINANTE( 1, 3) CONTAMINANTE( 2, 1) CONTAMINANTE( 2, 2) CONTAMINANTE( 2, 3) CONTAMINANTE( 3, 1) CONTAMINANTE( 3, 2) CONTAMINANTE( 3, 3) Value 2.500000 0.000000 2.500000 190.0000 200.0000 185.0000 0.000000 1.000000 0.000000 0.2300000E-01 0.1700000E-01 0.3100000E-01 0.2200000E-01 0.1800000E-01 0.3200000E-01 0.2500000E-01 0.1500000E-01 0.4100000E-01 0.2400000E-01 0.1900000E-01 0.2900000E-01 Row 1 2 3 4 5 6 Slack or Surplus 937.5000 0.000000 9999.992 0.2500000E-02 0.000000 0.000000 Reduced Cost 0.000000 17.50000 0.000000 0.000000 0.000000 0.000000 -0.2500000E+08 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 Reporte administrativo: Mezclar 2.5 toneladas de las aleación 1 y 3 con un costo mínimo de $937.5 mil. Dual Price -1.000000 2500.000 0.000000 0.000000 0.000000 -245.0000 MODEL: [_1] MIN= 190 * X_1 + 200 * X_2 + 185 * X_3; [_2] - 10000 * Y_1 + 0.022 * X_1 + 0.025 * X_2 + 0.024 * X_3 <= 0.115; [_3] - 10000 * Y_2 + 0.018 * X_1 + 0.015 * X_2 + 0.019 * X_3 <= 0.08500000000000001 ; [_4] - 10000 * Y_3 + 0.032 * X_1 + 0.041 * X_2 + 0.029 * X_3 <= 0.155; [_5] Y_1 + Y_2 + Y_3 = 1; [_6] X_1 + X_2 + X_3 = 5; @BIN( Y_1); @BIN( Y_2); @BIN( Y_3); END VARIABLES QUE TOMAN UN CONJUNTO DE VALORES Existen situaciones en las que una variable Xj sólo puede tomar ciertos valores bien definidos: Xj a1, a2, … an. Este caso se puede trabajar con variables binarias: 1 si Xj = ai Yij = 0 si Xj ≠ ai Como Xj solo puede tomar un valor en el conjunto, entonces se tiene la siguiente restricción: n Yij = 1 j i=1 Además, Xj vendrá dado por: n Xj = ai ∗ Yij i=1 FABRICACIÓN DE MUEBLES Un microempresario ofrece al público 3 modelos novedosos de muebles, para elaborar cada uno de éstos necesita de 3 tipos de material. Él se encuentra indeciso puesto que le visitaron representantes de 3 distribuidoras de insumos que ofrecen abastecerle de los materiales que necesita bajo los mismos costos, aunque en cantidades limitadas puesto que tienen también otros clientes. De estos 3 proveedores debe trabajar solamente con uno. El microempresario quiere fabricar la misma cantidad de muebles para sus 3 modelos. El beneficio obtenido por cada mueble de los modelos 1, 2 y 3 es de $750, $900 y $800 respectivamente. En la tabla adjunta se muestra la cantidad de cada material que necesita por unidad de cada modelo de mueble, así como la cantidad de cada material de la que cada proveedor dispone mensualmente. Material 1 Material 2 Material 3 Material necesario (unidades) Modelo 1 Modelo 2 Modelo 3 25 10 33 17 15 18 8 7 12 Disponibilidad de materiales (unidades) Proveedor A Proveedor B Proveedor C 1200 1500 1750 950 1200 800 600 820 750 Según lo expuesto, sugiera un plan de producción una vez decidido con cuál de los proveedores es con quien trabajará. Datos, información y modelamiento Índice i: muebles (1..3) [Modelo 1 Modelo 2 Modelo 3] j: proveedores (1..3) [A B C] k: material (1..3) [MP1 MP2 MP3] Variables de decisión X(i) = Cantidad de productos i a producir Y(j) = 1 seleccionar proveedor j o 0 no seleccionar Datos estructurados: Ganancia(i) = [750 900 800] Material-nece(ik) = [25 17 8 10 15 7 33 18 12] Materuial-dispo(jk) = [1200 1500 1750 950 1200 800 600 820 750] SETS: MUEBLES/1..3/:GANANCIA,X; PROVEEDORES/1..3/:Y; MATERIAL/A B C/:; MXM(MUEBLES,MATERIAL):MATERIAL_NECE; PXM(PROVEEDORES,MATERIAL):MATERIAL_DISPO; ENDSETS DATA: GANANCIA=750 900 800; MATERIAL_NECE= 25 17 8 10 15 7 33 18 12; MATERIAL_DISPO=1200 950 600 1500 1200 820 1750 800 750; ENDATA: 3 Max Z = Gananciai ∗ Xi MAX=@SUM(MUEBLES(I):GANANCIA(I)*X(I)); i=1 Sujeto a: 3 3 ∀k: Material_neceik ∗ Xi ≤ Material_dispojk ∗ Yj i=1 3 Yj = 1 j=1 X1=X2=X3 ∀i: Xi ≥ 0, entero ∀j: Yj = 0 o 1 j=1 @FOR(MATERIAL(K): @SUM(MUEBLES(I):MATERIAL_NECE(I,K)*X(I))<= @SUM(PROVEEDORES(J):MATERIAL_DISPO(J,K)*Y(J))); @SUM(PROVEEDORES(J):Y(J))=1; X(1)=X(2); X(1)=X(3); @FOR(MUEBLES(I):@GIN(X(I))); @FOR(PROVEEDORES(J):@BIN(Y(J))); End SETS: MUEBLES/1..3/:GANANCIA,X; PROVEEDORES/1..3/:Y; MATERIAL/A B C/:; MXM(MUEBLES,MATERIAL):MATERIAL_NECE; PXM(PROVEEDORES,MATERIAL):MATERIAL_DISPO; ENDSETS DATA: GANANCIA=750 900 800; MATERIAL_NECE= 25 17 8 10 15 7 33 18 12; MATERIAL_DISPO=1200 950 600 1500 1200 820 1750 800 750; ENDDATA MAX=@SUM(MUEBLES(I):GANANCIA(I)*X(I)); @FOR(MATERIAL(K): @SUM(MUEBLES(I):MATERIAL_NECE(I,K)*X(I))<=@SUM(PROVEEDORES(J):MATERIAL_DISPO (J,K)*Y(J))); @SUM(PROVEEDORES(J):Y(J))=1; X(1)=X(2); X(1)=X(3); @FOR(MUEBLES(I):@GIN(X(I))); @FOR(PROVEEDORES(J):@BIN(Y(J))); End Variable GANANCIA( 1) GANANCIA( 2) GANANCIA( 3) X( 1) X( 2) X( 3) Y( 1) Y( 2) Y( 3) MATERIAL_NECE( 1, A) MATERIAL_NECE( 1, B) MATERIAL_NECE( 1, C) MATERIAL_NECE( 2, A) MATERIAL_NECE( 2, B) MATERIAL_NECE( 2, C) MATERIAL_NECE( 3, A) MATERIAL_NECE( 3, B) MATERIAL_NECE( 3, C) MATERIAL_DISPO( 1, A) MATERIAL_DISPO( 1, B) MATERIAL_DISPO( 1, C) MATERIAL_DISPO( 2, A) MATERIAL_DISPO( 2, B) MATERIAL_DISPO( 2, C) MATERIAL_DISPO( 3, A) MATERIAL_DISPO( 3, B) MATERIAL_DISPO( 3, C) Value 750.0000 900.0000 800.0000 22.00000 22.00000 22.00000 0.000000 1.000000 0.000000 25.00000 17.00000 8.000000 10.00000 15.00000 7.000000 33.00000 18.00000 12.00000 1200.000 950.0000 600.0000 1500.000 1200.000 820.0000 1750.000 800.0000 750.0000 Reduced Cost 0.000000 0.000000 0.000000 -750.0000 -900.0000 -800.0000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 Row 1 2 3 4 5 6 7 Slack or Surplus 53900.00 4.000000 100.0000 226.0000 0.000000 0.000000 0.000000 Dual Price 1.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 Reporte administrativo: Producir 22 unidades de cada producto y trabajar con el proveedor B, obteniendo un beneficio de $53.9 mil. MODEL: [_1] MAX= 750 * X_1 + 900 * X_2 + 800 * X_3; [_2] - 1200 * Y_1 - 1500 * Y_2 - 1750 * Y_3 + 25 * X_1 + 10 * X_2 [_3] - 950 * Y_1 - 1200 * Y_2 - 800 * Y_3 + 17 * X_1 + 15 * X_2 + [_4] - 600 * Y_1 - 820 * Y_2 - 750 * Y_3 + 8 * X_1 + 7 * X_2 + 12 [_5] Y_1 + Y_2 + Y_3 = 1; [_6] X_1 - X_2 = 0; [_7] X_1 - X_3 = 0; @BIN( Y_1); @BIN( Y_2); @BIN( Y_3); @GIN( X_1); @GIN( X_2); @GIN( END + 33 * X_3 <= 0; 18 * X_3 <= 0; * X_3 <= 0; X_3); EJERCICIOS DIVERSOS [revisar y completar] TRANSPORTE DE PLANTAS A ALMACÉN Una empresa desea programar el transporte de su producto principal que se elabora en 4 plantas con destino a 3 almacenes. Se conoce la demanda de los almacenes, la capacidad de producción de las plantas y el costo de transporte por unidad de transporte de una planta a un almacén. Plantas 1 2 3 4 Demanda (unidades) Almacenes ($ / Unid) 1 2 3 3 2 4 2 4 3 3 5 3 4 3 2 1200 900 500 Capacidad (unidades) 950 1150 1000 900 Se estima un costo fijo de operación para cada planta. Planta Costo fijo de operación ($) 1 600 2 900 3 200 4 800 Asimismo, se debe tener en cuenta que si trabaja la planta 1, no debe trabajar la planta 2; y si trabaja la planta 3, entonces debe trabajar la planta 4. Formule el modelo de programación entera-binaria que permita determinar desde que plantas realizar los envíos, así como el número de unidades a enviar desde cada una de las plantas seleccionadas hacia cada uno de los almacenes y presente el reporte administrativo. SETS: PLANTA/1..4/: CAPACIDAD, COSTOFIJO, Y; ALMACEN/1..3/: DEMANDA; RUTA (PLANTA, ALMACEN): COSTO, X; CONDICION (PLANTA)/1,2/:; SEGCONDICION(PLANTA)/3,4/: NUM; ENDSETS DATA: CAPACIDAD = 950 1150 1000 900; DEMANDA = 1200 900 500; COSTO = 3 2 4 2 4 3 3 5 3 4 3 2; COSTOFIJO = 600 900 200 800; NUM = -1 1; ENDDATA MIN = @SUM(RUTA(I,J):COSTO(I,J)*X(I,J))+@SUM(PLANTA(I):COSTOFIJO(I)*Y(I)); @FOR(PLANTA(I):@SUM(ALMACEN(J): X(I,J))<= CAPACIDAD(I)*Y(I)); @FOR(ALMACEN(J):@SUM(PLANTA(I): X(I,J))>= DEMANDA(J)); @SUM(CONDICION(I):Y(I))<=1; @SUM(SEGCONDICION(I):Y(I)*NUM(I)<=1; @FOR(PLANTA(I):@BIN(Y(I))); END PRODUCTORA DE ALIMENTOS Una compañía productora de alimentos está considerando la construcción de cinco nuevas fábricas durante los próximos 4 años en terrenos de su propiedad. La compañía podría empezar y terminar la construcción de cualquiera de las plantas en cualquiera de los años, pero los costos de construcción que supondría esto, variarían de acuerdo con la siguiente tabla: Años de construcción Fábrica A B C D E 1 100 150 125 175 140 2 125 125 110 200 105 3 110 175 100 220 155 4 130 140 170 250 135 La compañía está restringida en su plan de construcción por las siguientes condiciones: • Las fábricas A y B no pueden ser construidas después de la fábrica C • La compañía no puede gastar más de 500 unidades monetarias en total • Las fábricas D y E deben ser construidas durante el mismo año SETS: CONSTRUCION/1,2,3,4,5/: Y; FABRICA/1,2,3,4,5/: GASTO; PERIODO/1,2,3,4/; PAREJA(FABRICA, PERIODO): COSTO, X; ENDSETS DATA: COSTO=100,125,110,130 150,125,175,140,125,110,100,170,175,200,220,250 140,105,155,135; GASTO=500,500,500,500,500; ENDDATA MIN=@SUM(PAREJA(I,J): COSTO(I,J)*X(I,J)); @FOR(FABRICA(I): @SUM(PAREJA(I,J): COSTO(I,J)*X(I,J))<=GASTO(I)); @SUM(PAREJA(I,J): X(I,J))= 5; Y(4)-Y(5)<=0; Y(1)-Y(2)<=Y(3); @FOR(PAREJA: @BIN(X)); @FOR(CONSTRUCION: @BIN(Y)); END DISTRIBUCIÓN DE BEBIDAS Un empresario se dedica a la venta de cerveza y tiene a su disposición 3 depósitos para alquilar y poder almacenar su producto. Los almacenes están situados en Trujillo, Arequipa y Chiclayo. El producto se vende en La Libertad, Arequipa y Lambayeque. Costo por camión La Libertad Arequipa Lambayeque Capacidad mensual (camiones) Trujillo 35 180 72 180 Arequipa 195 30 200 240 Chiclayo 65 240 45 250 Demanda mensual (camiones) 110 90 70 Almacenes Se sabe que utilizar un almacén implica pagar un costo de alquiler mensual por ese derecho. Si es almacén de Trujillo cuesta 1000 soles, el de Arequipa 800 y el de Chiclayo 650. Formule un modelo matemático de programación lineal entera que permita determinar cuantos camiones a los puntos de venta SETS: ALMACEN/1..3/:CAPACIDADMENSUAL,CF,Y; TIENDA/1..3/:DEMANDA; PAREJA1(ALMACEN,TIENDA):COSTO,X; ENDSETS DATA: CAPACIDADMENSUAL=180 240 250; CF=1000,800,650; DEMANDA= 110 90 70; COSTO= 35 180 72 195 30 200 65 240 45; ENDDATA !FUNCION OBJETIVA; MIN=@SUM(PAREJA1(i,j):COSTO(i,j)*X(i,j))+@SUM(ALMACEN(i):CF(i)*Y(i)); !RESRICCIONES; @FOR(ALMACEN(i):@SUM(TIENDA(j):X(i,j))<=CAPACIDADMENSUAL(i)*Y(i)); @FOR(TIENDA(j):@SUM(ALMACEN(i):X(i,j))>=DEMANDA(j)); @FOR(ALMACEN(i):@BIN(Y(i))); END APERTURA DE NUEVAS BODEGAS Una compañía planea abrir unas bodegas en cuatro ciudades: Nueva York, Los Ángeles, Chicago, Atlanta. Desde cada bodega se puede embarcar hasta 100 unidades. El costo fijo por semana para mantener en operación cada bodega es de 400, 500, 300 y 150 dólares respectivamente. La región 1 del país requiere 80 unidades por semana, la región 2 demanda 70 unidades por semana y la región 3 necesita 40 unidades por semana. Los costos por enviar una unidad desde la planta hasta la región están en la tabla siguiente. Se desea cumplir con las demandas al costo mínimo, sujeto a la información precedente y al as restricciones siguientes: 1) Si se abre la bodega de Nueva York, entonces se debe abrir la bodega de Los Ángeles. 2) Es posible abrir a lo más dos bodegas. 3) Se tiene que abrir la bodega de Atlanta o la de Los Ángeles. Desde Nueva York Los Ángeles Chicago Atlanta Región 1 20 48 26 24 Hasta (dólares) Región 2 40 15 35 50 Región 3 50 26 18 35 SETS: CIUDAD/C1,C2,C3,C4/:CAPACIDAD; REGION/1,2,3/:DEMANDA; RUTA(CIUDAD,REGION):COSTO,X; CF/1/:COSTO_ELEGIR; CIUDAD_ELEGIR/Y1,Y2,Y3,Y4/:ASIGNAR; BINARIA(CF,CIUDAD_ELEGIR):COSTO_FIJO,T; ENDSETS DATA: CAPACIDAD=100,100,100,100; DEMANDA=80,70,40; COSTO=20,40,50,48,15,26,26,35,18,24,50,35; COSTO_FIJO=400,500,300,150; ENDDATA !FUNCION OBJETIVO; Min= @SUM(RUTA(i,j):COSTO(i,j)*X(i,j))+@SUM(BINARIA(i,j):COSTO_FIJO(m,n)*T(m,n)); !RESTRICCION DE DEMANDA; @FOR(REGION(j):@SUM(CIUDAD(i):X(i,j))>=DEMANDA(j)); !RESTRICCION DE CAPACIDAD; @FOR(CIUDAD(i):@SUM(REGION(j):X(i,j))<=CAPACIDAD(i))*ASIGNAR(n)); !RESTRICCION BINARIA; @FOR(BINARIA:@BIN(T)); @FOR(CIUDAD_ELEGIR(n):ASIGNAR(n)+ASIGNAR(n+1)=2); @FOR(CIUDAD_ELEGIR(n): ASIGNAR(n)+ASIGNAR(n+1)+ASIGNAR(n+2)+ASIGNAR(n+3)<=2); @FOR(CIUDAD_ELEGIR(n):ASIGNAR(n+1)+ASIGNAR(n+3)=1); END PREPARACIÓN DE COMPUTADORAS PARA EL GOBIERNO La compañía SOFT se especializa en la preparación de programas de computadora para el gobierno y la industria. Estos programas se escriben en varios lenguajes de programación. La compañía tiene tres programadores que realizan esta labor y existen cinco trabajos de programación que deben terminarse lo máximo pronto posible. No todos los programadores trabajan a la misma velocidad en todos los lenguajes y se les paga en forma diferente con base a su experiencia. Cada uno de los trabajos debe elaborarlo un solo programador. Los costos de realización de cada trabajado por programador se muestran en la tabla: Programador Cesar Luis Raúl Trabajo1 100 80 200 Costos de realización de los trabajos (UM) Trabajo2 Trabajo3 Trabajo 4 150 200 100 200 100 100 250 250 150 Trabajo5 50 80 100 Considere la siguiente información del tiempo para cada programador para terminar cada trabajo y su tiempo disponible Tiempo de realización de los trabajos(horas) Disponibilidad Programador Trabajo1 Trabajo2 Trabajo3 Trabajo4 Trabajo5 (horas) Cesar 10 15 20 10 5 35 Luis 4 10 5 5 4 20 Raúl 20 25 25 15 10 40 Plantee un problema de PE adecuado a esta situación Muchas gracias