D1 4.1, 4.2 - Activity networks and precedence tables

D1 4.1, 4.2 - Activity networks and precedence tables

Build activity-on-arc networks from immediate-precedence tables and read those tables back from networks. You will use dummy activities only where needed, preserving the dependencies without accidentally creating new ones.

Activities are arrows; events are milestones

A team can begin editing after filming, while a clearance meeting must wait for both filming and a rights check. How can one network show that difference without making editing wait for the rights check too? A zero-duration dummy arrow can carry the extra dependency without representing extra work.

You already know

An arrow has a direction. A project rule such as “publish after filming and the rights check” means both tasks must have finished before publishing starts. No earlier Decision Mathematics lesson is needed here.

An activity is a task. In an activity-on-arc network, each real activity is represented by a labelled directed arc. A node represents an event, a milestone reached only when every activity entering it has finished.

The number beside an event is an identifier, not a task duration. Later we will place early and late event times in stacked boxes; here the event numbers simply let us describe the connections precisely.

Immediate precedence

An immediate predecessor of an activity is an activity whose completion is required directly before that activity can start. A precedence table lists immediate predecessors, not every earlier ancestor.

A dash means there is no predecessor. A list such as A,BA,B means both must finish; it does not mean a choice between them.

Use one start event and one finish event. Put an arrowhead on every arc, including a dummy. There must be no directed cycle: following dependencies cannot bring a task back to waiting for itself. In the standard representation, two activities must not have the same starting and finishing event pair.

Arcs can cross on paper without joining. A connection exists only at a marked event; positions and drawn lengths do not set durations.

Key idea

An event is an “all finished” junction. Merging two activities' end events makes every activity leaving that junction wait for both.

Check the meaning of a merge before drawing one.

Build the direct dependencies first

Start with the activities having no predecessors. Work through the remaining rows, choosing an event that represents exactly the required completed activities. Join the terminal branches at one finish.

The construction rules are not supplied in the formula booklet. Learn to check them by tracing dependencies, rather than memorising a particular drawing.

[DIAGRAM: asset_name: Two precedence networks without dummy activities; asset_slug: 9fm0-d1172-basic-networks; caption: An extra activity can share a start event without changing the other dependencies; description: Two labelled activity-on-arc networks are shown. The left has event arcs A from 1 to 2, B from 1 to 3, C from 2 to 3 and D from 3 to 4. The right adds E from 2 to 4. Every solid arc has an arrowhead and activity label. Events are numbered circles, with one start and one finish in each panel. B takes the lower horizontal route, clear of the diagonal A and C arcs.]
An extra activity can share a start event without changing the other dependencies

Worked example 1: a merge with no dummy

Question. Draw the network for this immediate-precedence table.

ActivityImmediately preceding activities
AA—
BB—
CCAA
DDB,CB,C

Plan. Start A,BA,B together; put CC after AA; merge B,CB,C before DD.

An arc list defining the left-hand network is

ActivityStart eventFinish event
AA1122
BB1133
CC2233
DD3344

Why this step? Event 33 waits for B,CB,C, exactly as DD's row requires. Event 22 waits only for AA, so CC can start independently of BB.

Answer. The left-hand pictured network, with no dummy activities.

Check. Reading backwards from each activity gives the four original rows. AA is an ancestor of DD, but not an additional immediate predecessor because CC is between them.

Add only one activity, EE, immediately after AA. It can share CC's start event without being made to wait for CC.

Worked example 2: an extra branch

Question. Add the row E:AE:A to the previous table and draw the new network.

Plan. Keep the four existing arcs and draw EE from the event reached after AA to the common finish.

E:2⟶4E:\quad 2\longrightarrow4

The existing arcs remain A:1→2, B:1→3, C:2→3, D:3→4A:1\to2,\ B:1\to3,\ C:2\to3,\ D:3\to4.

Why this step? Starting EE from event 33 would incorrectly make it wait for B,CB,C. Its only required predecessor is AA.

Answer. The right-hand pictured network, with no dummy.

Check. Event 44 finishes the project only after both terminal activities D,ED,E finish; it imposes no dependency between those activities.

Readiness to start and the project being finished are different milestones. Sharing a finish event does not mean two tasks have to finish at the same clock time; the event waits for the later completion.

Watch out

Wrong: turn a precedence row into a chain by placing every listed predecessor one after another. Right: listed predecessors may run in parallel; the successor simply waits for all of them.

Move the extra activity to a different place in the original four-activity project.

A dummy carries a dependency without adding work

A dummy activity is a dashed directed arc of zero duration. It uses no worker and represents no real task. Its job is to carry a precedence requirement or distinguish two activity event pairs.

Suppose CC requires AA only, while DD requires A,BA,B. Merging the ends of A,BA,B immediately would incorrectly make CC depend on BB. Keep the end of AA separate and send a dummy from it to the event where DD starts.

The dummy's zero-duration convention and construction rules are not in the formula booklet.

[DIAGRAM: asset_name: A dummy preserves a partial dependency; asset_slug: 9fm0-d1172-dependency-dummies; caption: C can follow A alone while D waits for both A and B; description: The left directed network has A from 1 to 2, B from 1 to 3, a dashed dummy from 2 to 3, C from 2 to 4 and D from 3 to 4. The right network adds E after D by using D from 3 to 4, E from 4 to 5 and C from 2 to 5, retaining the same dummy. All dummy and real arcs have arrowheads. The separated end of A is clearly visible.]
C can follow A alone while D waits for both A and B

Worked example 3: the opening dependency pattern

Question. Draw a network with the minimum number of dummies for A,BA,B initially available, CC immediately after AA, and DD immediately after both A,BA,B.

Plan. Preserve an event for AA alone, then use a dummy to create the later A,BA,B merge.

ArcStartFinish
AA1122
BB1133
Dummy2233
CC2244
DD3344

Why this step? The dummy points from the completed-AA event towards the A,BA,B merge. Reversing it would make AA's end event wait for BB, spoiling CC's independence.

Answer. The left-hand pictured network, with exactly one dummy.

Check. CC can start as soon as AA finishes, even if BB is unfinished; DD cannot. Zero dummies cannot preserve both requirements with distinct events, while the one shown is sufficient.

Add only a final task EE after DD; CC remains a terminal branch.

Worked example 4: the dependency survives an extension

Question. Extend the previous project with EE immediately after DD, using the minimum number of dummies.

Plan. Keep the dummy and split DD's end from the final project finish.

A:1→2,B:1→3,dummy:2→3,C:2→5,D:3→4,E:4→5A:1\to2,\quad B:1\to3,\quad \text{dummy}:2\to3,\quad C:2\to5,\quad D:3\to4,\quad E:4\to5

Why this step? EE must wait for DD, but DD must not wait for CC. The common finish is therefore after C,EC,E, not before EE.

Answer. The right-hand pictured network, still with just one dummy.

Check. The new row is E:DE:D; all original immediate-precedence rows remain unchanged.

Continue this lesson.

You’re previewing NovaLearn without an account. Create a free account to read the rest.

Create free account