The CPM Procedure

 
Scheduling Subject to Precedence Constraints

The basic function of the CPM procedure is to determine a schedule of the activities in a project subject to precedence constraints among them. The minimum amount of information that is required for a successful invocation of PROC CPM is the network information specified either in AON or AOA formats and the duration of each activity in the network. The INTERVAL= option specifies the units of duration, and the DATE= option specifies a start date for the project. If a start date is not specified for the project, the schedule is computed as unformatted numerical values with a project start date of 0. The DATE= option can be a SAS date, time, or datetime value (or a number) and can be used to specify a start date for the project. In addition to the start date of the project, you can specify a desired finish date for the project using the FBDATE= option.

PROC CPM computes the early start schedule as well as the late start schedule for the project. The project start date is used as the starting point for the calculation of the early start schedule, while the project completion date is used in the computation of the late start schedule. The early start time (E_START) for all start activities (those activities with no predecessors) in the project is set to be equal to the value of the DATE parameter (if the FINISHBEFORE option is not specified). The early finish time (E_FINISH) for each start activity is computed as E_START dur , where dur is the activity’s duration (as specified in the Activity data set). For each of the other activities in the network, the early start time is computed as the maximum of the early finish time of all its immediate predecessors.

The project finish time is computed as the maximum of the early finish time of all the activities in the network. The late finish time (L_FINISH) for all the finish activities (those activities with no successors) in the project is set to be equal to the project finish time. The late start time (L_START) is computed as L_FINISH dur. For each of the other activities in the network, the late finish time is computed as the minimum of the late start time of all its immediate successors. If the FIXFINISH option is specified, the late finish time for each finish activity is set to be equal to its early finish time. In other words, the finish activities are not allowed to float to the end of the project.

Once the early and late start schedules have been computed, the procedure computes the free and total float times for each activity. Free float (F_FLOAT) is defined as the maximum delay that can be allowed in an activity without delaying a successor activity. Total float (T_FLOAT) is calculated as the difference between the activity’s late finish time and early finish time; it indicates the amount of time by which an activity can be delayed without delaying the entire project. The values of both the float variables are calculated in units of the INTERVAL parameter.

An activity that has zero T_FLOAT is said to be critical. As a result of the forward and backward pass computations just described, there is at least one path in the project network that contains only critical activities. This path is called the critical path. The duration of the project is equal to the length of the critical path.

If the FBDATE= option is also specified, the project finish time is set equal to the value of the FBDATE= option. The backward pass computation is initiated by setting the late finish time for all the finish activities in the project to be equal to fbdate. If the project finish time, as computed from the forward pass calculations, is different from fbdate, the longest path in the network may no longer have 0 total float. In such a situation, the critical path is defined to be the path in the network with the least total float. Activities with negative T_FLOAT are referred to as supercritical activities.

Note: An important requirement for a project network is that it should be acyclic (cycles are not allowed). A network is said to contain a cycle (or loop) if the precedence relationships starting from an activity loops back to the same activity. The forward and backward pass computations cannot be performed for a cyclic network. If the project network has a cycle, the CPM procedure stops processing after identifying the cycle.