The CPM Procedure

 

Example 4.20 Alternate Resources

Some projects may have two or more resource types that are interchangeable; if one resource is insufficient, the other one can be used in its place. To illustrate the use of alternate resources, consider the widget manufacturing example with the data in AON format as shown in Output 4.20.1. As in Example 4.17, suppose there are two types of engineers, a design engineer and a production engineer. In addition, there is a generic pool of engineers, denoted by the variable engpool. The resource requirements for each category are specified in the data set WIDGR20.

Output 4.20.1 Alternate Resources: Activity Data Set
Scheduling with Alternate Resources
Data Set WIDGR20

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

Output 4.20.2 Alternate Resources: RESOURCEIN Data Set
Scheduling with Alternate Resources
Data Set RESIN20

Obs per otype resid deseng prodeng engpool
1 . restype   1 1 1
2 . altprty deseng . 1 2
3 . altprty prodeng . . 1
4 . suplevel   1 1 .
5 01DEC03 reslevel   1 1 4

The resource availability data set RESIN20, displayed in Output 4.20.2, identifies all three resources as replenishable resources and indicates a primary as well as a supplementary level of availability. A new variable resid in the data set is used to identify resources in observations 2 and 3 that can be substituted for deseng and prodeng, respectively. These observations have the value 'altprty' for the OBSTYPE variable and indicate a priority for the substitution. For example, observation number 2 indicates that if deseng is unavailable, the procedure can use prodeng, and if even that is insufficient, it can draw from the engineering resource pool engpool. To trigger the substitution of resources, use the RESID= option in the RESOURCE statement.

Output 4.20.3 Alternate Resources Not Used
Scheduling with Alternate Resources
Alternate Resources not used

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

First, PROC CPM is invoked without reference to the RESID variable. The procedure ignores observations 2 and 3 in the RESOURCEIN data set (a message is written to the log), and the project is scheduled using the available resources; the supplementary level is not used because the project can be scheduled using only the primary resources by delaying it a few days. The project completion time is March 24, 2004 (see the schedule displayed in Output 4.20.3). The following program shows the invocation of PROC CPM.

proc cpm date='01dec03'd
         interval=weekday collapse
         data=widgr20 resin=resin20 holidata=holdata
         out=widgo20 resout=widgro20;
   activity task;
   duration days;
   successor succ;
   holiday hol;
   resource deseng prodeng engpool / period=per
                                     obstype=otype
                                     delayanalysis
                                     rcs avl;
   run;

Next, PROC CPM is invoked with the RESID= option, and the resulting Schedule data set is displayed in Output 4.20.4. The new schedule shows that the project completion time (10MAR04) has been reduced by two weeks as a result of using alternate resources.

Output 4.20.4 Alternate Resources Used
Scheduling with Alternate Resources
Alternate Resources Reduce Project Completion Time

Obs task succ days deseng prodeng engpool Udeseng Uprodeng Uengpool S_START S_FINISH E_START E_FINISH L_START L_FINISH R_DELAY DELAY_R SUPPL_R
1 Approve Plan Drawings 5 1 1 . 1 1 . 01DEC03 05DEC03 01DEC03 05DEC03 01DEC03 05DEC03 0    
2 Drawings Prototype 10 1 1 . 1 1 . 08DEC03 19DEC03 08DEC03 19DEC03 08DEC03 19DEC03 0    
3 Study Market Mkt. Strat. 5 . 1 . . . 1 08DEC03 12DEC03 08DEC03 12DEC03 21JAN04 27JAN04 0    
4 Write Specs Prototype 5 1 1 . . . 2 08DEC03 12DEC03 08DEC03 12DEC03 15DEC03 19DEC03 0    
5 Prototype Materials 15 1 1 1 1 1 1 22DEC03 13JAN04 22DEC03 13JAN04 22DEC03 13JAN04 0    
6 Mkt. Strat. Test Market 10 . . . . . . 15DEC03 29DEC03 15DEC03 29DEC03 28JAN04 10FEB04 0    
7 Materials Init. Prod. 10 . . . . . . 14JAN04 27JAN04 14JAN04 27JAN04 14JAN04 27JAN04 0    
8 Facility Init. Prod. 10 . 1 2 . 1 2 14JAN04 27JAN04 14JAN04 27JAN04 14JAN04 27JAN04 0    
9 Init. Prod. Test Market 10 . . 2 . . 2 28JAN04 10FEB04 28JAN04 10FEB04 28JAN04 10FEB04 0    
10 Evaluate Changes 10 1 . . 1 . . 11FEB04 24FEB04 11FEB04 24FEB04 18FEB04 02MAR04 0    
11 Test Market Changes 15 . . . . . . 11FEB04 02MAR04 11FEB04 02MAR04 11FEB04 02MAR04 0    
12 Changes Production 5 1 1 . 1 1 . 03MAR04 09MAR04 03MAR04 09MAR04 03MAR04 09MAR04 0    
13 Production   0 . . . . . . 10MAR04 10MAR04 10MAR04 10MAR04 10MAR04 10MAR04 0    
14 Marketing   0 . . . . . . 11FEB04 11FEB04 11FEB04 11FEB04 10MAR04 10MAR04 0    

