Project Management with Crashing    Model: PERTC

In the previous example, PERT, it was assumed each task takes a fixed amount of time to complete. However, if we allocated additional resources to a task, it is reasonable to assume we could complete that task in a shorter time period. This option of speeding up a task by spending more on it is referred to as crashing. In this model, we incorporate crashing as an option. The goal is to meet the project's due date, while minimizing total crashing costs.

MODEL:

 ! A PERT/CPM model with crashing;

 !

 ! The precedence diagram is:

 !       /FCAST\---SCHED----COSTOUT\

 !      /       \                   \

 ! FIRST         \                   \

 !      \         \                   \

 !       \SURVEY-PRICE-----------FINAL;

 

SETS:

 TASK/ FIRST, FCAST, SURVEY, PRICE,

       SCHED, COSTOUT, FINAL/:

             TIME,  ! Normal time for task;

             TMIN,  ! Min time at max crash;

             CCOST, ! Crash cost/unit time;

                EF, ! Earliest finish;

             CRASH; ! Amount of crashing;

 

! Here are the precedence relations;

 PRED( TASK, TASK)/  FIRST,FCAST   FIRST,SURVEY,

  FCAST,PRICE   FCAST,SCHED   SURVEY,PRICE,

  SCHED,COSTOUT   PRICE,FINAL   COSTOUT,FINAL/;

ENDSETS

 

DATA:

 TIME = 0 14 3 3 7 4 10; ! Normal times;

 TMIN = 0  8 2 1 6 3  8; ! Crash times;

 CCOST = 0 4 1 2 4 5  3; ! Cost/unit to crash;

 DUEDATE = 31;           ! Project due date;

ENDDATA

 

! 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)

 );

 

! For each task, the most it can be crashed is the

 regular time of that task minus minimum time for

 that task;

 @FOR( TASK( J):

   CRASH( J) <= TIME( J) - TMIN( J)

 );

 

! Meet the due date;

! This assumes that there is a single last task;

 EF( @SIZE( TASK)) <= DUEDATE;

 

! Minimize the sum of crash costs;

 MIN = @SUM( TASK: CCOST * CRASH);

 

END

Model: PERTC