Introducción Como es de esperarse, en toda empresa se deben realizar diversas actividades y/o proyectos que requieren ser organizados de manera tal que podamos tener la mayor información posible, de manera rápida y resumida, de como avanzarán las diversas actividades del proyecto en el tiempo. Entre los métodos que nos ayudan en la organización de proyectos encontramos el método de barras, del cual se destaca la llamada Carta Gantt, la cual nos permite organizar de manera gráfica las actividades con sus respectivos periodos de tiempo, aunque no nos permite conocer la precedencia entre las mismas. Un método más efectivo es el llamado método de “ruta crítica” (PERT/CPM), el cual además de proporcionarnos de manera gráfica la distribución, duración y precedencias de las actividades, también nos permite saber que conjunto o recorrido de actividades son las que no pueden tener retraso para cumplir con el plazo del proyecto. Una gran ventaja de este método es, también, poder resolver mediante programación lineal (con la ayuda de software) problemas de optimización dentro de la misma malla del proyecto, tales como que actividades se pueden acelerar a costo mínimo a fin de realizar el proyecto en un menor tiempo por ejemplo. En particular en este informe se realizara el método PERT/CPM para obtener la malla de un proyecto inmobiliario de cierta empresa constructora. Para esto se realizara un diagrama de nodos y arcos (malla) con la información proporcionada por la empresa, lo cual resulta ser la base para poder resolver mediante programación lineal los tiempos óptimos que deben acumularse en cada nodo a fin de cumplir con el plazo. Así también se podrá formular un modelo para acelerar ciertas actividades, según la información de costos y tiempos de aceleración asociados a cada actividad entregada por la empresa, logrando así minimizar costos y optimizar el tiempo, lo cual resulta un objetivo evidente para cualquier empresa. Para resolver los modelos de programación lineal se utilizará el software Lingo, que nos permite ingresar la función objetivo y las respectivas restricciones al problema, de manera rápida y sencilla, otorgandonos mediante una serie de iteraciones un resultado rápido y confiable. 3. Crashing A fin de optimizar el proyecto y reducir el tiempo de operación de ciertas actividades se realiza un nuevo modelo que nos indica que actividades deben ser aceleradas a costo mínimo para terminar el proyecto en un nuevo plazo de 50 días. En la siguiente tabla la empresa detalla la mínima duración que puede tener cada actividad, y su respectivo costo unitario de acelerar en 1 día cierta actividad. El modelo consiste en minimizar la función objetivo, la cual representa el costo del proyecto. Modelo: Variables. Xi: Tiempo acumulado hasta el nodo i. Yj: Cantidad de días a acelerar la actividad j. Cj: Costo unitario de reducir en un día la duración de la actividad j. Función Objetivo. 17 Mín. Z= Ci *Yi j 1 El modelo en Lingo queda de la siguiente manera: MODEL: MIN = 100*Y1+100*Y2+200*Y3+150*Y4+0*Y5+100*Y6+110*Y7+90*Y8+130*Y9+120*Y10+70 *Y11+200*Y12+190*Y13+70*Y14+100*Y15+110*Y16+90*Y17; X15-X1<=50; X2>=X1+4-Y1; X3>=X2+2-Y2; X3>=X4; X4>=X2+2-Y3; X5>=X3+5-Y4; X6>=X5+1-Y5; X7>=X5+8-Y6; X6>=X7; X8>=X6+2-Y7; X8>=X7+3-Y8; X9>=X5+2-Y10; X10>=X9; X10>=X8+4-Y9; X11>=X10+9-Y11; X12>=X11+7-Y12; X13>=X12+3-Y13; X13>=X9+9-Y14; X14>=X13+8-Y15; X14>=X4+20-Y16; X15>=X14+3-Y17; X1>=0; X2>=0; X3>=0; X4>=0; X5>=0; X6>=0; X7>=0; X8>=0; X9>=0; X10>=0; X11>=0; X12>=0; X13>=0; X14>=0; X15>=0; Y1<=2; Y2<=1; Y3<=0; Y4<=2; Y5<=1; Y6<=4; Y7<=1; Y8<=1; Y9<=1; Y10<=1; Y11<=5; Y12<=4; Y13<=2; Y14<=3; Y15<=6; Y16<=10; Y17<=1; Y1>=0; Y2>=0; Y3>=0; Y4>=0; Y5>=0; Y6>=0; Y7>=0; Y8>=0; Y9>=0; Y10>=0; Y11>=0; Y12>=0; Y13>=0; Y14>=0; Y15>=0; Y16>=0; Y17>=0; DATA: X1 = 0; ENDDATA END Los resultados que entrega son: Global optimal solution found. Objective value: Total solver iterations: Variable Y1 Y2 Y3 Y4 Y5 Y6 Y7 Y8 Y9 Y10 Y11 Y12 Y13 Y14 Y15 Y16 Y17 X15 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 440.0000 8 Value 0.000000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 1.000000 0.000000 0.000000 5.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 50.00000 0.000000 4.000000 6.000000 6.000000 11.00000 19.00000 19.00000 21.00000 25.00000 25.00000 29.00000 36.00000 39.00000 47.00000 Reduced Cost 10.00000 10.00000 200.0000 60.00000 0.000000 10.00000 110.0000 0.000000 40.00000 120.0000 0.000000 110.0000 100.0000 70.00000 10.00000 110.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 Row 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 Slack or Surplus 440.0000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 8.000000 0.000000 0.000000 0.000000 0.000000 12.00000 0.000000 0.000000 0.000000 0.000000 0.000000 5.000000 0.000000 21.00000 0.000000 0.000000 4.000000 6.000000 6.000000 11.00000 19.00000 19.00000 21.00000 25.00000 25.00000 29.00000 36.00000 39.00000 47.00000 50.00000 2.000000 1.000000 0.000000 2.000000 0.000000 4.000000 1.000000 0.000000 1.000000 1.000000 0.000000 4.000000 2.000000 3.000000 6.000000 10.00000 1.000000 0.000000 0.000000 0.000000 0.000000 1.000000 0.000000 Dual Price -1.000000 90.00000 -90.00000 -90.00000 0.000000 0.000000 -90.00000 0.000000 -90.00000 0.000000 0.000000 -90.00000 0.000000 0.000000 -90.00000 -90.00000 -90.00000 -90.00000 0.000000 -90.00000 0.000000 -90.00000 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 0.000000 0.000000 0.000000 0.000000 20.00000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 61 62 63 64 65 66 67 68 69 70 71 0.000000 1.000000 0.000000 0.000000 5.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 Análisis de resultados: Según los resultados entregados por el software, las actividades que se deben acelerar para cumplir con el nuevo plazo de 50 días, ocupando la mínima cantidad de recursos, son las actividades 8 y 11, en 1 y 5 días respectivamente, lo cual se puede apreciar en donde el resultado entrega el valor para cada variable (Variable- Value). Aunque también el programa indica que la actividad número 5 debe ser reducida en 1 día, cabe mencionar que realizar esta reducción no tiene incidencia en los resultados, ya que la duración mínima de la misma es de 0 días, con un costo de reducción unitario de $0, siendo que ésta no está en la ruta crítica, ya que posee holgura en su duración. El costo que implica la reducción de las actividades es de $440. La nueva malla del proyecto quedaría de la siguiente forma: 5 [11,12] 1 [18,19] 2 [4,6] 2 [4,6] 1 [0,4] 4 [0,4] 4 [6,1 1] 5 [6,1 1] 6[11,19] 8[11,19] 7 [19,21] 2 [19,21] 8 [19,21] 2 [19,21] 9 [21,25] 4 [21,25] 10[11,13] 2[23,25] 11[25,29] 4[25,29] 14 [13,22] 9 [30,39] 3 [4,6] 2 [4,6] 16 [6,26] 20 [27,47] En donde ahora se aprecian 4 rutas críticas: Cada número representa el número de la actividad. 1-2-4-6-8-9-11-12-13-15-17 1-3-Dummy-4-6-8-9-11-12-13-15-17 1-3-Dummy-4-6-Dummy-7-9-11-12-13-15-17 1-2-4-6-Dummy-7-9-11-12-13-15-17 12[29,36] 7[29,36] 13[36,39] 3[36,39] 15[39,47] 8[39,47] 17[47,50] 3[47,50] Ahora para comparar las rutas críticas que se pueden apreciar a través del nuevo gráfico con las rutas críticas que entrega Lingo directamente en los resultados, se debe analizar minuciosamente las columnas Row y Slack or Surplus, donde Row representa el número de la restricción que se anotó en el modelo de Lingo, de esta manera en las restricciones que se refieran a los nodos (Xi), si es que en la columna Slack or Surplus aparece un 0, quiere decir que esa restricción no presenta holgura, por lo que el nodo en cuestión sería parte de la ruta crítica. Como se puede apreciar es mucho más directo, con la información que entrega Lindo acerca de cuales actividades acelerar, modificar la malla y obtener por simple inspección la(s) nueva(s) ruta(s) crítica(s). Ahora para saber cuanto es lo mínimo que podría durar el proyecto, y su respectivo costo asociado debemos modificar los 2 modelos anteriores, restringiendo que la cantidad de días a acelerar para cada actividad ahora sea el máximo valor permitido. El programa para conocer la mínima duración queda: MODEL: MIN = X15-X1; X15-X1<=50; X2>=X1+4-Y1; X3>=X2+2-Y2; X3>=X4; X4>=X2+2-Y3; X5>=X3+5-Y4; X6>=X5+1-Y5; X7>=X5+8-Y6; X6>=X7; X8>=X6+2-Y7; X8>=X7+3-Y8; X9>=X5+2-Y10; X10>=X9; X10>=X8+4-Y9; X11>=X10+9-Y11; X12>=X11+7-Y12; X13>=X12+3-Y13; X13>=X9+9-Y14; X14>=X13+8-Y15; X14>=X4+20-Y16; X15>=X14+3-Y17; X1>=0; X2>=0; X3>=0; X4>=0; X5>=0; X6>=0; X7>=0; X8>=0; X9>=0; X10>=0; X11>=0; X12>=0; X13>=0; X14>=0; X15>=0; Y1=2; Y2=1; Y3=0; Y4=2; Y5=1; Y6=4; Y7=1; Y8=1; Y9=1; Y10=1; Y11=5; Y12=4; Y13=2; Y14=3; Y15=6; Y16=10; Y17=1; Y1>=0; Y2>=0; Y3>=0; Y4>=0; Y5>=0; Y6>=0; Y7>=0; Y8>=0; Y9>=0; Y10>=0; Y11>=0; Y12>=0; Y13>=0; Y14>=0; Y15>=0; Y16>=0; Y17>=0; DATA: X1 = 0; ENDDATA END El resultado es: Global optimal solution found. Objective value: Total solver iterations: Variable X15 X1 X2 Y1 X3 Y2 X4 Y3 X5 Y4 X6 Y5 X7 Y6 X8 Y7 Y8 X9 28.00000 0 Value 28.00000 0.000000 2.000000 2.000000 4.000000 1.000000 4.000000 0.000000 7.000000 2.000000 11.00000 1.000000 11.00000 4.000000 13.00000 1.000000 1.000000 8.000000 Reduced Cost 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 Y10 X10 Y9 X11 Y11 X12 Y12 X13 Y13 Y14 X14 Y15 Y16 Y17 1.000000 16.00000 1.000000 20.00000 5.000000 23.00000 4.000000 24.00000 2.000000 3.000000 26.00000 6.000000 10.00000 1.000000 Row 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 Slack or Surplus 28.00000 22.00000 0.000000 1.000000 0.000000 0.000000 0.000000 4.000000 0.000000 0.000000 1.000000 0.000000 0.000000 8.000000 0.000000 0.000000 0.000000 0.000000 10.00000 0.000000 12.00000 0.000000 0.000000 2.000000 4.000000 4.000000 7.000000 11.00000 11.00000 13.00000 8.000000 16.00000 20.00000 23.00000 24.00000 26.00000 28.00000 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 0.000000 Dual Price -1.000000 0.000000 -1.000000 0.000000 -1.000000 -1.000000 -1.000000 0.000000 -1.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 -1.000000 -1.000000 -1.000000 -1.000000 0.000000 -1.000000 0.000000 -1.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 1.000000 0.000000 1.000000 1.000000 0.000000 1.000000 0.000000 1.000000 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 2.000000 1.000000 0.000000 2.000000 1.000000 4.000000 1.000000 1.000000 1.000000 1.000000 5.000000 4.000000 2.000000 3.000000 6.000000 10.00000 1.000000 1.000000 0.000000 1.000000 1.000000 1.000000 0.000000 1.000000 0.000000 1.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 Para conocer el nuevo costo asociado a esta nueva duración el programa a utilizar queda de la siguiente manera: Cuyo resultado es: MODEL: MIN = 100*Y1+100*Y2+200*Y3+150*Y4+0*Y5+100*Y6+110*Y7+90*Y8+130*Y9+120*Y10+70 *Y11+200*Y12+190*Y13+70*Y14+100*Y15+110*Y16+90*Y17; X15-X1<=50; X2>=X1+4-Y1; X3>=X2+2-Y2; X3>=X4; X4>=X2+2-Y3; X5>=X3+5-Y4; X6>=X5+1-Y5; X7>=X5+8-Y6; X6>=X7; X8>=X6+2-Y7; X8>=X7+3-Y8; X9>=X5+2-Y10; X10>=X9; X10>=X8+4-Y9; X11>=X10+9-Y11; X12>=X11+7-Y12; X13>=X12+3-Y13; X13>=X9+9-Y14; X14>=X13+8-Y15; X14>=X4+20-Y16; X15>=X14+3-Y17; X1>=0; X2>=0; X3>=0; X4>=0; X5>=0; X6>=0; X7>=0; X8>=0; X9>=0; X10>=0; X11>=0; X12>=0; X13>=0; X14>=0; X15>=0; Y1=2; Y2=1; Y3=0; Y4=2; Y5=1; Y6=4; Y7=1; Y8=1; Y9=1; Y10=1; Y11=5; Y12=4; Y13=2; Y14=3; Y15=6; Y16=10; Y17=1; Y1>=0; Y2>=0; Y3>=0; Y4>=0; Y5>=0; Y6>=0; Y7>=0; Y8>=0; Y9>=0; Y10>=0; Y11>=0; Y12>=0; Y13>=0; Y14>=0; Y15>=0; Y16>=0; Y17>=0; DATA: X1 = 0; ENDDATA END Cuyo resultado es: Global optimal solution found. Objective value: Total solver iterations: Variable Y1 Y2 Y3 Y4 Y5 Y6 Y7 Y8 Y9 Y10 Y11 Y12 Y13 Y14 Y15 Y16 Y17 X15 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 Row 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 4980.000 0 Value 2.000000 1.000000 0.000000 2.000000 1.000000 4.000000 1.000000 1.000000 1.000000 1.000000 5.000000 4.000000 2.000000 3.000000 6.000000 10.00000 1.000000 50.00000 0.000000 2.000000 4.000000 4.000000 7.000000 11.00000 11.00000 35.00000 8.000000 38.00000 42.00000 45.00000 46.00000 48.00000 Slack or Surplus 4980.000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 4.000000 0.000000 0.000000 23.00000 22.00000 0.000000 30.00000 0.000000 0.000000 0.000000 0.000000 32.00000 Reduced Cost 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 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 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 0.000000 34.00000 0.000000 0.000000 2.000000 4.000000 4.000000 7.000000 11.00000 11.00000 35.00000 8.000000 38.00000 42.00000 45.00000 46.00000 48.00000 50.00000 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 2.000000 1.000000 0.000000 2.000000 1.000000 4.000000 1.000000 1.000000 1.000000 1.000000 5.000000 4.000000 2.000000 3.000000 6.000000 10.00000 1.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 -100.0000 -100.0000 -200.0000 -150.0000 0.000000 -100.0000 -110.0000 -90.00000 -130.0000 -120.0000 -70.00000 -200.0000 -190.0000 -70.00000 -100.0000 -110.0000 -90.00000 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 Como podemos apreciar para el caso en que aceleremos lo máximo el proyecto su duración sería de 28 días, con un costo asociado de $4980.