When resource substitution is allowed, the procedure adds a new variable prefixed by a 'U' for each resource variable; this new variable specifies the actual resources used for each activity (as opposed to the resource required). The activity 'Study Market' requires one production engineer who is tied up with the activity 'Drawings' on the 8th of December. Since resource substitution is allowed, the procedure uses an engineer from engpool as indicated by a missing value for Uprodeng and a '1' for Uengpool in the third observation. Likewise, the activity 'Write Specs' is scheduled by substituting one engineer from engpool for a design engineer and one for a production engineer to obtain Udeseng='.', Uprodeng='.', and Uengpool=2 in observation number 4. It is evident from the project finish date (S_FINISH=L_FINISH='10MAR04') that resource substitution has enabled the project to be completed without any delay. In fact, the DELAYANALYSIS variables indicate that there is no delay in any of the activities (R_DELAY=0 and DELAY_R=' ' for all activities). Note also that supplementary levels are not used (SUPPL_R=' ') for any of the resources (recall that use of supplementary levels is triggered by the specification of a finite value for DELAY).

The following program produced Output 4.20.4:

proc cpm date='01dec03'd
         interval=weekday collapse
         data=widgr20 resin=resin20 holidata=holdata
         out=widgalt resout=widralt;
   activity task;
   duration days;
   successor succ;
   holiday hol;
   resource deseng prodeng engpool / period=per
                                     obstype=otype
                                     delayanalysis
                                     resid=resid
                                     rcs avl;
   run;

The next two invocations of PROC CPM illustrate the use of both supplementary as well as alternate resources. Note from the output data set, displayed in Output 4.20.5, that once again the project is completed without any delay. Note also that the activity 'Write Specs' has used a supplementary resource whereas 'Study Market' has used an alternate resource. By default, when the DELAY= option is used, it forces the procedure to use supplementary resources before alternate resources. To invert this order so that alternate resources are used before supplementary resources, use the ALTBEFORESUP option in the RESOURCE statement, as illustrated in the second invocation of CPM in the following code. The resulting schedule is displayed in Output 4.20.6; this schedule is, in fact, the same as the schedule displayed in Output 4.20.4, obtained without the DELAY=0 and the ALTBEFORESUP options.

/* Invoke CPM with the DELAY=0 option */
proc cpm date='01dec03'd
         interval=weekday collapse
         data=widgr20 resin=resin20 holidata=holdata
         out=widgdsup resout=widrdsup;
   activity task;
   duration days;
   successor succ;
   holiday hol;
   resource deseng prodeng engpool / period=per
                                     obstype=otype
                                     delayanalysis
                                     delay=0
                                     resid=resid
                                     rcs avl;
   run;

/* Invoke CPM with the DELAY=0 and ALTBEFORESUP options */
proc cpm date='01dec03'd
         interval=weekday collapse
         data=widgr20 resin=resin20 holidata=holdata
         out=widgdsup resout=widrdsup;
   activity task;
   duration days;
   successor succ;
   holiday hol;
   resource deseng prodeng engpool / period=per
                                     obstype=otype
                                     delayanalysis
                                     delay=0
                                     resid=resid altbeforesup
                                     rcs avl;
   run;

Output 4.20.5 Supplementary Resources Used Before Alternate Resources
Scheduling with Alternate Resources
DELAY=0, Supplementary Resources Used instead of Alternate

