The CPM Procedure

Example 3.17 INFEASDIAGNOSTIC Option and Aggregate Resource Type

(View the complete code for this example.)

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 plus 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 3.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 3.17.2 displays the RESOURCEIN= data set, RESIN17.

Output 3.17.1: Data Set WIDGR17

Use of the INFEASDIAGNOSTIC Option
Data Set WIDGR17

Obstaskdaystailheaddesengmktanprodengmoney
1Approve Plan512111200
2Drawings10231.1100
3Study Market524.11100
4Write Specs5231.1150
5Prototype15351.1300
6Mkt. Strat.1046.1.150
7Materials1057...300
8Facility1057..1500
9Init. Prod.1078...250
10Evaluate10891..150
11Test Market1569.1.200
12Changes59101.1200
13Production010111.1600
14Marketing0612.1..
15Dummy086....


Output 3.17.2: Resourcein Data Set RESIN17

Use of the INFEASDIAGNOSTIC Option
Data Set RESIN17

Obsperotypedesengmktanprodengmoney
1.restype1114
201DEC25reslevel1.1.


In the first invocation of PROC CPM, the project is scheduled subject to resource constraints on the single resource variable deseng. Output 3.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='01dec25'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 3.17.3: Resource-Constrained Schedule: Single Resource

Use of the INFEASDIAGNOSTIC Option
Resource Constrained Schedule: Single Resource

ObstailheaddaystaskdesengS_STARTS_FINISHE_STARTE_FINISHL_STARTL_FINISHR_DELAYDELAY_RSUPPL_R
1125Approve Plan101DEC2505DEC2501DEC2505DEC2501DEC2505DEC250  
22310Drawings108DEC2519DEC2508DEC2519DEC2508DEC2519DEC250  
3245Study Market.08DEC2512DEC2508DEC2512DEC2521JAN2627JAN260  
4235Write Specs122DEC2529DEC2508DEC2512DEC2515DEC2519DEC2510deseng 
53515Prototype130DEC2520JAN2622DEC2513JAN2622DEC2513JAN260  
64610Mkt. Strat..15DEC2529DEC2515DEC2529DEC2528JAN2610FEB260  
75710Materials.21JAN2603FEB2614JAN2627JAN2614JAN2627JAN260  
85710Facility.21JAN2603FEB2614JAN2627JAN2614JAN2627JAN260  
97810Init. Prod..04FEB2617FEB2628JAN2610FEB2628JAN2610FEB260  
108910Evaluate118FEB2603MAR2611FEB2624FEB2618FEB2603MAR260  
116915Test Market.18FEB2610MAR2611FEB2603MAR2611FEB2603MAR260  
129105Changes111MAR2617MAR2604MAR2610MAR2604MAR2610MAR260  
1310110Production118MAR2618MAR2611MAR2611MAR2611MAR2611MAR260  
146120Marketing.18FEB2618FEB2611FEB2611FEB2611MAR2611MAR260  
15860Dummy.18FEB2618FEB2611FEB2611FEB2611FEB2611FEB260  


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 3.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='01dec25'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 3.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, 2026, 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 3.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, 2026. The negative values for Amktan indicate the days when a market analyst is needed for the project.

Output 3.17.4: Resource-Constrained Schedule: Multiple Resources

Use of the INFEASDIAGNOSTIC Option
Resource Constrained Schedule: Multiple Resources

