The CPM Procedure

Example 4.17 INFEASDIAGNOSTIC Option and Aggregate Resource Type

The INFEASDIAGNOSTIC option instructs PROC CPM to continue scheduling even when resources are insufficient. When PROC CPM schedules subject to resource constraints, it stops the scheduling process when it cannot find sufficient resources (primary or supplementary) for an activity before the activity’s latest possible start time (L_START $+$ DELAY). In this case, you may want to determine which resources are needed to schedule all the activities and when the deficiencies occur. The INFEASDIAGNOSTIC option is equivalent to specifying infinite supplementary levels for all the resources under consideration; the DELAY= value is assumed to equal the default value of +INFINITY, unless it is specified otherwise.

The INFEASDIAGNOSTIC option is particularly useful when there are several resources involved and when project completion time is critical. You want things to be done on time, even if it means using supplementary resources or overtime resources; rather than trying to juggle activities around to try to fit available resource profiles, you want to determine the level of resources needed to accomplish tasks within a given time frame.

For the WIDGET manufacturing project, let us assume that there are four resources: a design engineer, a market analyst, a production engineer, and money. The resource requirements for the different activities are saved in a data set, WIDGR17, and displayed in Output 4.17.1. Of these resources, suppose that the design engineer is the resource that is most crucial in terms of his availability; perhaps he is an outside contractor and you do not have control over his availability. You need to determine the project schedule subject to the constraints on the resource deseng. Output 4.17.2 displays the RESOURCEIN= data set, RESIN17.

Output 4.17.1: Data Set WIDGR17

Use of the INFEASDIAGNOSTIC Option
Data Set WIDGR17

Obs task days tail head deseng mktan prodeng money
1 Approve Plan 5 1 2 1 1 1 200
2 Drawings 10 2 3 1 . 1 100
3 Study Market 5 2 4 . 1 1 100
4 Write Specs 5 2 3 1 . 1 150
5 Prototype 15 3 5 1 . 1 300
6 Mkt. Strat. 10 4 6 . 1 . 150
7 Materials 10 5 7 . . . 300
8 Facility 10 5 7 . . 1 500
9 Init. Prod. 10 7 8 . . . 250
10 Evaluate 10 8 9 1 . . 150
11 Test Market 15 6 9 . 1 . 200
12 Changes 5 9 10 1 . 1 200
13 Production 0 10 11 1 . 1 600
14 Marketing 0 6 12 . 1 . .
15 Dummy 0 8 6 . . . .



Output 4.17.2: Resourcein Data Set RESIN17

Use of the INFEASDIAGNOSTIC Option
Data Set RESIN17

Obs per otype deseng mktan prodeng money
1 . restype 1 1 1 4
2 01DEC03 reslevel 1 . 1 .



In the first invocation of PROC CPM, the project is scheduled subject to resource constraints on the single resource variable deseng. Output 4.17.3 displays the resulting Schedule data set WIDGO17S, which shows that the project is delayed by five days because of this resource. The project finish time has been delayed only by five days, even though R_DELAY='10' for activity 'Write Specs'. This is due to the fact that there was a float of five days present in this activity.

proc cpm date='01dec03'd interval=weekday
         data=widgr17 holidata=holdata resin=resin17
         out=widgo17s;
   tailnode tail;
   duration days;
   headnode head;
   holiday hol;
   resource deseng / period=per obstype=otype
                     delayanalysis;
   id task;
   run;

Output 4.17.3: Resource-Constrained Schedule: Single Resource

Use of the INFEASDIAGNOSTIC Option
Resource Constrained Schedule: Single Resource

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



