D1.4 - Critical path analysis
- Syllabus
- 2019
- Topic
- D1.4
- Level
- AS
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 |
|---|---|
| A | none |
| B | none |
| C | A |
| D | A,B |
| E | C,D |
One valid construction is A:1o2, B:1o3, a dummy 2o3, C:2o4, D:3o4 and E:4o5. The dummy makes D wait for both A and B, while C still depends on A only; the common event 4 makes E wait for both C and D.
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.
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:1→2 | none |
| B:1→3 | none |
| C:2→4 | A |
| D:3→4 | A,B (the dummy carries A into event 3) |
| E:4→5 | C,D |
Although A and B must occur before E, they are not immediate predecessors of E: once C and D are complete, their earlier requirements are already satisfied. Listing only C,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.
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) of duration dij | Value |
|---|---|
| earliest start | ei |
| earliest finish | ei+dij |
| latest finish | lj |
| latest start | lj−dij |
Let A:1o2 take 4, B:1o3 take 3, C:2o4 take 5 and D:3o4 take 2. The forward pass gives e1=0, e2=4, e3=3 and e4=max(4+5,3+2)=9. The backward pass gives l4=9, l2=4, l3=7 and l1=0. Thus A,C form the critical path and the minimum completion time is 9.
An activity (i,j) is critical when it uses all available time: ei+dij=lj. 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.
Total float is the amount by which an activity can be delayed without delaying the project's minimum completion time. For activity (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=6, lj=15 and the duration is 4 hours, then F=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 workers. This average-work bound may be unattainable: precedence can force several activities to overlap. To prove that at least k workers are needed, identify a time strictly inside an interval when k named activities must all be running; then construct a valid k-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.