Planning of Barus & Holley Addition IWG, AF, FG15 Install Furn. 280 Acquire Furn. REW55 Landscaping REW85 Int Walls & Gl. ES50 Fabricate Glass ES40 Roof, Ext. Wall P, PF15 Erect Steel SP31 Pour Foundation 60 Site Preparation 215 Procurement Activity Duration, Days Predecessors
Arrow Diagram (Network) SP P PF ES REW FG IWG L AF IF Nodes (I) = EventsArrows (I,J) = Activities (Tasks)
Forward Pass: Find ES(I) SP P PF ES REW FG IWG L AF IF ES(I) = Earliest Start of Activities emanating from node I
Backward Pass: Find LC(I) SP P PF ES REW FG IWG L AF IF LC(I) = Latest Completion of Activities terminating at Node I.
Determining the Critical Path An Activity (I,J) is on the Critical Path if the following three conditions are met: ES(I) = LC(I) ES(J) = LC(J) ES(J) – ES(I) = LC(J) – LC(I) = D(I,J) where D(I,J) is the duration of Activity (I,J).
Identify Critical Path SP P PF ES REW FG IWG L AF IF
Determining the Slack Times (Floats) The Slack Time, ST(I,J), of an Activity (I,J) is the difference between the maximum time available to perform the Activity (i.e. LC(J) – ES(I)) and its duration D(I,J); that is, ST(I,J) = LC(J) – ES(I) – D(I,J). For Activities on the Critical Path the Slack Time is zero.
Determine Slack Times SP(124) P P PF(124) ES REW FG(75) IWG L (45) AF(75) IF
Construct Time Chart Elapsed Time, Days Critical TasksNon-Critical Tasks
Schedule Project Elapsed Time, Days SP PF FG L AF
LINGO Model: Tasks MODEL: 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, ES, LS, SLACK; 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
LINGO Model: Data DATA: TIME = 0, 215, 60, 31, 15, 40, 50, 85, 55, 280, 15,0; ENDDATA
LINGO Model: TASKS( J)| J #GT# 1: ES( J) PRED( I, J): ES( I) + TIME( TASKS( I)| I #LT# LTASK: LS( I) PRED( I, J): LS( J) - TIME( TASKS( I): SLACK( I) = LS( I) - ES( I)); ES( 1) = 0; LTASK TASKS); LS( LTASK) = ES( LTASK); END
LINGO Solution: Input Data Feasible solution found at step: 0 Variable Value LTASK TIME( START) TIME( PROCUREMENT) TIME( SITE_PREPARATION) TIME( POUR_FOUNDATION) TIME( ERECT_STEEL) TIME( ROOF_EXT_WALL) TIME( FABRICATE_GLASS) TIME( INT_WALLS_GLASS) TIME( LANDSCAPING) TIME( ACQUIRE_FURN) TIME( INSTALL_FURN) TIME( FINISH)
LINGO Solution: Earliest Starts ES( START) ES( PROCUREMENT) ES( SITE_PREPARATION) ES( POUR_FOUNDATION) ES( ERECT_STEEL) ES( ROOF_EXT_WALL) ES( FABRICATE_GLASS) ES( INT_WALLS_GLASS) ES( LANDSCAPING) ES( ACQUIRE_FURN) ES( INSTALL_FURN) ES( FINISH)
LINGO Solution: Latest Starts LS( START) LS( PROCUREMENT) LS( SITE_PREPARATION) LS( POUR_FOUNDATION) LS( ERECT_STEEL) LS( ROOF_EXT_WALL) LS( FABRICATE_GLASS) LS( INT_WALLS_GLASS) LS( LANDSCAPING) LS( ACQUIRE_FURN) LS( INSTALL_FURN) LS( FINISH) Latest Start is defined by LS(I,J) = LC(I,J) – D(I,J).
LINGO Solution: Slack Times SLACK( START) SLACK( PROCUREMENT) SLACK( SITE_PREPARATION) SLACK( POUR_FOUNDATION) SLACK( ERECT_STEEL) SLACK( ROOF_EXT_WALL) SLACK( FABRICATE_GLASS) SLACK( INT_WALLS_GLASS) SLACK( LANDSCAPING) SLACK( ACQUIRE_FURN) SLACK( INSTALL_FURN) SLACK( FINISH)
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;
Accessing LINGO Go to:Engineering Instructional Computer Facility Prince Engineering Laboratory Balcony (Enter from Brook Street; follow corridor to third stairwell on the right, go up two flights of stairs) Logon: Name: First 6 characters of last name followed by first and second letters of first name. Password: Rightmost 6 numbers and letters of student ID number. Open Lingo:Go to the Start menu.
LINK TO Logon FAQ PRINCE LAB COMPUTING FACILITY
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 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 TASKS( J): CRASH( J) <= TIME( J) - TMIN( J) ); ! Meet the due date; ! This assumes that there is a single last task; TASKS)) <= DUEDATE;
CPM with Crashing: LINGO Model (f) ! Minimize the sum of crash costs; MIN TASKS: CCOST * CRASH); END
CPM with Crashing: LINGO Solution EF( START) EF( PROCUREMENT) EF( SITE_PREPARATION) EF( POUR_FOUNDATION) EF( ERECT_STEEL) EF( ROOF_EXT_WALL) EF( FABRICATE_GLASS) EF( INT_WALLS_GLASS) EF( LANDSCAPING) EF( ACQUIRE_FURN) EF( INSTALL_FURN) EF( FINISH) Optimal solution found at step: 13 Objective value: Variable Value Reduced Cost
CPM with Crashing: LINGO Solution (Crash Times) Variable Value Reduced Cost CRASH( START) CRASH( PROCUREMENT) CRASH( SITE_PREPARATION) CRASH( POUR_FOUNDATION) CRASH( ERECT_STEEL) CRASH( ROOF_EXT_WALL) CRASH( FABRICATE_GLASS) CRASH( INT_WALLS_GLASS) CRASH( LANDSCAPING) CRASH( ACQUIRE_FURN) CRASH( INSTALL_FURN) CRASH( FINISH)