Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
UNIVERSIDAD DISTRITAL FRANCISCO JOSE DE CALDAS PROYECTO CURRICULAR DE INGENIERIA INDUSTRIAL AREA SISTEMAS PRODUCTIVO Código. 110 Créditos: 3. Grupo 025 TALLER 2 PROGRAMACIÓN Y CONTROL DE LA PRODUCCIÓN_Gr.25 Código Nombre % Participación en el trabajo / 100% Nota 20171015098 Jenniffer Alejandra Benavides Liévano 33% 20162015433 Iván Felipe Mejía Peña 33% 20171015054 José Mauricio Lobatón Gómez 33% Problema 1 Suponga que se tienen los siguientes trabajos que deben ser secuenciados y tienen restricciones de precedencia como se muestra en la figura. Se tiene una sola maquina Figurta 1.Tiempos asociados a los trabajos. Tabla.1. Tiempos de trabajo a) Con los datos presentados anteriormente usted debe codificar un algoritmo que solucione el problema de minimizar el retardo máximo. Recuerde que el algoritmo debe solucionar cualquier tipo instancia dependiente del tamaño de esta. Usted puede utilizar cualquier programa para codificar el algoritmo, pero el código debe estar debidamente comentado (java, phyton, c++, vba, gams, Xpress –MP) b) Formule y resuelva un modelo de programación lineal general que represente la situación del problema anterior, formule claramente conjuntos, parámetros, variables de decisión, función objetivo y restricciones Debido a la naturaleza del problema, donde el número de máquinas a emplear es uno, se tienen precedencias entre las máquinas, y la función objetivo es minimizar el retardo, se empleara el algoritmo de lawler, el cual se describe a continuación: 1|𝑃𝑟𝑒𝑐𝑒𝑑𝑒𝑛𝑐𝑖𝑎|𝐿𝑗 𝐶𝑚𝑎𝑥 Completar el último trabajo 𝐽 Conjunto de trabajos ya programados Trabajos Tiempos de entrega Tiempos de procesamiento n d_J p_j 1 8 15 2 4 14 3 7 15 4 5 4 5 15 13 6 12 8 7 3 16 8 7 8 9 15 12 10 6 5 11 9 14 12 17 12 13 14 16 14 5 6 15 20 4 16 14 16 17 8 8 18 16 11 19 16 3 𝐽𝐶 Complemento del conjunto J, es decir el conjunto de trabajos que faltan por programar 𝐽´ Conjunto de todos los trabajos sin sucesores (Subconjunto de 𝐽𝐶) 𝐿𝑗 Retardo del trabajo tipo j 𝑑𝑗 Tiempos de entrega del trabajo tipoi 𝑃𝑗 Tiempo de procesamiento del trabajo tipo j 𝑛 Trabajos Descripción del algoritmo Paso 1 𝐶𝑚𝑎𝑥 = ∑ 𝑃𝑗 𝐽 = ∅ 𝐽𝐶 = {1,2, … 𝑛} 𝐽´ = 𝐶𝑜𝑛𝑗𝑢𝑛𝑡𝑜 𝑑𝑒 𝑡𝑜𝑑𝑜𝑠 𝑙𝑜𝑠 𝑡𝑟𝑎𝑏𝑎𝑗𝑜𝑠 sin 𝑠𝑢𝑐𝑒𝑠𝑜𝑟𝑒𝑠 Paso 2 𝐷𝑒𝑗𝑎𝑟 𝑞𝑢𝑒 𝐽∗𝑠𝑒𝑎 𝑡𝑎𝑙 𝑞𝑢𝑒 ℎ𝐽∗ ∑ 𝑃𝑗 𝐽∈𝐽𝐶 = min𝐽∈𝐽𝐶 ℎ𝑗 [∑ 𝑃𝑗 − 𝑑𝑗] 𝐶𝑜𝑙𝑜𝑐𝑎𝑟 𝐽∗𝑒𝑛 𝐽 𝑒𝑛 𝑙𝑎 𝐾 − 𝑒𝑠𝑖𝑚𝑎 𝑝𝑜𝑠𝑖𝑐𝑖ó𝑛 𝐸𝑙𝑖𝑚𝑖𝑛𝑎𝑟 𝐽∗ 𝑑𝑒 𝐽𝐶 𝑟𝑒𝑝𝑟𝑒𝑠𝑒𝑛𝑡𝑎 𝑒𝑙 𝑐𝑜𝑛𝑗𝑢𝑛𝑡𝑜 𝑑𝑒 𝑡𝑟𝑎𝑏𝑎𝑗𝑜𝑠 𝑞𝑢𝑒 𝑝𝑢𝑒𝑑𝑒𝑛 𝑠𝑒𝑟 𝑝𝑟𝑜𝑔𝑟𝑎𝑚𝑎𝑑𝑜𝑠 𝑖𝑛𝑚𝑒𝑑𝑖𝑎𝑡𝑎𝑚𝑒𝑛𝑡𝑒 𝑎𝑛𝑡𝑒𝑠 𝑑𝑒𝑙 𝑐𝑜𝑛𝑗𝑢𝑛𝑡𝑜 𝐽 Paso 3 𝑆𝑖 𝐽𝐶 = ∅, 𝑒𝑛𝑡𝑜𝑛𝑐𝑒𝑠 𝑝𝑎𝑟𝑒 𝑆𝑖 𝑘 = 𝑘 − 1, 𝑒𝑛𝑡𝑜𝑛𝑐𝑒𝑠 𝑣𝑎𝑦𝑎 𝑎𝑙 𝑝𝑎𝑠𝑜 2 Formulación: Supuesto 𝑆𝑗 = 0 Función objetivo 𝑀𝑖𝑛 𝐶𝑗 − 𝑑𝑗 (0) s.a. ∑ 𝑌𝑗𝑘 𝑘∈𝑅𝑎𝑛𝑘 = 1 ∀𝑗 ∈ 𝐽𝑜𝑏𝑠 (1) ∑ 𝑌𝑗𝑘 𝑗∈𝐽𝑜𝑏𝑠 = 1 ∀𝑘 ∈ 𝑅𝑎𝑛𝑘 (2) 𝑆𝑘𝑖 + ∑ 𝑝𝑗𝑖𝑌𝑗𝑘 𝑗∈𝐽𝑜𝑏𝑠 ≤ 𝑆𝑘+1,𝑖 ∀𝑖 ∈ 𝑀𝑎𝑐ℎ, 𝑘 ∈ 𝑅𝑎𝑛𝑘 \𝑘 ≠ 𝑛 (3) 𝑆𝑘𝑖 + ∑ 𝑝𝑗𝑖𝑌𝑗𝑘𝑗∈𝐽𝑜𝑏𝑠 ≤ 𝑆𝑘,𝑖+1 ∀𝑘 ∈ 𝑅𝑎𝑛𝑘, 𝑖 ∈ 𝑀𝑎𝑐ℎ \𝑖 ≠ 𝑚 (4) 𝑆𝑛𝑚 + ∑ 𝑝𝑗𝑚𝑌𝑗𝑛 𝑗∈𝐽𝑜𝑏𝑠 ≤ 𝐶𝑚𝑎𝑥 (5) 𝑆𝑘𝑚 + ∑ 𝑝𝑗𝑚𝑌𝑗𝑘 𝑗∈𝐽𝑜𝑏𝑠 ≤ 𝐶𝑚𝑎𝑥 ∀𝑘 ∈ 𝑅𝑎𝑛𝑘 (5′) 𝑌𝑗𝑘 ∈ {0,1} ∀𝑗 ∈ 𝐽𝑜𝑏𝑠, 𝑘 ∈ 𝑅𝑎𝑛𝑘 (6) 𝑠𝑘𝑖 ≥ 0 ∀ 𝑘 ∈ 𝑅𝑎𝑛𝑘, 𝑖 ∈ 𝑀𝑎𝑐ℎ (7) EJERCICIO 2 Suponga que cuenta con 30 trabajos que deben ser secuenciados en tres diferentes máquinas siguiendo la misma ruta M1-M2- M3, los tiempos de procesamiento se dan en la Tabla 2. Tabla. 2. Tiempos de procesamiento a) Obtenga la secuencia óptima utilizando el algoritmo de Branch and Bound propuesto por Ignall and Schrage. Para minimizar el Makespan. b) Formule y resuelva un modelo de programación lineal general que represente la situación del problema anterior, formule claramente conjuntos, parámetros, variables de decisión, función objetivo y restricciones. Considere los siguientes objetivos: • Minimizar el Makespan • Minimizar el Mean Flow Time Nota: compare sus resultados con los del Taller 1. a. Algoritmo de Branch and Bound Es un problema al cual se le debe aplicar el algoritmo de Branch and Bound propuesto por Ignall and Schrage. Para este problema se nos pide minimizar el Cmax o makespan. Para el desarrollo del algoritmo se realizo de forma manual aplicando los pasos que presenta el algoritmo, además es importante mencionar que para el caso cuando se presenten empates se tomara el primer trabajo con el valor mínimo de B. Notación de Graham 𝑭𝟑 | | 𝑪𝒎𝒂𝒙 Algoritmo Branch and Bound propuesto por Ignall and Schrage 𝐽𝑟:𝑆𝑒𝑐𝑢𝑒𝑛𝑐𝑖𝑎 𝑃𝑎𝑟𝑐𝑖𝑎𝑙 𝐶𝑖(𝐽𝑟): 𝑈𝑙𝑡𝑖𝑚𝑜 𝑡𝑖𝑒𝑚𝑝𝑜 𝑑𝑒 𝑓𝑖𝑛𝑎𝑙𝑖𝑧𝑎𝑐𝑖ó𝑛 𝑒𝑛 𝑙𝑎 𝑚𝑎𝑞𝑢𝑖𝑛𝑎 𝑖 𝑒𝑛𝑡𝑟𝑒 𝑙𝑜𝑠 𝑡𝑟𝑎𝑏𝑎𝑗𝑜𝑠 𝑒𝑛 𝐽𝑟 𝐶1(1) = 𝑃11 , 𝐶2(1) = 𝑃11 + 𝑃12, 𝐶3(1) = 𝑃11 + 𝑃12 + 𝑃13 𝐿𝑖𝑚𝑖𝑡𝑒𝑠: 𝑏𝑖(𝐽𝑟) = 𝐿𝑖𝑚𝑖𝑡𝑒 𝑖𝑛𝑓𝑒𝑟𝑖𝑜𝑟 𝑑𝑒 𝑙𝑎 𝑓𝑎𝑏𝑟𝑖𝑎𝑐𝑐𝑖𝑜𝑛 𝑑𝑒 𝑙𝑎 𝑚𝑎𝑞𝑢𝑖𝑛𝑎 𝑖 Actualizar Desarrollo del algoritmo Como se mencionó anteriormente el problema se solucionó de forma manual haciendo uso del programa Excel, es decir que se fueron aplicando cada uno de los pasos anteriormente mencionados hasta tener todos los trabajos secuenciados es decir en el Conjunto 𝐽𝑟. Para realizar el algoritmo se hizo uso de una tabla como la que se puede visualizar en la imagen x donde se reúnen cada uno de los datos necesarios para aplicar el algoritmo. Resultados Para la primera ramificación se obtuvieron los datos que se pueden visualizar en la tabla x, como se puede observar que el trabajo seleccionado para la primera ramificación fue el 9, aunque este trabajo se cambio ya que la segunda ramificación a partir del trabajo nueve los valores de Max (bi) fueron mayores al siguiente mínimo que se tenia en la primera ramificación que era el trabajo 12 con un Max(bi) =443 siendo este valor el makespan que se obtuvo al finalizar este algoritmo. Para visualizar en detalle el procedimiento del algoritmo y cada una de sus iteraciones se recomienda ver el anexo “Branch and Bound”. tabla x. Resultados de la primera ramificación de la aplicación del algoritmo de Ignall and Schrage. En la tabla y se pueden visualizar las ultimas tres ramificaciones que se obtuvieron al aplicar el algoritmo además se observa la secuencia final la cual nos permite obtener solución óptima al problema planteado de minimizar el Cmax. C1(Jr) C2(Jr) C3(Jr) b1(Jr) b2(Jr) b3(Jr) Max (bi) Ci(Jr) bi(Jr) Max (bi)Partial Seq Jr 1 14 26 43 378 353 456 456 0 2 14 29 41 378 353 459 459 0 3 18 35 45 378 357 465 465 0 4 19 35 43 378 358 465 465 0 5 12 18 23 378 351 448 448 0 6 13 28 47 378 352 458 458 0 7 11 21 40 378 350 451 451 0 8 14 27 48 378 353 457 457 0 9 6 11 16 379 345 441 441 1 10 7 19 30 378 346 449 449 0 11 10 23 29 378 349 453 453 0 12 4 13 26 378 343 443 443 0 13 4 17 43 378 343 447 447 0 14 13 28 37 378 352 458 458 0 15 18 34 49 378 357 464 464 0 16 21 33 58 378 360 463 463 0 17 21 26 39 378 360 456 456 0 18 15 20 36 378 354 450 450 0 19 7 23 44 378 346 453 453 0 20 8 21 35 378 347 451 451 0 21 13 18 33 378 352 448 448 0 22 7 15 41 378 346 445 445 0 23 19 32 41 378 358 462 462 0 24 11 20 29 378 350 450 450 0 25 16 24 29 378 355 454 454 0 26 6 20 41 378 345 450 450 0 27 16 27 31 378 356 457 457 0 28 9 24 43 378 348 454 454 0 29 16 23 42 378 355 453 453 0 30 6 13 31 378 345 443 443 0 Partial Seq Jr Ci(Jr) bi(Jr) Max (bi) Tabla y. Resultados de las ultimas ramificaciones de la solución del problema El ultimo Max (bi) que se obtuvo al solucionar el problema es de Cmax=443 con la secuencia que se presentaen la siguiente tabla p. Tabla p. Secuencia final del problema al lado izquierdo algoritmo de Ignall and Schrage y al lado derecho modelo de Jonhson modificado. Comparando el resultado de este algoritmo con el modelo de Jonhson modificado, se pudo establecer que los dos algoritmos o modelos nos proporcionaron la misma respuesta es decir que se tiene un Cmax=443. 12 5 9 30 1 2 7 3 17 10 18 11 21 13 4 6 8 14 15 16 19 20 22 23 24 25 26 327 346 401 383 383 443 443 12 5 9 30 1 2 7 3 17 10 18 11 21 13 4 6 8 14 15 16 19 20 22 23 24 25 27 337 348 384 394 403 443 443 12 5 9 30 1 2 7 3 17 10 18 11 21 13 4 6 8 14 15 16 19 20 22 23 24 25 28 330 347 399 383 383 443 443 12 5 9 30 1 2 7 3 17 10 18 11 21 13 4 6 8 14 15 16 19 20 22 23 24 25 29 337 344 399 372 388 443 443 12 5 9 30 1 2 7 3 17 10 18 11 21 13 4 6 8 14 15 16 19 20 22 23 24 25 26 27 343 357 405 394 398 443 443 12 5 9 30 1 2 7 3 17 10 18 11 21 13 4 6 8 14 15 16 19 20 22 23 24 25 26 28 336 361 420 383 383 443 443 12 5 9 30 1 2 7 3 17 10 18 11 21 13 4 6 8 14 15 16 19 20 22 23 24 25 26 29 343 353 420 383 383 443 443 12 5 9 30 1 2 7 3 17 10 18 11 21 13 4 6 8 14 15 16 19 20 22 23 24 25 26 27 28 352 372 424 394 398 443 443 12 5 9 30 1 2 7 3 17 10 18 11 21 13 4 6 8 14 15 16 19 20 22 23 24 25 26 27 29 359 366 424 402 400 443 443 12 5 9 30 1 2 7 3 17 10 18 11 21 13 4 6 8 14 15 16 19 20 22 23 24 25 26 27 28 29 368 379 443 368 379 443 443 Partial Seq Jr Ci(Jr) bi(Jr) Max (bi) Secuencia Trabajo 1 12 2 5 3 9 4 30 5 1 6 2 7 7 8 3 9 17 10 10 11 18 12 11 13 21 14 13 15 4 16 6 17 8 18 14 19 15 20 16 21 19 22 20 23 22 24 23 25 24 26 25 27 26 28 27 29 28 30 29 Cmax 443 Pero se puede observar que las secuencias son muy distintas es decir que el problema tiene una solución óptima de Cmax con distintas secuencias. Conclusiones El algoritmo de Ignall and Scharage nos puede garantizar una solución optima aunque comparando con el modelo de Jonhson modificado se puede establecer que el algoritmo es muy complicado de desarrollar y requerirá mayores cálculos para llegar a la solución óptima. NOTA: El desarrollo de este algoritmo se encuentra en el documento Excel anexo “TALLER2_PCP_Gr25. xls” ingresando en la pestaña “Branch and Bound_2” b) Formule y resuelva un modelo de programación lineal 𝐹3 | | 𝐶𝑚𝑎𝑥 Min 𝐶𝑚𝑎𝑥 (0) Información: Conjuntos: • Jobs: conjunto de trabajos {1, . . , 𝑛} 𝑜 {𝑗1, 𝑗2, … 𝑗𝑛} • Mach: conjunto de maquinas {1, . . , 𝑚} o {𝑚1, . . 𝑚𝑚} • Rank: conjunto de posiciones de los trabajos en la secuencia optima {1,2, . . , 𝑛} Parámetros: • 𝑝𝑗𝑖 =tiempo de procesamiento del trabajo 𝑗 ∈ 𝐽𝑜𝑏𝑠 en la maquina 𝑖 ∈ 𝑀𝑎𝑐ℎ Variables de decisión: 𝑌𝑗𝑘 = { 1 0 𝑠𝑖 𝑒𝑙 𝑡𝑟𝑎𝑏𝑎𝑗𝑜 𝑗 ∈ 𝐽𝑜𝑏𝑠 𝑠𝑒 𝑎𝑠𝑖𝑔𝑛𝑎 𝑎 𝑙𝑎 𝑝𝑜𝑠𝑖𝑐𝑖ó𝑛 𝑘 ∈ 𝑅𝑎𝑛𝑘 𝑑𝑒 𝑙𝑜 𝑐𝑜𝑛𝑡𝑟𝑎𝑟𝑖𝑜 𝑆𝑘𝑖 =tiempo de inicio del trabajo en la posición 𝑘 ∈ 𝑅𝑎𝑛𝑘 en la maquina 𝑖 ∈ 𝑀𝑎𝑐ℎ 𝐶𝑚𝑎𝑥 = 𝑚𝑎𝑘𝑒𝑠𝑝𝑎𝑛 𝑑𝑒𝑙 𝑝𝑟𝑜𝑔𝑟𝑎𝑚𝑎 Formulación: Min 𝐶𝑚𝑎𝑥 (0) s.a. ∑ 𝑌𝑗𝑘 𝑘∈𝑅𝑎𝑛𝑘 = 1 ∀𝑗 ∈ 𝐽𝑜𝑏𝑠 (1) ∑ 𝑌𝑗𝑘 𝑗∈𝐽𝑜𝑏𝑠 = 1 ∀𝑘 ∈ 𝑅𝑎𝑛𝑘 (2) 𝑆𝑘𝑖 + ∑ 𝑝𝑗𝑖𝑌𝑗𝑘 𝑗∈𝐽𝑜𝑏𝑠 ≤ 𝑆𝑘+1,𝑖 ∀𝑖 ∈ 𝑀𝑎𝑐ℎ, 𝑘 ∈ 𝑅𝑎𝑛𝑘 \𝑘 ≠ 𝑛 (3) 𝑆𝑘𝑖 + ∑ 𝑝𝑗𝑖𝑌𝑗𝑘𝑗∈𝐽𝑜𝑏𝑠 ≤ 𝑆𝑘,𝑖+1 ∀𝑘 ∈ 𝑅𝑎𝑛𝑘, 𝑖 ∈ 𝑀𝑎𝑐ℎ \𝑖 ≠ 𝑚 (4) 𝑆𝑛𝑚 + ∑ 𝑝𝑗𝑚𝑌𝑗𝑛 𝑗∈𝐽𝑜𝑏𝑠 ≤ 𝐶𝑚𝑎𝑥 (5) 𝑆𝑘𝑚 + ∑ 𝑝𝑗𝑚𝑌𝑗𝑘 𝑗∈𝐽𝑜𝑏𝑠 ≤ 𝐶𝑚𝑎𝑥 ∀𝑘 ∈ 𝑅𝑎𝑛𝑘 (5′) 𝑌𝑗𝑘 ∈ {0,1} ∀𝑗 ∈ 𝐽𝑜𝑏𝑠, 𝑘 ∈ 𝑅𝑎𝑛𝑘 (6) 𝑠𝑘𝑖 ≥ 0 ∀ 𝑘 ∈ 𝑅𝑎𝑛𝑘, 𝑖 ∈ 𝑀𝑎𝑐ℎ (7) Las restricciones (1) y (2) aseguran la factibilidad de que un trabajo se asigna únicamente a una posición. Las restricciones (3) aseguran la secuencia por cada máquina y la posición en la solución óptima. Las restricciones (4) garantizan la secuencia en el tipo Flow shop. Las restricciones (5) calculan el valor del makespan. Las restricción (5’) son una manera alternativa de presentar de forma general el makespan. Las restricciones (6) y (7) definen la naturaleza de las variables de decisión. La función objetivo (0) minimiza el Makespan (Cmax). Nombre del programa anexo en Fico Xpress: Formulación del programa: model FlowPTO2 uses "mmxprs"; !gain access to the Xpress-Optimizer solver !sample declarations section declarations Jobs: set of integer ! Conjunto de trabajos Mach: set of integer !Conjunto de maquinas Rank: set of integer !conjunto de posicion en la solucion p:array(Jobs,Mach) of real ! tiempos de procesamiento end-declarations initializations from "DATA2.txt" p end-initializations Rank:=Jobs !sample declarations section declarations Y:array(Jobs,Rank) of mpvar ! 1 si el trabajo j?Jobs se asigna en el orden k?Rank S:array(Rank,Mach) of mpvar !el tiempo de inicio del trabajo en la posicion k?Rank en la maquina i?Mach cmax:mpvar ! representa el makespan asignacion:array(Rank) of linctr end-declarations ! restricciones de asignacion (1) forall (k in Rank) sum(j in Jobs) Y(j,k)=1 ! restricciones de asignacion (2) forall(j in Jobs) sum(k in Rank) Y(j,k)=1 !Restriccion de secuencia (3) forall(i in Mach,k in Rank|k<>Jobs.size) do S(k,i)+sum(j in Jobs)p(j,i)*Y(j,k)<=S(k+1,i) end-do n:=Jobs.size ! numero de trabajos m:=Mach.size !numeor de maquinas !Restriccion de secuencia (4) forall(k in Rank,i in Mach|i<>m) S(k,i)+sum(j in Jobs)p(j,i)*Y(j,k)<=S(k,i+1) !Restriccion de finalizacion (5') S(n,m)+sum(j in Jobs)p(j,m)*Y(j,n)<=cmax forall(j in Jobs,k in Rank) Y(j,k) is_binary forall(k in Rank,i in Mach) S(k,i)>=0 minimize(cmax) writeln("Begin running model") writeln("El MAKESPAN (Cmax) es " , cmax.sol) forall(i in Mach) do writeln("el tiempo de inicio en la mach",i) forall(k in Rank) do writeln(" trabajo en la posicion ", k," es ", getsol(S(k,i)) ) end-do end-do writeln("End running model") end-model Resultado obtenido con el modelo: B) 𝐹3| |𝑤𝑗𝐶𝑗 F.O: Min Z = ∑𝑤𝑗𝐶𝑗 Minimizar el Mean Flow Time Información: • 𝐶𝑗 = 𝑝𝐽 + 𝑠𝑗 (Variable de decisión) • 𝑤𝑗: 𝑝𝑒𝑠𝑜 𝑜 𝑛𝑖𝑣𝑒𝑙 𝑑𝑒 𝑖𝑛𝑝𝑜𝑟𝑡𝑎𝑛𝑐𝑖𝑎 𝑑𝑒𝑙 𝑡𝑟𝑎𝑏𝑎𝑗𝑜 𝑗 ∈ 𝐽 (parámetro) • 𝑤𝑗 = 1 𝑛 𝑝𝑎𝑟𝑎 𝑒𝑙 𝑝𝑟𝑜𝑏𝑙𝑒𝑚𝑎 𝑎 𝑡𝑟𝑎𝑏𝑎𝑗𝑎𝑟; 𝑛 = 𝑛ú𝑚𝑒𝑟𝑜 𝑑𝑒 𝑡𝑟𝑎𝑏𝑎𝑗𝑜𝑠 Adicional a la información del ítem anterior, se tiene: Formulación: F.O: Min Z= ∑𝑤𝑗𝐶𝑗 → 𝑀𝑖𝑛 ∑ 𝑐𝑗 𝑛 (0) s.a. ∑ 𝑌𝑗𝑘 𝑘∈𝑅𝑎𝑛𝑘 = 1 ∀𝑗 ∈ 𝐽𝑜𝑏𝑠 (1) ∑ 𝑌𝑗𝑘 𝑗∈𝐽𝑜𝑏𝑠 = 1 ∀𝑘 ∈ 𝑅𝑎𝑛𝑘 (2) 𝑆𝑘𝑖 + ∑ 𝑝𝑗𝑖𝑌𝑗𝑘 𝑗∈𝐽𝑜𝑏𝑠 ≤ 𝑆𝑘+1,𝑖 ∀𝑖 ∈ 𝑀𝑎𝑐ℎ, 𝑘 ∈ 𝑅𝑎𝑛𝑘 \𝑘 ≠ 𝑛 (3) 𝑆𝑘𝑖 + ∑ 𝑝𝑗𝑖𝑌𝑗𝑘𝑗∈𝐽𝑜𝑏𝑠 ≤ 𝑆𝑘,𝑖+1 ∀𝑘 ∈ 𝑅𝑎𝑛𝑘, 𝑖 ∈ 𝑀𝑎𝑐ℎ \𝑖 ≠ 𝑚 (4) 𝑆𝑛𝑚 + ∑ 𝑝𝑗𝑚𝑌𝑗𝑛 𝑗∈𝐽𝑜𝑏𝑠 ≤ 𝐶𝑚𝑎𝑥 (5) 𝑆𝑘𝑚 + ∑ 𝑝𝑗𝑚𝑌𝑗𝑘 𝑗∈𝐽𝑜𝑏𝑠 ≤ 𝐶𝑚𝑎𝑥 ∀𝑘 ∈ 𝑅𝑎𝑛𝑘 (5′) 𝑌𝑗𝑘 ∈ {0,1} ∀𝑗 ∈ 𝐽𝑜𝑏𝑠, 𝑘 ∈ 𝑅𝑎𝑛𝑘 (6) 𝑠𝑘𝑖 ≥ 0 ∀ 𝑘 ∈ 𝑅𝑎𝑛𝑘, 𝑖 ∈ 𝑀𝑎𝑐ℎ (7) 𝐶𝑗 = 𝑝𝐽 + 𝑠𝑗 ∀ 𝑗 ∈ 𝑱 (8) Las restricciones (1) y (2) aseguran la factibilidad de que un trabajo se asigna únicamente a una posición. Las restricciones (3) aseguran la secuencia por cada maquina y la posición en la solución optima. Las restricciones (4) garantizan la secuencia en el tipo Flow shop.Las restricciones (5) calculan el valor del makespan. Las restriccion (5’) son una manera alternativa de presentar de forma general el makespan. Las restricciones (6) y (7) definen la naturaleza de las variables de decisión. La función objetivo (0) minimiza el Mean Flow Time. EJERCICIO 3 Suponga que se cuentan con 30 trabajos que se muestran en la Tabla 3. Estos trabajos deben ser secuenciados en dos máquinas y además se cuenta con una regla de asignación los cuales se muestran en la columna tres de la tabla:Tipo 1: Trabajos que se procesan sólo en M1. Tipo 2: Trabajos que se procesan sólo en M2. Tipo 12: Trabajos que se procesan primero en M1 y luego en M2. Tipo 21: Trabajos que se procesan primero en M2 y luego en M1. Tabla. . Tiempos de procesamiento y reglas de asignación para los trabajos del proyecto a) Formule y resuelva un modelo de programación lineal general que represente la situación del problema anterior, formule claramente conjuntos, parámetros, variables de decisión, función objetivo y restricciones. Considere los siguientes objetivos: • Minimizar el Makespan • Minimizar el Mean Flow Time b) Realice un diagrama de Gantt de las secuencias obtenidas y analice los resultados comparando con los resultados del Taller 1. A) J2| |Cmax Para: • Minimizar el Makespan (Cmax) 𝑀𝑖𝑛 𝑍 = 𝐶𝑚𝑎𝑥 𝐶𝑚𝑎𝑥 = max{ 𝑑𝑗 − 𝑇𝑗 − 𝐸𝑗 } a) Información Conjuntos: • 𝐽: 𝐶𝑜𝑛𝑗𝑢𝑛𝑡𝑜 𝑑𝑒 𝑡𝑟𝑎𝑏𝑎𝑗𝑜𝑠 • 𝑀: 𝐶𝑜𝑛𝑗𝑢𝑛𝑡𝑜 𝑑𝑒 𝑚á𝑞𝑢𝑖𝑛𝑎𝑠 Parámetros: 𝑂𝑗 ∶ 𝐶𝑜𝑛𝑗𝑢𝑛𝑡𝑜 𝑑𝑒 𝑜𝑝𝑒𝑟𝑎𝑐𝑖𝑜𝑛𝑒𝑠 𝑝𝑎𝑟𝑎 𝑒𝑙 𝑡𝑟𝑎𝑏𝑎𝑗𝑜 𝑗 ∈ 𝐽, 𝑦 {𝑂1 𝑗 , 𝑂2 𝑗 , … , 𝑂|𝑗| 𝑗 } 𝑒𝑠 𝑙𝑎 𝑜𝑟𝑑𝑒𝑛 𝑑𝑒 𝑝𝑟𝑜𝑐𝑒𝑠𝑎𝑚𝑖𝑒𝑛𝑡𝑜 𝑝𝑎𝑟𝑎 𝑗 ∈ 𝐽 𝑝𝑖𝑗: 𝑡𝑖𝑒𝑚𝑝𝑜 𝑑𝑒 𝑝𝑟𝑜𝑐𝑒𝑠𝑎𝑚𝑖𝑒𝑛𝑡𝑜 𝑑𝑒𝑙 𝑡𝑟𝑎𝑏𝑎𝑗𝑜 𝑗 ∈ 𝐽 𝑒𝑛 𝑙𝑎 𝑚á𝑞𝑢𝑖𝑛𝑎 𝑖 ∈ 𝑀 Variables de decisión: 𝑋𝑖𝑗: 𝑡𝑖𝑒𝑚𝑝𝑜 𝑑𝑒 𝑖𝑛𝑖𝑐𝑖𝑜 𝑑𝑒𝑙 𝑡𝑟𝑎𝑏𝑎𝑗𝑜 𝑗 ∈ 𝐽 𝑒𝑛 𝑙𝑎 𝑚á𝑞𝑢𝑖𝑛𝑎 𝑖 ∈ 𝑀 𝑌𝑣𝑞𝑖 = { 1 𝑠𝑖 𝑒𝑙 𝑡𝑟𝑎𝑏𝑎𝑗𝑜 𝑣 ∈ 𝐽 𝑝𝑟𝑒𝑐𝑒𝑑𝑒 𝑎𝑙 𝑡𝑟𝑎𝑏𝑎𝑗𝑜 𝑞 ∈ 𝐽 | 𝑣 ≠ 𝑞, 𝑒𝑛 𝑚á𝑞𝑢𝑖𝑛𝑎 𝑖 ∈ 𝑀. 0 𝑒𝑛 𝑜𝑡𝑟𝑜 𝑐𝑎𝑠𝑜 𝐶𝑚𝑎𝑥: 𝑀𝑎𝑘𝑒𝑠𝑝𝑎𝑛 𝑑𝑒 𝑙𝑎 𝑠𝑜𝑙𝑢𝑐𝑖ó𝑛 𝑑𝑒𝑙 𝑝𝑟𝑜𝑔𝑟𝑎𝑚𝑎 𝑑𝑒 𝑝𝑟𝑜𝑑𝑢𝑐𝑐𝑖ó𝑛 Formulación 𝑱𝟐| | 𝑪𝒎𝒂𝒙 𝐹. 𝑂: 𝑀𝑖𝑛 𝑍 = 𝐶𝑚𝑎𝑥 (0) s.a: 𝑿 𝒋,𝑶𝒓 𝒋 + 𝒑 𝒋,𝑶𝒓 𝒋 ≤ 𝑿 𝒋,𝑶𝒓+𝟏 𝒋 ∀ 𝒋 ∈ 𝑱, 𝒓 ∈ { 𝟏, … , |𝑶𝒋| − 𝟏} (1) 𝑿𝒗𝒊 + 𝒑𝒗𝒊 ≤ 𝑿𝒒𝒊 + 𝑴 (𝟏 − 𝒀𝒗,𝒒,𝒊) ∀ 𝒊 ∈ 𝑴, ∀ 𝒗, 𝒒 ∈ 𝑱 | 𝒒 ≠ 𝒗 (2) 𝑿𝒒𝒊 + 𝒑𝒒𝒊 ≤ 𝑿𝒗𝒊 + 𝑴 (𝒀𝒗,𝒒,𝒊) ∀ 𝒊 ∈ 𝑴, ∀𝒗, 𝒒 ∈ 𝑱 | 𝒒 ≠ 𝒗 (3) 𝑿 𝒋,𝑶|𝒋| 𝒋 + 𝒑 𝒋,𝑶|𝒋| 𝒋 ≤ 𝑪𝒎𝒂𝒙 ∀ 𝒋 ∈ 𝑱 (4) 𝑿𝒋𝒊 ≥ 𝟎 ∀ 𝒋 ∈ 𝑱, ∀ 𝒊 ∈ 𝑴 (5) 𝒀𝒗𝒒𝒊 ∈ {𝟎, 𝟏} ∀ 𝒗, 𝒒 ∈ 𝑱 |𝒒 ≠ 𝒗, ∀ 𝒊 ∈ 𝑴 (6) Nombre del programa anexo en Fico Xpress: “P3_Cmax” (por restricciones con model JobShop uses "mmxprs"; !gain access to the Xpress-Optimizer solver declarations !Parametros del modelo J:set of integer!Conjunto de trabajos M:set of string!Conjunto de maquinas p:array(J,M) of real! tiempos de procesamiento d:array(J) of real!pesos y fechas de entrega asociados a cada trabajo O:array(J) of list of string !Conjunto de rutas de procesamiento de cada trabajo j !Variables de decision x:array(J,M) of mpvar !Tiempo de inicio del trabajo J en una maquina y:array(J,J,M) of mpvar ! Representa la interferencia cmax:mpvar !Tiempo de terminacion de todos los trabajos end-declarations !DATOS p::(1..29,["M1","M2"])[0,12,14,15,0,17,19,16,12,6,13,15,0,10,14,13,0,5,7,12, 10,0,4,9,4,0,13,0,18,0,21,12,21,5,15,0,7,0,0,13,13,0,7,8,19,13,11,0,16,8,6, 14,16,11,9,0,16,7] !se tomaron los primeros 29 trabajos por limitantes del software O::(1..29)[["M2"],["M2","M1"],["M2"],["M1","M2"],["M2","M1"],["M1","M2"],["M 2"],["M2","M1"],["M2"],["M2","M1"],["M1"],["M1","M2"],["M1"],["M1"],["M1"],["M 2","M1"],["M2","M1"],["M1"],["M1"],["M2"],["M1"],["M2","M1"],["M1","M2"],["M1 "],["M2","M1"],["M2","M1"],["M2","M1"],["M1"],["M2","M1"]] !Formulaci?n forall (j in J,i in M) do create(x(j,i)) x(j,i)>=0 end-do forall(i in M,v in J,q in J|v<>q) do create(y(v,q,i)) y(v,q,i) is_binary end-do !Restricciones de secuencia forall(j in J) do iter:=0 forall(r in O(j)|r<>getlast(O(j))) do iter+=1 a:=getlast(gethead(O(j),iter)) aa:=getlast(gethead(O(j),iter+1)) x(j,a)+p(j,a)<=x(j,aa) end-do end-do !Restricciones de finalizacion forall(j in J) do r:=getlast(O(j)) x(j,r)+p(j,r)<=cmax end-do !Restricciones de interferencia MM:=300 forall(i in M,v in J,q in J|v<>q) do x(v,i)+p(v,i)<=x(q,i)+MM*(1-y(v,q,i)) x(q,i)+p(q,i)<=x(v,i)+MM*y(v,q,i) end-do !Funcion objetivo fo1:=cmax !OPTIMIZAR la funcion objetivo minimize(fo1) writeln("Cmax= ",getobjval) forall(j in J) do forall(i in O(j)) writeln ("maq ", i, " procesa el trabajo ",j," en el tiempo ", x(j,i).sol) end-do end-model Resultado obtenido con el modelo: Fig.. Resultado obtenido para la optimización del Cmax en el ejercicio 3 B) Min Z = ∑𝑤𝑗𝐶𝑗 𝐽2| |𝑤𝑗𝐶𝑗 • 𝐶𝑗 = 𝑝𝐽 + 𝑠𝑗 • 𝑤𝑗: 𝑝𝑒𝑠𝑜 𝑜 𝑛𝑖𝑣𝑒𝑙 𝑑𝑒 𝑖𝑛𝑝𝑜𝑟𝑡𝑎𝑛𝑐𝑖𝑎 𝑑𝑒𝑙 𝑡𝑟𝑎𝑏𝑎𝑗𝑜 𝑗 ∈ 𝐽 (parámetro) • 𝑤𝑗 = 1 𝑛 𝑝𝑎𝑟𝑎 𝑒𝑙 𝑝𝑟𝑜𝑏𝑙𝑒𝑚𝑎 𝑎 𝑡𝑟𝑎𝑏𝑎𝑗𝑎𝑟; 𝑛 = 𝑛ú𝑚𝑒𝑟𝑜 𝑑𝑒 𝑡𝑟𝑎𝑏𝑎𝑗𝑜𝑠 F.O: Min Z= ∑𝑤𝑗𝐶𝑗 → 𝑀𝑖𝑛 ∑ 𝑐𝑗 𝑛 (0) s.a: 𝑿 𝒋,𝑶𝒓 𝒋 + 𝒑 𝒋,𝑶𝒓 𝒋 ≤ 𝑿 𝒋,𝑶𝒓+𝟏 𝒋 ∀ 𝒋 ∈ 𝑱, 𝒓 ∈ { 𝟏, … , |𝑶𝒋| − 𝟏} (1) 𝑿𝒗𝒊 + 𝒑𝒗𝒊 ≤ 𝑿𝒒𝒊 + 𝑴 (𝟏 − 𝒀𝒗,𝒒,𝒊) ∀ 𝒊 ∈ 𝑴, ∀ 𝒗, 𝒒 ∈ 𝑱 | 𝒒 ≠ 𝒗 (2) 𝑿𝒒𝒊 + 𝒑𝒒𝒊 ≤ 𝑿𝒗𝒊 + 𝑴 (𝒀𝒗,𝒒,𝒊) ∀ 𝒊 ∈ 𝑴, ∀𝒗, 𝒒 ∈ 𝑱 | 𝒒 ≠ 𝒗 (3) 𝑿 𝒋,𝑶|𝒋| 𝒋 + 𝒑 𝒋,𝑶|𝒋| 𝒋 ≤ 𝑪𝒎𝒂𝒙 ∀ 𝒋 ∈ 𝑱 (4) 𝑿𝒋𝒊 ≥ 𝟎 ∀ 𝒋 ∈ 𝑱, ∀ 𝒊 ∈ 𝑴 (5) 𝒀𝒗𝒒𝒊 ∈ {𝟎, 𝟏} ∀ 𝒗, 𝒒 ∈ 𝑱 |𝒒 ≠ 𝒗, ∀ 𝒊 ∈ 𝑴 (6) 𝐶𝑗 = 𝑝𝐽 + 𝑠𝑗 ∀ 𝑗 ∈ 𝑱 (7) Nombre del programa anexo en Fico Xpress: “P3_MFT” Formulación del problema en FICO Xpress: Teniendo en cuenta que se utilizó el mismo modelo de base, acá se presentan algunas adaptaciones realizadas para obtener respuesta al objetivo que se solicitaba (Mean Flow Time): -Se agregó el parámetro wj relacionado directamente con el nuevo objetivo: !Para este caso wj=1/n=1/29 wj: real !pesos y fechas de entrega asociados a cada trabajo -Se define la nueva función objetivo: !Funcion objetivo fo:=sum(j in J)wj*(x(j,r)+p(j,r)) !OPTIMIZAR la funcion objetivo minimize(fo) writeln("MFT= ",getobjval) forall(j in J) do forall(i in O(j)) writeln ("maq ", i, " procesa el trabajo ",j," en el tiempo ", x(j,i).sol) end-do end-model Resultado Obtenido mediante el modelo: Fig.. Resultado obtenido para la minimización de FMT en el ejercicio 3 EJERCICIO 4: Una empresa manufacturera recibe 5 órdenes de trabajo que deben ser procesados en sus instalaciones. La secuencia de proceso se da en la tabla 4; los tiempos de elaboración estándar por producto 𝑝𝑖𝑗 se muestran en la tabla 5 en horas por trabajo. Las fechas de entrega se dan en la tabla 6, suponga que se trabajan 3 turnos por día, de lunes a domingo. Por condiciones logísticas del cliente el recibe en ciertos días a partir de hoy, y puede recibir a cierta hora del día (tercera columna de la tabla 6), por ejemplo para el trabajo 5 se debe entregar en 4 días a las 18 horas (6 pm). Determine la secuencia óptima de operaciones en la empresa bajos las siguientes situaciones: • Minimizar el Makespan • Minimizar el Mean Flow Time • Minimizar las desviaciones respectoa la fecha de entrega, suponga el costo de anticipación es de 2$/hora, y de entrega tardía de 5$/hora • Minimizar la máxima demora • Minimizar la máxima anticipación Su solución debe presentar claramente: • Formulación general de los modelos. • Diagrama de Gantt de las secuencias para cada situación. • Resumen de resultados de cada situación. • Comparación de resultados y conclusiones. Tabla.3 . Ruta de procesamiento Tabla.4 . Tiempos de procesamiento Tabla.5. Fechas de entrega Formulación general de los modelos. A) J7| |Cmax Para: • Minimizar el Makespan (Cmax) 𝑀𝑖𝑛 𝑍 = 𝐶𝑚𝑎𝑥 Información Conjuntos: • 𝐽: 𝐶𝑜𝑛𝑗𝑢𝑛𝑡𝑜 𝑑𝑒 𝑡𝑟𝑎𝑏𝑎𝑗𝑜𝑠 • 𝑀: 𝐶𝑜𝑛𝑗𝑢𝑛𝑡𝑜 𝑑𝑒 𝑚á𝑞𝑢𝑖𝑛𝑎𝑠 Parámetros: 𝑂𝑗 ∶ 𝐶𝑜𝑛𝑗𝑢𝑛𝑡𝑜 𝑑𝑒 𝑜𝑝𝑒𝑟𝑎𝑐𝑖𝑜𝑛𝑒𝑠 𝑝𝑎𝑟𝑎 𝑒𝑙 𝑡𝑟𝑎𝑏𝑎𝑗𝑜 𝑗 ∈ 𝐽, 𝑦 {𝑂1 𝑗 , 𝑂2 𝑗 , … , 𝑂|𝑗| 𝑗 } 𝑒𝑠 𝑙𝑎 𝑜𝑟𝑑𝑒𝑛 𝑑𝑒 𝑝𝑟𝑜𝑐𝑒𝑠𝑎𝑚𝑖𝑒𝑛𝑡𝑜 𝑝𝑎𝑟𝑎 𝑗 ∈ 𝐽 𝑝𝑖𝑗: 𝑡𝑖𝑒𝑚𝑝𝑜 𝑑𝑒 𝑝𝑟𝑜𝑐𝑒𝑠𝑎𝑚𝑖𝑒𝑛𝑡𝑜 𝑑𝑒𝑙 𝑡𝑟𝑎𝑏𝑎𝑗𝑜 𝑗 ∈ 𝐽 𝑒𝑛 𝑙𝑎 𝑚á𝑞𝑢𝑖𝑛𝑎 𝑖 ∈ 𝑀 𝑑𝑗: 𝑑𝑢𝑒 𝑑𝑎𝑡𝑒 𝑑𝑒𝑙 𝑡𝑟𝑎𝑏𝑎𝑗𝑜 𝑗 ∈ 𝐽𝑜𝑏𝑠 𝑠𝑗: 𝑓𝑒𝑐ℎ𝑎 𝑑𝑒 𝑖𝑛𝑖𝑐𝑖𝑜 𝑑𝑒𝑙 𝑡𝑟𝑎𝑏𝑎𝑗𝑜 𝑗 ∈ 𝐽𝑜𝑏𝑠 𝑐𝑗: 𝑓𝑒𝑐ℎ𝑎 𝑑𝑒 𝑒𝑛𝑡𝑟𝑒𝑔𝑎 𝑝𝑎𝑟𝑎 𝑒𝑙 𝑡𝑟𝑎𝑏𝑎𝑗𝑜 𝑗 ∈ 𝐽𝑜𝑏𝑠 Variables de decisión: 𝑋𝑖𝑗: 𝑡𝑖𝑒𝑚𝑝𝑜 𝑑𝑒 𝑖𝑛𝑖𝑐𝑖𝑜 𝑑𝑒𝑙 𝑡𝑟𝑎𝑏𝑎𝑗𝑜 𝑗 ∈ 𝐽 𝑒𝑛 𝑙𝑎 𝑚á𝑞𝑢𝑖𝑛𝑎 𝑖 ∈ 𝑀 𝑌𝑣𝑞𝑖 = { 1 𝑠𝑖 𝑒𝑙 𝑡𝑟𝑎𝑏𝑎𝑗𝑜 𝑣 ∈ 𝐽 𝑝𝑟𝑒𝑐𝑒𝑑𝑒 𝑎𝑙 𝑡𝑟𝑎𝑏𝑎𝑗𝑜 𝑞 ∈ 𝐽 | 𝑣 ≠ 𝑞, 𝑒𝑛 𝑚á𝑞𝑢𝑖𝑛𝑎 𝑖 ∈ 𝑀. 0 𝑒𝑛 𝑜𝑡𝑟𝑜 𝑐𝑎𝑠𝑜 𝐶𝑚𝑎𝑥: 𝑀𝑎𝑘𝑒𝑠𝑝𝑎𝑛 𝑑𝑒 𝑙𝑎 𝑠𝑜𝑙𝑢𝑐𝑖ó𝑛 𝑑𝑒𝑙 𝑝𝑟𝑜𝑔𝑟𝑎𝑚𝑎 𝑑𝑒 𝑝𝑟𝑜𝑑𝑢𝑐𝑐𝑖ó𝑛 𝑇𝑗: 𝑡𝑎𝑟𝑑𝑎𝑛𝑧𝑎 𝑑𝑒𝑙 𝑡𝑟𝑎𝑏𝑎𝑗𝑜 𝑗 ∈ 𝐽𝑜𝑏𝑠 𝐸𝑗: 𝑎𝑛𝑡𝑖𝑐𝑖𝑝𝑎𝑐𝑖ó𝑛 𝑑𝑒𝑙 𝑡𝑟𝑎𝑏𝑎𝑗𝑜 𝑗 ∈ 𝐽𝑜𝑏𝑠 𝐶𝑚𝑎𝑥 = max (𝑑𝑗 + 𝑇𝑗 − 𝐸𝑗) 𝑇𝑗 = max (𝑐𝑗 − 𝑑𝑗; 0) 𝐸𝑗 = max (𝑑𝑗 − 𝑐𝑗; 0) Formulación 𝑱𝟐| | 𝑪𝒎𝒂𝒙 𝐹. 𝑂: 𝑀𝑖𝑛 𝑍 = 𝐶𝑚𝑎𝑥 (0) s.a: 𝑿 𝒋,𝑶𝒓 𝒋 + 𝒑 𝒋,𝑶𝒓 𝒋 ≤ 𝑿 𝒋,𝑶𝒓+𝟏 𝒋 ∀ 𝒋 ∈ 𝑱, 𝒓 ∈ { 𝟏, … , |𝑶𝒋| − 𝟏} (1) 𝑿𝒗𝒊 + 𝒑𝒗𝒊 ≤ 𝑿𝒒𝒊 + 𝑴 (𝟏 − 𝒀𝒗,𝒒,𝒊) ∀ 𝒊 ∈ 𝑴, ∀ 𝒗, 𝒒 ∈ 𝑱 | 𝒒 ≠ 𝒗 (2) 𝑿𝒒𝒊 + 𝒑𝒒𝒊 ≤ 𝑿𝒗𝒊 + 𝑴 (𝒀𝒗,𝒒,𝒊) ∀ 𝒊 ∈ 𝑴, ∀𝒗, 𝒒 ∈ 𝑱 | 𝒒 ≠ 𝒗 (3) 𝑿 𝒋,𝑶|𝒋| 𝒋 + 𝒑 𝒋,𝑶|𝒋| 𝒋 ≤ 𝑪𝒎𝒂𝒙 ∀ 𝒋 ∈ 𝑱 (4) 𝑿𝒋𝒊 ≥ 𝟎 ∀ 𝒋 ∈ 𝑱, ∀ 𝒊 ∈ 𝑴 (5) 𝒀𝒗𝒒𝒊 ∈ {𝟎, 𝟏} ∀ 𝒗, 𝒒 ∈ 𝑱 |𝒒 ≠ 𝒗, ∀ 𝒊 ∈ 𝑴 (6) Nombre del programa anexo en Fico Xpress: “P4_1Cmax” Formulación del problema en FICO Xpress: model JobShop uses "mmxprs"; !gain access to the Xpress-Optimizer solver declarations !Parametros del modelo J:set of integer!Conjunto de trabajos M:set of string!Conjunto de maquinas p:array(J,M) of real! tiempos de procesamiento d:array(J) of real !pesos y fechas de entrega asociados a cada trabajo O:array(J)of list of string !Conjunto de rutas de procesamiento de cada trabajo j !Variables de decision x:array(J,M) of mpvar !Tiempo de inicio del trabajo J en una maquina I c:array(J) of mpvar !Tiempo de finalizacion de un trabajo J y:array(J,J,M) of mpvar ! Representa la interferencia wj:real cmax:mpvar !Tiempo de terminacion de todos los trabajos end-declarations !DATOS p::(1..5,["M1","M2","M3","M4","M5","M6","M7"])[12,8,0,18,7,12,12,16,11,6,0,14,9,6,3,0,12,14,8,14,14,15,1 3,0,8,9,15,16,10,15,19,6,13,0,11] !tiempos de procesamiento de cada trabajo j en la máquina i O::(1..5)[["M1","M2","M4","M5","M6","M7"],["M6","M3","M5","M7","M2","M1"],["M3","M7","M6","M1","M5","M 4"],["M5","M2","M7","M4","M1","M6"],["M7","M1","M5","M3","M4","M2"]] ¡secuencias de máquinas para cada trabajo wj:=1/5 !supuesto del problema para pesos iguales para todos los trabajos d::(1..5)[54,78,54,85,90] !Formulación forall(j in J) create(c(j)) forall (j in J,i in M) do create(x(j,i)) x(j,i)>=0 end-do forall(i in M,v in J,q in J|v<>q) do create(y(v,q,i)) y(v,q,i) is_binary end-do !Restricciones de secuencia forall(j in J) do iter:=0 forall(r in O(j)|r<>getlast(O(j))) do iter+=1 a:=getlast(gethead(O(j),iter)) aa:=getlast(gethead(O(j),iter+1)) x(j,a)+p(j,a)<=x(j,aa) end-do end-do !Restricciones de finalizacion forall(j in J) do r:=getlast(O(j)) x(j,r)+p(j,r)=c(j) c(j)<=cmax end-do !Restricciones de interferencia MM:=100 forall(i in M,v in J,q in J|v<>q) do x(v,i)+p(v,i)<=x(q,i)+MM*(1-y(v,q,i)) x(q,i)+p(q,i)<=x(v,i)+MM*y(v,q,i) end-do !Funcion objetivo fo1:=cmax fo:=sum(j in J)wj*c(j) !OPTIMIZAR la funcion objetivo minimize(fo1) writeln("MFT= ",getact(fo)) writeln("Cmax= ",cmax.sol) forall(j in J) do forall(i in O(j)) writeln ("maq ", i, " procesa el trabajo ",j," en el tiempo ", x(j,i).sol) end-do end-model Resultado Obtenido mediante el modelo: Fig.. Resultado obtenido para la optimización del Cmax en el ejercicio 4 NOTA: En los anexos se encontrará el Diagrama de Gantt para este ejercicio como: PROBLEMA 4_ITEM A (P4_1Cmax) B) 𝐽2| |𝑤𝑗𝐶𝑗 Min Z = ∑𝑤𝑗𝐶𝑗 • 𝐶𝑗 = 𝑝𝐽 + 𝑠𝑗 • 𝑤𝑗: 𝑝𝑒𝑠𝑜 𝑜 𝑛𝑖𝑣𝑒𝑙 𝑑𝑒 𝑖𝑛𝑝𝑜𝑟𝑡𝑎𝑛𝑐𝑖𝑎 𝑑𝑒𝑙 𝑡𝑟𝑎𝑏𝑎𝑗𝑜 𝑗 ∈ 𝐽 (parámetro) • 𝑤𝑗 = 1 𝑛 𝑝𝑎𝑟𝑎 𝑒𝑙 𝑝𝑟𝑜𝑏𝑙𝑒𝑚𝑎 𝑎 𝑡𝑟𝑎𝑏𝑎𝑗𝑎𝑟; 𝑛 = 𝑛ú𝑚𝑒𝑟𝑜 𝑑𝑒 𝑡𝑟𝑎𝑏𝑎𝑗𝑜𝑠 F.O: Min Z= ∑𝑤𝑗𝐶𝑗 → 𝑀𝑖𝑛 ∑ 𝑐𝑗 𝑛 (0) s.a: 𝑿 𝒋,𝑶𝒓 𝒋 + 𝒑 𝒋,𝑶𝒓 𝒋 ≤ 𝑿 𝒋,𝑶𝒓+𝟏 𝒋 ∀ 𝒋 ∈ 𝑱, 𝒓 ∈ { 𝟏, … , |𝑶𝒋| − 𝟏} (1) 𝑿𝒗𝒊 + 𝒑𝒗𝒊 ≤ 𝑿𝒒𝒊 + 𝑴 (𝟏 − 𝒀𝒗,𝒒,𝒊) ∀ 𝒊 ∈ 𝑴, ∀ 𝒗, 𝒒 ∈ 𝑱 | 𝒒 ≠ 𝒗 (2) 𝑿𝒒𝒊 + 𝒑𝒒𝒊 ≤ 𝑿𝒗𝒊 + 𝑴 (𝒀𝒗,𝒒,𝒊) ∀ 𝒊 ∈ 𝑴, ∀𝒗, 𝒒 ∈ 𝑱 | 𝒒 ≠ 𝒗 (3) 𝑿 𝒋,𝑶|𝒋| 𝒋 + 𝒑 𝒋,𝑶|𝒋| 𝒋 ≤ 𝑪𝒎𝒂𝒙 ∀ 𝒋 ∈ 𝑱 (4) 𝑿𝒋𝒊 ≥ 𝟎 ∀ 𝒋 ∈ 𝑱, ∀ 𝒊 ∈ 𝑴 (5) 𝒀𝒗𝒒𝒊 ∈ {𝟎, 𝟏} ∀ 𝒗, 𝒒 ∈ 𝑱 |𝒒 ≠ 𝒗, ∀ 𝒊 ∈ 𝑴 (6) 𝐶𝑗 = 𝑝𝐽 + 𝑠𝑗 ∀ 𝑗 ∈ 𝑱 (7) Nombre del programa anexo en Fico Xpress: “P4_2MFT” Formulación del problema en FICO Xpress: Teniendo en cuenta que se utilizó el mismo modelo de base, acá se presentan algunas adaptaciones realizadas para obtener respuesta al objetivo que se solicitaba (Mean Flow Time): -Se establece el nuevo objetivo para el programa: fo:=sum(j in J)w(j)*c(j) !OPTIMIZAR la funcion objetivo minimize(fo) writeln("MFT= ",fo.sol) writeln("Cmax= ",f.sol) forall(j in J) do forall(i in O(j)) writeln ("maq ", i, " procesa el trabajo ",j," en el tiempo ", x(j,i).sol) end-do end-model Resultado Obtenido mediante el modelo: Fig.. Resultado obtenido para la optimización del Mean Flow Time en el ejercicio 4 NOTA: En los anexos se encontrará el Diagrama de Gantt para este ejercicio como: PROBLEMA 4_ITEM B(P4_2FMT): Mean Flow Time C. 𝑊𝐸𝑗 = $2/ℎ 𝑊𝑇𝑗 = $5/ℎ 𝐹. 𝑂: 𝑀𝐼𝑁 𝑍 = 2 ∗ ∑ 𝐸𝑗 + 𝑛 𝑗∈𝑗𝑜𝑏𝑠 5 ∗ ∑ 𝑇𝑗 𝑛 𝑗∈𝑗𝑜𝑏𝑠 Nombre del programa anexo en Fico Xpress: “P4_3DESV” Formulación del problema en FICO Xpress: Teniendo en cuenta que se utilizó el mismo modelo de base, acá se presentan algunas adaptaciones realizadaspara obtener respuesta al objetivo que se solicitaba (Mean Flow Time): -Se incluyen las nuevas variables necesarias para la optimización del nuevo objetivo: E,T:array(J)of mpvar !Tardanza y anticipación del trabajo j \in J -Se inicializan las nuevas variables: forall(j in J) create(c(j)) forall(j in J) do create(E(j)) E(j)>=0 end-do forall(j in J) do create(T(j)) T(j)>=0 end-do -Se establecen restricciones para las variables incluidas en este subproblema: forall(j in J)do c(j)-d(j)<=E(j) d(j)-c(j)<=T(j) end-do -Se establece el nuevo objetivo para el programa: !Función objetivo fo:=sum(j in J)2*E(j)+sum(j in J)5*T(j) ¡OPTIMIZAR la función objetivo minimize(fo) writeln("El Cmax para el cual se minim. las desv. es= ",cmax.sol) writeln("con un costo por la desviacion de $",fo.sol) forall(j in J) do forall(i in O(j)) writeln ("maq ", i, " procesa el trabajo ",j," en el tiempo ", x(j,i).sol) end-do end-model Resultado Obtenido mediante el modelo: Fig.. Resultado obtenido para la minimización de las desviaciones con respecto a fecha de entrega en el ejercicio 4. NOTA: En los anexos se encontrará el Diagrama de Gantt para este ejercicio como: PROBLEMA 4_ITEM C(P4_P4_3DESV): Minimización de Desviaciones respecto a fecha de entrega. D. 𝐽2| |𝐿𝑚𝑎𝑥 𝐿𝑚𝑎𝑥 = max {𝐶𝑗 − 𝑑𝑗 , 0} 𝑀𝑖𝑛 𝐿𝑚𝑎𝑥 Nombre del programa anexo en Fico Xpress: “P4_4Lmax” Formulación del problema en FICO Xpress: Teniendo en cuenta que se utilizó el mismo modelo de base, acá se presentan algunas adaptaciones realizadas para obtener respuesta al objetivo que se solicitaba (Mean Flow Time): -Al modelo del item C se le incluye una nueva variable de decisión: Lmax:mpvar ! Máximo retardo/demora … -Se define el Lmax dentro del modelo: forall(j in J) do E(j)-T(j)<=Lmax end-do -Se establece el nuevo objetivo a optimizar por medio del modelo: !Funcion objetivo fo:= Lmax !OPTIMIZAR la funcion objetivo minimize(fo) writeln("El Cmax para el cual se minim Lmax es ",cmax.sol) writeln("con un Lmax de ",fo.sol) forall(j in J) do forall(i in O(j)) writeln ("maq ", i, " procesa el trabajo ",j," en el tiempo ", x(j,i).sol) end-do end-model Resultado Obtenido mediante el modelo: Fig.. Resultado obtenido para la minimización del Lmax en el ejercicio 4 NOTA: En los anexos se encontrará el Diagrama de Gantt para este ejercicio como: PROBLEMA 4_ITEM D (P4_4LMAX): Minimizar la máxima demora E. 𝐽2| |𝐸𝑚𝑎𝑥 𝑀𝑖𝑛 𝐸𝑚𝑎𝑥 𝑇𝑗 = max (𝑐𝑗 − 𝑑𝑗; 0) 𝐸𝑗 = max(𝑑𝑗 − 𝑐𝑗; 0) Nombre del programa anexo en Fico Xpress: “P4_5Emax” Formulación del problema en FICO Xpress: Teniendo en cuenta que se utilizó el mismo modelo de base, acá se presentan algunas adaptaciones realizadas para obtener respuesta al objetivo que se solicitaba (Mean Flow Time): -Al modelo anterior se la agrega una nueva variable de decisión: Emax:mpvar !maxima anticipación -Se define el Emax dentro del modelo: forall(j in J)do c(j)-d(j)<=E(j) d(j)-c(j)<=T(j) E(j)<=Emax end-do --Se establece el nuevo objetivo a optimizar por medio del modelo: !Funcion objetivo2 fo:= Emax !OPTIMIZAR la funcion objetivo minimize(fo) writeln("El Cmax para el cual se minim Lmax es ",cmax.sol) writeln("con un Emax de ",fo.sol) forall(j in J) do forall(i in O(j)) writeln ("maq ", i, " procesa el trabajo ",j," en el tiempo ", x(j,i).sol) end-do end-model Resultado Obtenido mediante el modelo: Fig.. Resultado obtenido para la minimización de Emax en el ejercicio 4 NOTA: En los anexos se encontrará el Diagrama de Gantt para este ejercicio como: PROBLEMA 4_ITEM E(P4_5Emax):Minimizar la máxima anticipación Análisis y conclusiones (problema 4) Dependerá del objetivo que se persiga al aplicar determinado modelo a un plan de producción en un sistema Job Shop, ya que es posible obtener una solución óptima para cada caso, y mientras que algunas medidas de desempeño mejoran mediante un modelo, otras también empeorarán; por ejemplo en el caso de minimizar la máxima demora, ésta efectivamente se reduce a cero, mientras que el Makespan se incrementa bastante, siendo en este caso donde tiene mayor valor comparado con los demás modelos aplicados en este problema. BIBLIOGRAFÍA Ignall, E., & Schrage, L. (1965). Application of the Branch and Bound Technique to Some Flow-Shop Scheduling Problems. Operations Research, 13(3), 400-412. Retrieved May 14, 2021, from http://www.jstor.org/stable/167804 FICO® Xpress Solver (n.d.). Xpress-Optimizer reference manual. Retrieved May 14, 2021, from https://examples.xpress.fico.com/resources/Xpress_Workbench/2.1/optimizer.pdf FICO® Xpress Solver (n.d.). FICO Xpress Optimization Examples Repository: Browser Retrieved May 14, 2021, from https://examples.xpress.fico.com/example.pl ANEXOS (modelos en el software seleccionado, salidas y toda la información de soporte que sustente el trabajo): P3_Cmax (desarrollo ítem A problema 3) P3_MFT (desarrollo ítem B problema 3) P4_1Cmax (desarrollo ítem A problema 4) P4_2MFT (desarrollo ítem B problema 4) P4_3DESV (desarrollo ítem C problema 4) P4_4Lmax (desarrollo ítem D problema 4) P4_5Emax (desarrollo ítem E problema 4) Documento Excel con Diagramas de Gantt realizados y modelación de algunos ejercicios “TALLER2_PCP_Gr25” https://examples.xpress.fico.com/example.pl
Compartir