Now suppose that you have one production engineer available, but you could obtain more if needed. You do not want to delay the project more than five days (the delay caused by deseng). The second invocation of PROC CPM sets a maximum delay of five days on the activities and specifies all four resources along with the INFEASDIAGNOSTIC option. The resource availability data set (printed in Output 4.17.2) has missing values for the resources mktan and money. Further, the resource money is defined to be a consumable aggregate resource (its value is '4' in the first observation). Thus, this resource is used by the CPM procedure only for aggregation purposes and is not considered as a constraining resource during the scheduling process. The INFEASDIAGNOSTIC option enables CPM to assume an infinite supplementary level for all the constraining resources, and the procedure draws upon this infinite reserve, if necessary, to schedule the project with only five days of delay. In other words, PROC CPM assumes that there is an infinite supply of supplementary levels for all the relevant resources. Thus, if at any point in the scheduling process it finds that an activity does not have enough resources and it cannot be postponed any further, it schedules the activity ignoring the insufficiency of the resources.

proc cpm date='01dec03'd interval=weekday
         data=widgr17 holidata=holdata resin=resin17
         out=widgo17m resout=widgro17;
   tailnode tail;
   duration days;
   headnode head;
   holiday hol;
   resource deseng prodeng mktan money / period=per obstype=otype
                                         delayanalysis
                                         delay=5
                                         infeasdiagnostic
                                         cumusage
                                         rcprofile avprofile;
   id task;
   run;

The Schedule data set WIDGO17M (for multiple resources) in Output 4.17.4 shows the new resource-constrained schedule. With a maximum delay of five days the procedure schedules the activity 'Study Market' on January 21, 2004, using an extra production engineer as indicated by the SUPPL_R variable. Note that the SUPPL_R variable indicates the first resource in the resource list that was used beyond its primary level. Note also that it is possible to schedule the activities with only one production engineer, but the project would be delayed by more than five days.

The Usage data set, displayed in Output 4.17.5, shows the amount of resources required on each day of the project. The data set contains usage and remaining resource information only for the resource-constrained schedule because PROC CPM was invoked with the RCPROFILE and AVPROFILE options in the RESOURCE statement. The availability profile contains only missing values for the resource money because it was used only for aggregation purposes. Further, since this resource is a consumable resource as per the RESOURCEIN= data set, and since the CUMUSAGE option is specified, the value for Rmoney in each observation indicates the cumulative amount of money that would be needed through the beginning of the date specified in that observation if the resource constrained schedule were followed.

For the other resources, the availability profile in the Usage data set contains negative values for all the resources that were insufficient on any given day. This feature is useful for diagnosing the level of insufficiency of any resource; you can determine the problem areas by examining the availability profile for the different resources. Thus, the negative values for the resource availability profile Aprodeng indicate that, in order for the project to be scheduled as desired, you need an extra production engineer between the 21st and 27th of January, 2004. The negative values for Amktan indicate the days when a market analyst is needed for the project.

Output 4.17.4: Resource-Constrained Schedule: Multiple Resources

Use of the INFEASDIAGNOSTIC Option
Resource Constrained Schedule: Multiple Resources

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



Output 4.17.5: Resource Usage: Multiple Resources

Use of the INFEASDIAGNOSTIC Option
Usage Profile: Multiple Resources

