The CPM Procedure

 

Example 4.19 Activity Splitting

This example illustrates the use of activity splitting to help reduce project duration. By default, PROC CPM assumes that an activity cannot be interrupted once it is started (except for holidays and weekends). During resource-constrained scheduling, it is possible for a noncritical activity to be scheduled first, and at a later time a critical activity may be held waiting for a resource to be freed by this less critical activity. In such situations, you way want to allow noncritical activities to be preempted by critical ones. PROC CPM enables you to specify, selectively, the activities that can be split into segments, the minimum length of each segment, and the maximum number of segments per activity.

The data set WIDGR19, displayed in Output 4.19.1, contains the widget network in AON format with two resources: prodman and hrdware. Suppose the production manager is required to oversee certain activities, as indicated by a '1' in the prodman column. hrdware denotes some piece of equipment that is required by the activity 'Drawings' (perhaps a plotter to produce the engineering drawings). The variable minseg denotes the minimum length of the split segments for each activity. Missing values for this variable are set to default values (one-fifth of the activity’s duration). The Resource data set WIDGRIN, displayed in Output 4.19.2, indicates that both resources are replenishable, there is one production manager available from December 1, and the hardware is unavailable on the 10th and 11th of December (perhaps it is scheduled for maintenance or has been reserved for some other project).

Output 4.19.1 Activity Splitting: Activity Data Set
Activity Splitting
Project Data

Obs task days succ prodman hrdware minseg
1 Approve Plan 5 Drawings 1 . .
2 Approve Plan 5 Study Market 1 . .
3 Approve Plan 5 Write Specs 1 . .
4 Drawings 10 Prototype . 1 1
5 Study Market 5 Mkt. Strat. . . .
6 Write Specs 5 Prototype . . .
7 Prototype 15 Materials 1 . .
8 Prototype 15 Facility 1 . .
9 Mkt. Strat. 10 Test Market 1 . 1
10 Mkt. Strat. 10 Marketing 1 . 1
11 Materials 10 Init. Prod. . . .
12 Facility 10 Init. Prod. . . .
13 Init. Prod. 10 Test Market 1 . .
14 Init. Prod. 10 Marketing 1 . .
15 Init. Prod. 10 Evaluate 1 . .
16 Evaluate 10 Changes 1 . .
17 Test Market 15 Changes . . .
18 Changes 5 Production . . .
19 Production 0   1 . .
20 Marketing 0   . . .

Output 4.19.2 Activity Splitting: Resource Availability Data Set
Activity Splitting
Resource Availability Data Set

Obs per otype prodman hrdware
1 . restype 1 1
2 01DEC03 reslevel 1 1
3 10DEC03 reslevel . 0
4 12DEC03 reslevel . 1

The project is first scheduled without allowing any of the activities to be split. The Schedule data set SCHED, displayed in Output 4.19.3, indicates that the project has been delayed by one week (five working days, since maximum S_FINISH = '17MAR04' while maximum E_FINISH = '10MAR04'). The activity 'Drawings' has been postponed to start after the equipment has been serviced (or used by the other project), and the activity 'Prototype' (which is actually a critical activity) cannot start on schedule because the production manager is tied up with the noncritical activity 'Mkt. Strat.'.

proc cpm date='01dec03'd
         data=widgr19 resin=widgrin
         holidata=holdata
         out=sched resout=rout
         interval=weekday collapse;
   activity task;
   duration days;
   successor succ;
   holiday hol;
   resource prodman hrdware / period=per obstype=otype
                              t_float f_float rcs avl;
   run;

Output 4.19.3 Project Schedule: Splitting Not Allowed
Activity Splitting
Project Schedule: Splitting not Allowed

Obs task succ days prodman hrdware S_START S_FINISH E_START E_FINISH L_START L_FINISH T_FLOAT F_FLOAT
1 Approve Plan Drawings 5 1 . 01DEC03 05DEC03 01DEC03 05DEC03 01DEC03 05DEC03 0 0
2 Drawings Prototype 10 . 1 12DEC03 26DEC03 08DEC03 19DEC03 08DEC03 19DEC03 0 0
3 Study Market Mkt. Strat. 5 . . 08DEC03 12DEC03 08DEC03 12DEC03 21JAN04 27JAN04 30 0
4 Write Specs Prototype 5 . . 08DEC03 12DEC03 08DEC03 12DEC03 15DEC03 19DEC03 5 5
5 Prototype Materials 15 1 . 30DEC03 20JAN04 22DEC03 13JAN04 22DEC03 13JAN04 0 0
6 Mkt. Strat. Test Market 10 1 . 15DEC03 29DEC03 15DEC03 29DEC03 28JAN04 10FEB04 30 30
7 Materials Init. Prod. 10 . . 21JAN04 03FEB04 14JAN04 27JAN04 14JAN04 27JAN04 0 0
8 Facility Init. Prod. 10 . . 21JAN04 03FEB04 14JAN04 27JAN04 14JAN04 27JAN04 0 0
9 Init. Prod. Test Market 10 1 . 04FEB04 17FEB04 28JAN04 10FEB04 28JAN04 10FEB04 0 0
10 Evaluate Changes 10 1 . 18FEB04 02MAR04 11FEB04 24FEB04 18FEB04 02MAR04 5 5
11 Test Market Changes 15 . . 18FEB04 09MAR04 11FEB04 02MAR04 11FEB04 02MAR04 0 0
12 Changes Production 5 . . 10MAR04 16MAR04 03MAR04 09MAR04 03MAR04 09MAR04 0 0
13 Production   0 1 . 17MAR04 17MAR04 10MAR04 10MAR04 10MAR04 10MAR04 0 0
14 Marketing   0 . . 18FEB04 18FEB04 11FEB04 11FEB04 10MAR04 10MAR04 20 20

