D1.4 - Critical path analysis

Syllabus
2019
Topic
D1.4
Level
AS

Learning objectives

Build an activity-on-arc network

An activity network models which project activities must finish before others can start. In the activity-on-arc convention, each labelled arrow is an activity and its duration; each vertex is an event marking the completion of all activities that enter it. Arrow direction therefore records precedence, not physical movement.

Begin with every activity that has no predecessor at a start event. Add each remaining activity only when all of its immediate predecessors have reached its start event. Merge arrows when several activities must all finish before the next one starts, and continue until all final activities reach one finish event. Number events so every arrow points from a lower to a higher event number.

A dummy is a zero-duration arrow that preserves a dependency without adding work or resources. Use one when the real arrows alone would make an activity depend on too many predecessors, or would give two activities the same start and finish events. It is part of the network logic but not a project activity.

Activity Immediate predecessors
AA none
BB none
CC AA
DD A,BA,B
EE C,DC,D

One valid construction is A:1o2A:1 o2, B:1o3B:1 o3, a dummy 2o32 o3, C:2o4C:2 o4, D:3o4D:3 o4 and E:4o5E:4 o5. The dummy makes DD wait for both AA and BB, while CC still depends on AA only; the common event 4 makes EE wait for both CC and DD.

Use only immediate predecessors from the table. Every real activity must appear exactly once, dummies have duration zero, and the completed directed network must not imply an extra dependency that the table does not contain.

Read immediate predecessors from a network

A precedence table reverses the modelling step: for each real activity in an activity-on-arc network, it lists only the activities that must finish immediately before that activity can start.

Take one activity at a time and inspect its tail event. Record the real activities whose arrows feed that event. If an incoming arrow is a dummy, do not list the dummy; trace backwards through it to the real activity or activities whose completion it carries. Activities leaving the initial event have no predecessors.

Arc in the example network Immediate predecessors recorded
A:12A:1\to2 none
B:13B:1\to3 none
C:24C:2\to4 AA
D:34D:3\to4 A,BA,B (the dummy carries AA into event 3)
E:45E:4\to5 C,DC,D

Although AA and BB must occur before EE, they are not immediate predecessors of EE: once CC and DD are complete, their earlier requirements are already satisfied. Listing only C,DC,D keeps the table equivalent to the network without redundant transitive dependencies.

Do not list events, durations or dummy labels as activities. A predecessor must feed the activity's start event directly, possibly through a chain of zero-duration dummies; an activity that merely occurs somewhere earlier in the project is not automatically an immediate predecessor.

Find event times and the critical path

The critical path is a start-to-finish path whose activities determine the minimum project duration. A delay to any activity on that path delays the project unless the plan changes. Find it by a forward pass for earliest event times and a backward pass for latest event times.

Set the start event's earliest time to 0. Moving with the arrows, an event can occur only after every incoming activity finishes, so take the maximum incoming finish time. At the finish event, set the latest time equal to its earliest time. Moving against the arrows, take the minimum latest permitted start supplied by the outgoing activities.

e_j=\max_{(i,j)}(e_i+d_{ij}),\qquad l_i=\min_{(i,j)}(l_j-d_{ij})

Time for activity (i,j)(i,j) of duration dijd_{ij} Value
earliest start eie_i
earliest finish ei+dije_i+d_{ij}
latest finish ljl_j
latest start ljdijl_j-d_{ij}

Let A:1o2A:1 o2 take 4, B:1o3B:1 o3 take 3, C:2o4C:2 o4 take 5 and D:3o4D:3 o4 take 2. The forward pass gives e1=0e_1=0, e2=4e_2=4, e3=3e_3=3 and e4=max(4+5,3+2)=9e_4=\max(4+5,3+2)=9. The backward pass gives l4=9l_4=9, l2=4l_2=4, l3=7l_3=7 and l1=0l_1=0. Thus A,CA,C form the critical path and the minimum completion time is 9.

An activity (i,j)(i,j) is critical when it uses all available time: ei+dij=lje_i+d_{ij}=l_j. Join critical activities continuously from the start event to the finish event; more than one critical path can exist.

Use a maximum in the forward pass because every predecessor must be complete, but a minimum in the backward pass because no successor may be made late. The project duration is the earliest time at the finish event, not the sum of every activity duration.

Use float, cascade charts and schedules

Total float is the amount by which an activity can be delayed without delaying the project's minimum completion time. For activity (i,j)(i,j), compare its earliest possible start with the latest start allowed by its finish event.

F(i,j)=l_j-e_i-d_{ij}

If ei=6e_i=6, lj=15l_j=15 and the duration is 4 hours, then F=1564=5F=15-6-4=5 hours. A critical activity has total float 0; a non-critical activity may be moved within its float only while all precedence constraints remain satisfied.

Representation What it must show
Gantt (cascade) chart every activity once on a time axis; its duration and, for a non-critical activity, its available total float
Scheduling diagram activities allocated to workers over time; one worker cannot perform overlapping activities, precedence is preserved, and completion stays at the minimum project time

Place critical activities first because they cannot move. Then fit non-critical activities into their allowed float, shifting them only when predecessors have finished and the assigned worker is free. A cascade chart displays flexibility; a finished scheduling diagram displays the chosen start times and worker allocation, not the unused float. When every activity requires one worker, total activity duration is the total worker-time used in the lower bound.

\text{worker lower bound}=\left\lceil\frac{\text{sum of all activity durations}}{\text{minimum project duration}}\right\rceil

For example, 68 worker-hours in a 24-hour project gives the lower bound 68/24ceil=3\lceil68/24 ceil=3 workers. This average-work bound may be unattainable: precedence can force several activities to overlap. To prove that at least kk workers are needed, identify a time strictly inside an interval when kk named activities must all be running; then construct a valid kk-worker schedule if the exact minimum is required.

Float is not extra activity duration, and a worker lower bound is not automatically a feasible schedule. Keep units consistent, round the worker bound up, show float on the cascade chart, and never move an activity beyond its dependency or latest-finish limit.