Obs _TIME_ Rdeseng Adeseng Rprodeng Aprodeng Rmktan Amktan Rmoney Amoney
1 01DEC03 1 0 1 0 1 -1 0 .
2 02DEC03 1 0 1 0 1 -1 200 .
3 03DEC03 1 0 1 0 1 -1 400 .
4 04DEC03 1 0 1 0 1 -1 600 .
5 05DEC03 1 0 1 0 1 -1 800 .
6 08DEC03 1 0 1 0 0 0 1000 .
7 09DEC03 1 0 1 0 0 0 1100 .
8 10DEC03 1 0 1 0 0 0 1200 .
9 11DEC03 1 0 1 0 0 0 1300 .
10 12DEC03 1 0 1 0 0 0 1400 .
11 15DEC03 1 0 1 0 0 0 1500 .
12 16DEC03 1 0 1 0 0 0 1600 .
13 17DEC03 1 0 1 0 0 0 1700 .
14 18DEC03 1 0 1 0 0 0 1800 .
15 19DEC03 1 0 1 0 0 0 1900 .
16 22DEC03 1 0 1 0 0 0 2000 .
17 23DEC03 1 0 1 0 0 0 2150 .
18 24DEC03 1 0 1 0 0 0 2300 .
19 26DEC03 1 0 1 0 0 0 2450 .
20 29DEC03 1 0 1 0 0 0 2600 .
21 30DEC03 1 0 1 0 0 0 2750 .
22 31DEC03 1 0 1 0 0 0 3050 .
23 02JAN04 1 0 1 0 0 0 3350 .
24 05JAN04 1 0 1 0 0 0 3650 .
25 06JAN04 1 0 1 0 0 0 3950 .
26 07JAN04 1 0 1 0 0 0 4250 .
27 08JAN04 1 0 1 0 0 0 4550 .
28 09JAN04 1 0 1 0 0 0 4850 .
29 12JAN04 1 0 1 0 0 0 5150 .
30 13JAN04 1 0 1 0 0 0 5450 .
31 14JAN04 1 0 1 0 0 0 5750 .
32 15JAN04 1 0 1 0 0 0 6050 .
33 16JAN04 1 0 1 0 0 0 6350 .
34 19JAN04 1 0 1 0 0 0 6650 .
35 20JAN04 1 0 1 0 0 0 6950 .
36 21JAN04 0 1 2 -1 1 -1 7250 .
37 22JAN04 0 1 2 -1 1 -1 8150 .
38 23JAN04 0 1 2 -1 1 -1 9050 .
39 26JAN04 0 1 2 -1 1 -1 9950 .
40 27JAN04 0 1 2 -1 1 -1 10850 .
41 28JAN04 0 1 1 0 1 -1 11750 .
42 29JAN04 0 1 1 0 1 -1 12700 .
43 30JAN04 0 1 1 0 1 -1 13650 .
44 02FEB04 0 1 1 0 1 -1 14600 .
45 03FEB04 0 1 1 0 1 -1 15550 .
46 04FEB04 0 1 0 1 1 -1 16500 .
47 05FEB04 0 1 0 1 1 -1 16900 .
48 06FEB04 0 1 0 1 1 -1 17300 .
49 09FEB04 0 1 0 1 1 -1 17700 .
50 10FEB04 0 1 0 1 1 -1 18100 .
51 11FEB04 0 1 0 1 0 0 18500 .
52 12FEB04 0 1 0 1 0 0 18750 .
53 13FEB04 0 1 0 1 0 0 19000 .
54 16FEB04 0 1 0 1 0 0 19250 .
55 17FEB04 0 1 0 1 0 0 19500 .
56 18FEB04 1 0 0 1 1 -1 19750 .
57 19FEB04 1 0 0 1 1 -1 20100 .
58 20FEB04 1 0 0 1 1 -1 20450 .
59 23FEB04 1 0 0 1 1 -1 20800 .
60 24FEB04 1 0 0 1 1 -1 21150 .
61 25FEB04 1 0 0 1 1 -1 21500 .
62 26FEB04 1 0 0 1 1 -1 21850 .
63 27FEB04 1 0 0 1 1 -1 22200 .
64 01MAR04 1 0 0 1 1 -1 22550 .
65 02MAR04 1 0 0 1 1 -1 22900 .
66 03MAR04 0 1 0 1 1 -1 23250 .
67 04MAR04 0 1 0 1 1 -1 23450 .
68 05MAR04 0 1 0 1 1 -1 23650 .
69 08MAR04 0 1 0 1 1 -1 23850 .
70 09MAR04 0 1 0 1 1 -1 24050 .
71 10MAR04 1 0 1 0 0 0 24250 .
72 11MAR04 1 0 1 0 0 0 24450 .
73 12MAR04 1 0 1 0 0 0 24650 .
74 15MAR04 1 0 1 0 0 0 24850 .
75 16MAR04 1 0 1 0 0 0 25050 .
76 17MAR04 0 1 0 1 0 0 25250 .