The CPM Procedure

Time-Constrained Scheduling

You can use the DATE= and FBDATE= options in the PROC CPM statement (or the DATE= option in conjunction with the FINISHBEFORE option) to impose start and finish dates on the project as a whole. Often, you want to impose start or finish constraints on individual activities within the project. The ALIGNDATE and ALIGNTYPE statements enable you to do so. For each activity in the project, you can specify a particular date (as the value of the ALIGNDATE variable) and whether you want the activity to start on or finish before that date (by specifying one of several alignment types as the value of the ALIGNTYPE variable). PROC CPM uses all these dates in the computation of the early and late start schedules.

The following explanation best illustrates the restrictions imposed on the start or finish times of an activity by the different types of alignment allowed. Let d denote the value of the ALIGNDATE variable for a particular activity and let dur be the activity’s duration. If minsdate and maxfdate are used to denote the earliest allowed start date and the latest allowed finish date, respectively, for the activity, then Table 4.6 illustrates the values of minsdate and maxfdate as a function of the value of the ALIGNTYPE variable.

Once the minsdate and maxfdate dates have been calculated for all of the activities in the project, the values of minsdate are used in the computation of the early start schedule and the values of maxfdate are used in the computation of the late start schedule.

Table 4.6: Determining Alignment Date Values with the ALIGNTYPE Statement

Keywords

Alignment Type

minsdate

maxfdate

SEQ

Start equal

d

d $+$ dur

SGE

Start greater than or equal

d

$+$ infinity

SLE

Start less than or equal

$-$ infinity

d $+$ dur

FEQ

Finish equal

d $-$ dur

d

FGE

Finish greater than or equal

d $-$ dur

$+$ infinity

FLE

Finish less than or equal

$-$ infinity

d

MS

Mandatory start

d

d $+$ dur

MF

Mandatory finish

d $-$ dur

d


For the first six alignment types in Table 4.6, the value of minsdate specifies a lower bound on the early start time and the value of maxfdate specifies an upper bound on the late finish time of the activity. The early start time (E_START) of an activity is computed as the maximum of its minsdate and the early finish times (E_FINISH) of all its predecessors (E_FINISH=E_START $+$ dur). If nonstandard relationships are present in the project, the predecessor’s value that is used depends on the type of the lag and the lag duration; Table 4.5 in the previous section lists the values used as a function of the lag type. If a target completion date is not specified (using the FBDATE or FINISHBEFORE options), the project completion time is determined as the maximum value of E_FINISH over all of the activities in the project. The late finish time (L_FINISH) for each of the finish activities (those with no successors) is computed as the minimum of its maxfdate and the project completion date; late start time (L_START) is computed as L_FINISH $-$ dur. The late finish time (L_FINISH) for each of the other activities in the network is computed as the minimum of its maxfdate and the times of all its successors.

It is important to remember that the precedence constraints of the network are always respected (for these first six alignment types). Thus, it is possible that an activity that has an alignment constraint of the type SEQ, constraining it to start on a particular date, say d, may not start on the specified date d due to its predecessors not being finished before d. During resource-constrained scheduling, a further slippage in the start date could occur due to insufficient resources. In other words, the precedence constraints and resource constraints have priority over the time constraints (as imposed by the ALIGNDATE and ALIGNTYPE statements) in the determination of the schedule of the activities in the network.

The last two alignment types, MS and MF, however, specify mandatory dates for the start and finish times of the activities for both the early and late start schedules. These alignment types can be used to schedule activities to start or finish on a given date disregarding precedence and resource constraints. Thus, an activity with the ALIGNTYPE variable’s value equal to MS and the ALIGNDATE variable’s value equal to d is scheduled to start on d (for the early, late, and resource-constrained schedules) irrespective of whether or not its predecessors are finished or whether or not there are enough resources.

It is possible for the L_START time of an activity to be less than its E_START time if there are constraints on the start times of certain activities in the network (or constraints on the finish times of some successor activities) that make the target completion date infeasible. In such cases, some of the activities in the network have negative values for T_FLOAT, indicating that these activities are supercritical. See Example 4.12, "Activity Time Constraints," for a demonstration of this situation.