The CPM Procedure

Progress Updating

Once a project has been defined with all of its activities and their relationships, the durations, the resources needed, and so on, it is often useful to monitor its progress periodically. During resource-constrained scheduling, it is useful to schedule only activities that have not yet started, taking into consideration the activities that have already been completed or scheduled and the resources that have already been used by them or allotted for them. The ACTUAL statement is used in PROC CPM to convey information about the current status of a project. As information about the activities becomes available, it can be incorporated into the schedule of the project through the specification of the actual start or finish times or both, the duration that is still remaining for the activity, or the percentage of work that has been completed on an activity. The specification of the progress variables and the options in the ACTUAL statement have been described earlier in this chapter. This section describes how the options work together and how some default values are determined.

The following options are discussed in this section:

  • the TIMENOW= option

  • the AUTOUPDT and NOAUTOUPDT options

  • the TIMENOWSPLT option

  • the progress variables (A_START, A_FINISH, REMDUR, and PCTCOMP)

The TIMENOW= option is specified in the ACTUAL statement. The value of the TIMENOW= option (often referred to simply as TIMENOW) is used as a reference point to resolve the values of the remaining duration and percent completion times. All actual start and finish times specified are checked to ensure that they are less than TIMENOW. If there is some inconsistency, a warning message is printed to the log.

If the ACTUAL statement is used, at least one of the four progress variables must be specified. PROC CPM uses the nonmissing values for the progress variables in any given observation to determine the information that is to be used for the activity. It is possible that there are some inconsistencies in the specification of the values relating to the progress information. For example, an activity may have valid values for both the A_START and the A_FINISH variables and also have the value of the PCTCOMP variable less than 100. PROC CPM looks at the values in a specific order, resolving inconsistencies in a reasonable manner. Further, PROC CPM determines revised estimates of the durations of the activities on the basis of the actual information.

Suppose that for a given activity, as is the actual start, af is the actual finish, remdur is the remaining duration, pctc is the percent complete, and dur is the duration of the activity as specified by the values of the corresponding variables in the Activity data set. (If a particular variable is not specified, assume that the corresponding value is missing.)

The elapsed duration of an activity in progress is the time lapse between its actual start and TIMENOW; the revised duration of the activity is the updated duration of the activity that is used to calculate the projected finish time for activities in progress and the actual duration for activities that are completed. The revised duration is used by PROC CPM to compute the updated schedule as described later in this section. In the discussion that follows, as, af, remdur, and pctc refer to the actual start time, actual finish time, remaining duration, and percent completed, respectively, for the activity in the Activity data set, while A_START, A_FINISH, and A_DUR refer to the values calculated by PROC CPM for the corresponding new variables added to the Schedule data set.

The following is a list of some of the conventions used by PROC CPM in calculating the revised duration:

  • If both as and af are specified, the revised duration is computed as the time, excluding non-working periods, between as and af; in the Schedule data set, the variable A_DUR is also set to this value; A_START is set to as and A_FINISH to af.

  • If as is specified without af, PROC CPM uses remdur to compute the revised duration as the sum of the elapsed duration and the remaining duration.

  • If as is specified and both af and remdur are missing, the revised duration is computed on the basis of the elapsed duration and pctc.

  • If as is specified and af, remdur and pctc are not specified, the duration is not revised. If the time lapse between as and TIMENOW is greater than or equal to the duration of the activity, it is assumed to have finished at the appropriate time (as $+$ dur) and the Schedule data set has the appropriate values for A_START, A_FINISH, and A_DUR.

  • If as is missing and af is valid, PROC CPM determines as on the basis of af and the specified duration (remdur and pctc, if specified, are ignored.)

  • If as and af are both missing, the revised duration is determined on the basis of remdur and pctc. If the activity has started (if pctc > 0 or remdur < dur), as is set appropriately, and if it has also finished (which is the case if pctc = 100 or remdur = 0), af is also set.

Using the preceding rules, PROC CPM attempts to determine actual start and finish times for as many activities as possible using the information given for each activity. The next question is: What about activities that have missing values for the actual start and finish times? Suppose a given activity has a valid value for A_START and is currently in progress. It seems logical for successors of this activity to have missing values for A_START. But how about predecessors of the activity? If they have missing values for A_START and A_FINISH, does it mean that there was an error in the input of the actual dates or an error in the precedence constraints? The AUTOUPDT and NOAUTOUPDT options enable you to control the answer to this question. AUTOUPDT instructs CPM to automatically fill in appropriate A_START and A_FINISH values for all activities that precede activities which have already started. NOAUTOUPDT implies that only those activities that have explicit progress information confirming their status are assumed to be in progress or completed; all other activities are assumed to have an implicit start date that is greater than or equal to TIMENOW. In other words, NOAUTOUPDT assumes that the precedence constraints may be overridden by the actual data. The default option is AUTOUPDT.

The scheduling algorithm treats the actual start and finish times as follows:

  • If A_START is not missing, the E_START time is set equal to A_START during the forward pass, and the E_FINISH time is set equal to E_START $+$ the revised duration.

  • If A_START is missing, the E_START time is computed as before.

  • If A_FINISH or A_START is not missing, the L_FINISH time is set equal to A_FINISH during the backward pass, and the L_START time is computed on the basis of L_FINISH and the revised duration. This rule causes the late start schedule to be the same as the early start schedule for completed or in-progress activities. Thus, T_FLOAT and F_FLOAT are 0 for such activities. Use the SHOWFLOAT option if you want to allow nonzero float for in-progress or completed activities. In this case, the late start schedule is computed as before, using the precedence constraints, so that you can determine the degree of lateness for the activities that have already been completed or are in progress.

  • If E_START is less than TIMENOW for an activity (and thus it is also the same as A_START), the activity is scheduled during resource allocation even if there are not enough resources (a warning message is printed to the log if this is the case). Thus, resource-constrained scheduling is done only for the period starting from TIMENOW.

    Note: The resources required by activities that are completed or in progress are accounted for and the corresponding changes are made to the resource availability profile before starting the constrained scheduling process at TIMENOW.

  • If resource-constrained scheduling is being performed, the TIMENOWSPLT option can be used. This option affects those activities that are currently in progress that cause resource infeasibilities. The TIMENOWSPLT option causes such activities to be split at TIMENOW into segments; the first segment is assumed to be complete before TIMENOW, and the second segment is delayed until sufficient resources are available.

The Schedule data set contains the actual start times (A_START) for all activities that are in progress or completed and the actual finish times (A_FINISH) and the actual duration times (A_DUR) for all activities that are completed. Some of these values may have been derived from the percent completion or remaining duration times in the Activity data set or may have been implicitly determined through the AUTOUPDT option. Also included in the Schedule data set is a variable named STATUS describing the status of each activity. The possible values are Completed, In Progress, Infeasible, and Pending; the interpretations are self-evident.

If the ESTPCTC option is specified, the Schedule data set also contains a variable named PCT_COMP that contains the percent completion time for each activity in the project.