Obs task succ days deseng prodeng engpool Udeseng Uprodeng Uengpool S_START S_FINISH E_START E_FINISH L_START L_FINISH R_DELAY DELAY_R SUPPL_R
1 Approve Plan Drawings 5 1 1 . 1 1 . 01DEC03 05DEC03 01DEC03 05DEC03 01DEC03 05DEC03 0    
2 Drawings Prototype 10 1 1 . 1 1 . 08DEC03 19DEC03 08DEC03 19DEC03 08DEC03 19DEC03 0    
3 Study Market Mkt. Strat. 5 . 1 . . . 1 08DEC03 12DEC03 08DEC03 12DEC03 21JAN04 27JAN04 0    
4 Write Specs Prototype 5 1 1 . . . 2 08DEC03 12DEC03 08DEC03 12DEC03 15DEC03 19DEC03 0    
5 Prototype Materials 15 1 1 1 1 1 1 22DEC03 13JAN04 22DEC03 13JAN04 22DEC03 13JAN04 0    
6 Mkt. Strat. Test Market 10 . . . . . . 15DEC03 29DEC03 15DEC03 29DEC03 28JAN04 10FEB04 0    
7 Materials Init. Prod. 10 . . . . . . 14JAN04 27JAN04 14JAN04 27JAN04 14JAN04 27JAN04 0    
8 Facility Init. Prod. 10 . 1 2 . 1 2 14JAN04 27JAN04 14JAN04 27JAN04 14JAN04 27JAN04 0    
9 Init. Prod. Test Market 10 . . 2 . . 2 28JAN04 10FEB04 28JAN04 10FEB04 28JAN04 10FEB04 0    
10 Evaluate Changes 10 1 . . 1 . . 11FEB04 24FEB04 11FEB04 24FEB04 18FEB04 02MAR04 0    
11 Test Market Changes 15 . . . . . . 11FEB04 02MAR04 11FEB04 02MAR04 11FEB04 02MAR04 0    
12 Changes Production 5 1 1 . 1 1 . 03MAR04 09MAR04 03MAR04 09MAR04 03MAR04 09MAR04 0    
13 Production   0 . . . . . . 10MAR04 10MAR04 10MAR04 10MAR04 10MAR04 10MAR04 0    
14 Marketing   0 . . . . . . 11FEB04 11FEB04 11FEB04 11FEB04 10MAR04 10MAR04 0    

Output 4.20.6 Alternate Resources Used Before Supplementary Resources
Scheduling with Alternate Resources
DELAY=0, Alternate Resources Used instead of Supplementary

Obs task succ days deseng prodeng engpool Udeseng Uprodeng Uengpool S_START S_FINISH E_START E_FINISH L_START L_FINISH R_DELAY DELAY_R SUPPL_R
1 Approve Plan Drawings 5 1 1 . 1 1 . 01DEC03 05DEC03 01DEC03 05DEC03 01DEC03 05DEC03 0    
2 Drawings Prototype 10 1 1 . 1 1 . 08DEC03 19DEC03 08DEC03 19DEC03 08DEC03 19DEC03 0    
3 Study Market Mkt. Strat. 5 . 1 . . . 1 08DEC03 12DEC03 08DEC03 12DEC03 21JAN04 27JAN04 0    
4 Write Specs Prototype 5 1 1 . . . 2 08DEC03 12DEC03 08DEC03 12DEC03 15DEC03 19DEC03 0    
5 Prototype Materials 15 1 1 1 1 1 1 22DEC03 13JAN04 22DEC03 13JAN04 22DEC03 13JAN04 0    
6 Mkt. Strat. Test Market 10 . . . . . . 15DEC03 29DEC03 15DEC03 29DEC03 28JAN04 10FEB04 0    
7 Materials Init. Prod. 10 . . . . . . 14JAN04 27JAN04 14JAN04 27JAN04 14JAN04 27JAN04 0    
8 Facility Init. Prod. 10 . 1 2 . 1 2 14JAN04 27JAN04 14JAN04 27JAN04 14JAN04 27JAN04 0    
9 Init. Prod. Test Market 10 . . 2 . . 2 28JAN04 10FEB04 28JAN04 10FEB04 28JAN04 10FEB04 0    
10 Evaluate Changes 10 1 . . 1 . . 11FEB04 24FEB04 11FEB04 24FEB04 18FEB04 02MAR04 0    
11 Test Market Changes 15 . . . . . . 11FEB04 02MAR04 11FEB04 02MAR04 11FEB04 02MAR04 0    
12 Changes Production 5 1 1 . 1 1 . 03MAR04 09MAR04 03MAR04 09MAR04 03MAR04 09MAR04 0    
13 Production   0 . . . . . . 10MAR04 10MAR04 10MAR04 10MAR04 10MAR04 10MAR04 0    
14 Marketing   0 . . . . . . 11FEB04 11FEB04 11FEB04 11FEB04 10MAR04 10MAR04 0