In the second invocation of PROC CPM, the MINSEGMTDUR= option is used in the RESOURCE statement to identify the variable minseg to the procedure. This enables the algorithm to split the 'Drawings' activity so that some of it is done before December 10, 2003, and the rest is scheduled to start on December 12, 2003. Likewise, the production manager is allocated to the activity 'Mkt. Strat.' on December 15, 2003. On the 24th of December the activity 'Prototype' demands the production manager, and since preemption is allowed, the earlier activity 'Mkt. Strat.', which is less critical than 'Prototype', is temporarily halted and is resumed on the 16th of January after the completion of 'Prototype' on the 15th of January. The Schedule data set, displayed in Output 4.19.4, contains separate observations for each segment of the split activities as indicated by the variable SEGMT_NO. The project duration has been reduced by three working days, by allowing appropriate activities to be split.

proc cpm date='01dec03'd
         data=widgr19
         holidata=holdata resin=widgrin
         out=spltschd resout=spltrout
         interval=weekday collapse;
   activity task;
   duration days;
   successor succ;
   holiday hol;
   resource prodman hrdware / period=per obstype=otype
                              minsegmtdur=minseg
                              rcs avl;
   id task;
   run;

Output 4.19.4 Project Schedule: Splitting Allowed
Activity Splitting
Project Schedule: Splitting Allowed

Obs task succ SEGMT_NO days prodman hrdware S_START S_FINISH E_START E_FINISH L_START L_FINISH
1 Approve Plan Drawings . 5 1 . 01DEC03 05DEC03 01DEC03 05DEC03 01DEC03 05DEC03
2 Drawings Prototype . 10 . 1 08DEC03 23DEC03 08DEC03 19DEC03 08DEC03 19DEC03
3 Drawings Prototype 1 2 . 1 08DEC03 09DEC03 08DEC03 19DEC03 08DEC03 19DEC03
4 Drawings Prototype 2 8 . 1 12DEC03 23DEC03 08DEC03 19DEC03 08DEC03 19DEC03
5 Study Market Mkt. Strat. . 5 . . 08DEC03 12DEC03 08DEC03 12DEC03 21JAN04 27JAN04
6 Write Specs Prototype . 5 . . 08DEC03 12DEC03 08DEC03 12DEC03 15DEC03 19DEC03
7 Prototype Materials . 15 1 . 24DEC03 15JAN04 22DEC03 13JAN04 22DEC03 13JAN04
8 Mkt. Strat. Test Market . 10 1 . 15DEC03 20JAN04 15DEC03 29DEC03 28JAN04 10FEB04
9 Mkt. Strat. Test Market 1 7 1 . 15DEC03 23DEC03 15DEC03 29DEC03 28JAN04 10FEB04
10 Mkt. Strat. Test Market 2 3 1 . 16JAN04 20JAN04 15DEC03 29DEC03 28JAN04 10FEB04
11 Materials Init. Prod. . 10 . . 16JAN04 29JAN04 14JAN04 27JAN04 14JAN04 27JAN04
12 Facility Init. Prod. . 10 . . 16JAN04 29JAN04 14JAN04 27JAN04 14JAN04 27JAN04
13 Init. Prod. Test Market . 10 1 . 30JAN04 12FEB04 28JAN04 10FEB04 28JAN04 10FEB04
14 Evaluate Changes . 10 1 . 13FEB04 26FEB04 11FEB04 24FEB04 18FEB04 02MAR04
15 Test Market Changes . 15 . . 13FEB04 04MAR04 11FEB04 02MAR04 11FEB04 02MAR04
16 Changes Production . 5 . . 05MAR04 11MAR04 03MAR04 09MAR04 03MAR04 09MAR04
17 Production   . 0 1 . 12MAR04 12MAR04 10MAR04 10MAR04 10MAR04 10MAR04
18 Marketing   . 0 . . 13FEB04 13FEB04 11FEB04 11FEB04 10MAR04 10MAR04