ObstailheaddaystaskdesengprodengmktanmoneyS_STARTS_FINISHE_STARTE_FINISHL_STARTL_FINISHR_DELAYDELAY_RSUPPL_R
1125Approve Plan11120001DEC2505DEC2501DEC2505DEC2501DEC2505DEC250 mktan
22310Drawings11.10008DEC2519DEC2508DEC2519DEC2508DEC2519DEC250  
3245Study Market.1110021JAN2627JAN2608DEC2512DEC2521JAN2627JAN2630prodengprodeng
4235Write Specs11.15022DEC2529DEC2508DEC2512DEC2515DEC2519DEC2510deseng 
53515Prototype11.30030DEC2520JAN2622DEC2513JAN2622DEC2513JAN260  
64610Mkt. Strat...115028JAN2610FEB2615DEC2529DEC2528JAN2610FEB260 mktan
75710Materials...30021JAN2603FEB2614JAN2627JAN2614JAN2627JAN260  
85710Facility.1.50021JAN2603FEB2614JAN2627JAN2614JAN2627JAN260  
97810Init. Prod....25004FEB2617FEB2628JAN2610FEB2628JAN2610FEB260  
108910Evaluate1..15018FEB2603MAR2611FEB2624FEB2618FEB2603MAR260  
116915Test Market..120018FEB2610MAR2611FEB2603MAR2611FEB2603MAR260 mktan
129105Changes11.20011MAR2617MAR2604MAR2610MAR2604MAR2610MAR260  
1310110Production11.60018MAR2618MAR2611MAR2611MAR2611MAR2611MAR260  
146120Marketing..1.18FEB2618FEB2611FEB2611FEB2611MAR2611MAR260  
15860Dummy....18FEB2618FEB2611FEB2611FEB2611FEB2611FEB260  


Output 3.17.5: Resource Usage: Multiple Resources

Use of the INFEASDIAGNOSTIC Option
Usage Profile: Multiple Resources

Obs_TIME_RdesengAdesengRprodengAprodengRmktanAmktanRmoneyAmoney
101DEC2510101-10.
202DEC2510101-1200.
303DEC2510101-1400.
404DEC2510101-1600.
505DEC2510101-1800.
608DEC251010001000.
709DEC251010001100.
810DEC251010001200.
911DEC251010001300.
1012DEC251010001400.
1115DEC251010001500.
1216DEC251010001600.
1317DEC251010001700.
1418DEC251010001800.
1519DEC251010001900.
1622DEC251010002000.
1723DEC251010002150.
1824DEC251010002300.
1926DEC251010002450.
2029DEC251010002600.
2130DEC251010002750.
2231DEC251010003050.
2302JAN261010003350.
2405JAN261010003650.
2506JAN261010003950.
2607JAN261010004250.
2708JAN261010004550.
2809JAN261010004850.
2912JAN261010005150.
3013JAN261010005450.
3114JAN261010005750.
3215JAN261010006050.
3316JAN261010006350.
3419JAN261010006650.
3520JAN261010006950.
3621JAN26012-11-17250.
3722JAN26012-11-18150.
3823JAN26012-11-19050.
3926JAN26012-11-19950.
4027JAN26012-11-110850.
4128JAN2601101-111750.
4229JAN2601101-112700.
4330JAN2601101-113650.
4402FEB2601101-114600.
4503FEB2601101-115550.
4604FEB2601011-116500.
4705FEB2601011-116900.
4806FEB2601011-117300.
4909FEB2601011-117700.
5010FEB2601011-118100.
5111FEB2601010018500.
5212FEB2601010018750.
5313FEB2601010019000.
5416FEB2601010019250.
5517FEB2601010019500.
5618FEB2610011-119750.
5719FEB2610011-120100.
5820FEB2610011-120450.
5923FEB2610011-120800.
6024FEB2610011-121150.
6125FEB2610011-121500.
6226FEB2610011-121850.
6327FEB2610011-122200.
6402MAR2610011-122550.
6503MAR2610011-122900.
6604MAR2601011-123250.
6705MAR2601011-123450.
6806MAR2601011-123650.
6909MAR2601011-123850.
7010MAR2601011-124050.
7111MAR2610100024250.
7212MAR2610100024450.
7313MAR2610100024650.
7416MAR2610100024850.
7517MAR2610100025050.
7618MAR2601010025250.


Last updated: November 10, 2025