100 likes | 303 Views
CPM with Crashing: LINGO Model (a). MODEL: ! A CPM model with crashing; SETS: TASKS / START, PROCUREMENT, SITE_PREPARATION, POUR_FOUNDATION, ERECT_STEEL, ROOF_EXT_WALL, FABRICATE_GLASS, INT_WALLS_GLASS, LANDSCAPING, ACQUIRE_FURN, INSTALL_FURN, FINISH/:
E N D
CPM with Crashing: LINGO Model (a) MODEL: ! A CPM model with crashing; SETS: TASKS / START, PROCUREMENT, SITE_PREPARATION, POUR_FOUNDATION, ERECT_STEEL, ROOF_EXT_WALL, FABRICATE_GLASS, INT_WALLS_GLASS, LANDSCAPING, ACQUIRE_FURN, INSTALL_FURN, FINISH/: TIME, ! Normal time for task; TMIN, ! Min time at max crash; CCOST, ! Crash cost/unit time; EF, ! Earliest finish; CRASH; ! Amount of crashing;
CPM with Crashing: LINGO Model (b) ! Here are the precedence relations; PRED( TASKS, TASKS)/ START, SITE_PREPARATION, START, PROCUREMENT, START, ACQUIRE_FURN, SITE_PREPARATION, POUR_FOUNDATION, PROCUREMENT, ERECT_STEEL, POUR_FOUNDATION, ERECT_STEEL, ERECT_STEEL, ROOF_EXT_WALL, ERECT_STEEL, FABRICATE_GLASS, ROOF_EXT_WALL, INT_WALLS_GLASS, FABRICATE_GLASS, INSTALL_FURN, ROOF_EXT_WALL, LANDSCAPING, INT_WALLS_GLASS, INSTALL_FURN, ACQUIRE_FURN INSTALL_FURN, LANDSCAPING, FINISH, INSTALL_FURN, FINISH /; ENDSETS
CPM with Crashing: LINGO Model (c) DATA: TIME = 0, 215, 60, 31, 15, 40, 50, 85, 55, 280, 15, 0; ! Normal times; TMIN = 0, 195, 50, 28, 12, 35, 45, 50, 40, 240, 13, 0; ! Crash times; CCOST = 0, 2, 3, 3, 4, 4, 5, 3, 2, 1, 2, 0; ! Cost ($K)/day to crash; DUEDATE = 348; ! Project due date; ENDDATA
CPM with Crashing: LINGO Model (d) ! The crashing LP model; ! Define earliest finish, each predecessor of a task constrains when the earliest time the task can be completed. The earliest the preceding task can be finished plus the time required for the task minus any time that could be reduced by crashing this task.; @FOR( PRED( I, J): EF( J) >= EF( I) + TIME( J) - CRASH( J) );
CPM with Crashing: LINGO Model (e) ! For each task, the most it can be crashed is the regular time of that task minus minimum time for that task; @FOR( TASKS( J): CRASH( J) <= TIME( J) - TMIN( J) ); ! Meet the due date; ! This assumes that there is a single last task; EF( @SIZE( TASKS)) <= DUEDATE;
CPM with Crashing: LINGO Model (f) ! Minimize the sum of crash costs; MIN = @SUM( TASKS: CCOST * CRASH); END
CPM with Crashing: LINGO Solution Optimal solution found at step: 13 Objective value: 44.00000 Variable Value Reduced Cost EF( START) 0.0000000 2.000000 EF( PROCUREMENT) 195.0000 0.0000000 EF( SITE_PREPARATION) 60.00000 0.0000000 EF( POUR_FOUNDATION) 91.00000 0.0000000 EF( ERECT_STEEL) 210.0000 0.0000000 EF( ROOF_EXT_WALL) 250.0000 0.0000000 EF( FABRICATE_GLASS) 335.0000 0.0000000 EF( INT_WALLS_GLASS) 335.0000 0.0000000 EF( LANDSCAPING) 305.0000 0.0000000 EF( ACQUIRE_FURN) 280.0000 0.0000000 EF( INSTALL_FURN) 348.0000 0.0000000 EF( FINISH) 348.0000 0.0000000
CPM with Crashing: LINGO Solution(Crash Times) Variable Value Reduced Cost CRASH( START) 0.0000000 0.0000000 CRASH( PROCUREMENT) 20.00000 0.0000000 CRASH( SITE_PREPARATION) 0.0000000 3.000000 CRASH( POUR_FOUNDATION) 0.0000000 3.000000 CRASH( ERECT_STEEL) 0.0000000 2.000000 CRASH( ROOF_EXT_WALL) 0.0000000 2.000000 CRASH( FABRICATE_GLASS) 0.0000000 5.000000 CRASH( INT_WALLS_GLASS) 0.0000000 1.000000 CRASH( LANDSCAPING) 0.0000000 2.000000 CRASH( ACQUIRE_FURN) 0.0000000 1.000000 CRASH( INSTALL_FURN) 2.000000 0.0000000 CRASH( FINISH) 0.0000000 0.0000000