Académique Documents
Professionnel Documents
Culture Documents
Professor Eckstein
jeckstei@rci.rutgers.edu
Diagramming a Project
Refer to the part I of the problem described on page 130. The project consists of 7 tasks, labeled
A through G. It is possible to do more than one task simultaneously for instance, we can make
subassembly 1 and subassembly 2, that is, perform tasks C and D, at the same time. However, as
noted in the requires column, some tasks cannot start until others have been completed. For
instance, task C cannot start unless both A and B are complete.
We can depict these relationships using a diagram that looks superficially like the network
diagrams we used for some earlier problems. To do so,
We create a node for each task, plus two extra nodes for start and done.
If task X is required by task Y, we draw and arrow from X to Y. Each arrow in the
diagram means that the task at the end of the arrow cannot start until the task at the
beginning of the arrow is complete.
If a task does not require any other tasks, we draw an arrow to it from start.
If no other tasks depend on a task X, we draw an arrow from X to done.
Start
Done
B
This kind of diagram is called an activity on node or AON diagram. In some of the textbook
excerpts in the coursepack, you may see different kinds of diagrams called activity on arc or
AOA. These diagrams can be more compact, but are more complicated to draw, so we will not
cover them in this course.
Although the AON diagram resembles the network diagrams we have drawn earlier in the
course, they are quite different. The arrows represent the sequencing relationships (also called
Page 1 of 7
precedence relationships) between the tasks, and you should not envision any kind of fluid or
substance flowing through the diagrams, as we had in our earlier examples.
When constructing such diagrams, you should not get distracted by the alphabetical coding of the
tasks. A common error is to put an arrow to done only from the last task in the alphabet (in
this case, G), when there are other arrows to done might be necessary. In principle, every task
should have an arrow from start and arrow to done, because you cannot start a task without
starting the project, and the project cannot be done unless all its tasks are done. All those arrows,
however, would clutter up the diagram, and only a few of them are truly necessary. For
example, we dont need to add an arrow from E to done, because the arrows we have already
drawn in the diagram indicate that being done requires G, and G in turn requires E. Thus, an
arrow from E to done would be redundant, because the arrows we have already drawn ensure
that we could never declare the project done without completing E. But if we were to omit the
arrow from F to done, it would be a mistake, because we would be saying that task F isnt
actually needed, and we could declare done without finishing F.
Similarly, we dont need an arrow from start to C, because (for example) the arrows already in
the diagram say that C requires A, which in turn requires start.
=
=
xG
d
=
=
In the network diagrams weve seen before, the arcs (arrows) corresponded to variables, and the
nodes generally corresponded to constraints. In this setting, the correspondence is reversed. We
have defined variables corresponding to the nodes, and it turns out that our constraints
correspond to the arcs, because the arcs indicate how the events should be sequenced. Let us
assume that now or start is time 0; then the first arrow in the diagram, which says that A
comes after start, can simply be interpreted as the constraint
xA 0
Similarly, the arrow for start to B may be interpreted as
xB 0
The other arrows in the diagram correspond to more interesting constraints. In half-English-halfmath, we could express the arrow from A to C as
Page 2 of 7
=
=
min d
ST xC xA + 6.
xC xB + 9
xD xA + 6
xD xB + 9
xE xD + 7
xF xC + 8
xF xE + 10
xG xE + 10
d xF + 12
d xG + 6
xA, xB,, xG, d 0
At the end of the formulation, we have included nonnegativity constraints for every variable
the logical equivalent of drawing an arrow from start to every other node in the diagram but
only the first two of these constraints, xA, xB 0, are really necessary.
Page 3 of 7
nodes to figure out the earliest time each can start, and then a backward pass to determine the
latest time each can start.
For consistency, however, we will just solve the problem with Excel and Solver. Pages 99-100
of the course pack show one possible spreadsheet model. Cells D5:D11 hold the variables xA,
xB,, xG, respectively, and cell D12 holds d. Note that this cell is both a changing cell and the
target cell.
Columns F and G are used to enforce the precedence constraints. Row 7, for example,
corresponds to task C. F7 contains = E5, the completion time of task A, and G7 contains = E6,
the completion time of task B. The Solver has the constraints D5:D11 >= F5:F11 and
D5:D11 >= G5:G11, which in the case of row 7 mean that D7 >= F7 and D7 >= G7, that is, task
C cannot start until tasks A and B are done. For tasks that have only one predecessor, we simply
put a 0 in column G, generating a redundant constraint. For tasks A and B, which have no
predecessors, we put 0 in both columns F and G. Note that if we had a task with three
predecessors (something like L requiring H, J and K) then we would have to expand the
spreadsheet and add another cannot start until column, with corresponding extra constraints in
Solver.
This spreadsheet is not ideal, in that the precedence data is hardwired into the formulas in
columns F and G. It would be better to be able to express the precedence relationships in the
data section of the spreadsheet, rather than with formulas. Doing so is in fact possible, but is
somewhat complicated, and will not be covered in this lecture.
Page 99 of the course pack shows an optimal solution to the model. The earliest we can finish
the project is 38 days from now.
Critical Paths
For a given feasible solution to an optimization model, a constraint is called binding if holds with
equality, that is, even though the constraint may be of the or form, the two sides are actually
equal for the particular solution we are looking at. If a constraint is not binding (that is, its still
satisfied, but holds with < or >), then it is said to have slack. Lets examine the solution on page
131 and see which constraints are binding and which have slack. If a constraint is binding, lets
bold the corresponding arrow in the diagram:
A
Start
Done
B
Notice that there is a connected path of bolded arrows from start to done, namely
startBDEFdone. Every constraint on this path is binding, meaning that every task
along it starts as soon as possible, given the completion time of the previous task. There is no
slack anywhere along the path, and thus if any task on the path takes longer than expected, the
Page 4 of 7
completion time of the project will be delayed. For this reason, it is called a critical path (this
term has become a common business buzzword that is often used without regard for its true,
original meaning). You may often hear people refer to the critical path, as in thats not on the
critical path. Often, as above, there is just one critical path, but sometimes there can be more
than one. So, technically it is usually safer to say a critical path.
Note that if a task not on any critical path, such as A or C, takes longer than expected, there is
still a possibility that the project can be completed in the originally determined minimum time.
Note that every path from start to done that one can trace in the network corresponds to a
sequence of tasks that must be done in order, without overlap. Therefore, the project must take
at least as long as the length of any such path, obtained by adding up the durations of its tasks.
The critical paths are in fact the longest paths, since there is no reason to take any longer than
longest path. Shorter paths (that is, ones that arent critical) usually exist, but we cannot choose
them as routes for getting to start to done every task in the project has to be done; we
cannot avoid any of them.
Crashing
Sometimes it may be possible, by spending extra money, to accelerate some or all of the tasks in
a project. For example, refer to Part II of the problem on page 130. We see that task A can be
shortened at a cost of $10 per day, B shortened at a cost of $20 per day, and so forth. Investing
extra funds or effort to get a project completed sooner is called crashing.
Setting aside the problems putative deadline of 25 days for the moment, lets consider what we
might do if we wanted to complete the project in just one less day, that is, 37 days. How could
we do that most cheaply?
It is tempting to say that we should shorten task C by one day, since that would only cost $3.
But that would not work, because task C is not on the critical path. Even if C takes 7 days
instead of 8, the path startBDEFdone remains unchanged in the network, and has a
length of 38 days, so the project will still take at least 38 days, and our $3 will be wasted.
To make a project shorter, we must shorten all critical paths. In this case, there is just one
critical path, and we note that among tasks on the critical path startBDEFdone, task
B is the cheapest per day to shorten, so we shorten B by one day at a cost of $20.
If we wanted to reduce the project by another day, we could repeat this same analysis, and
reduce B by an additional day. We can continue doing this until one of two things happens:
either we run out days to shorten the task (in this example, all tasks can be shortened by at most
5 days), or we produce another critical path. In this case, once we have shortened task B by three
days, it takes the same time as A, and we now have a second critical path
startADEFdone. If we want to make the project shorter after this happens, we have
to remember to simultaneously shorten all critical paths; if we shorten B further, the project will
stay the same length, because the path startADEFdone will remain unchanged. We
have to find the cheapest way to shorten both startBDEFdone and
startADEFdone, meaning that we must shorten A and B together, or one of D, E, or
Page 5 of 7
F. As one tries to crash a project more and more, critical paths tend to proliferate and manual
analysis becomes increasingly complicated. So, to get down to 25 days, a reduction of 13 days
total, it is preferable to formulate an LP model and let Solver take care of the details for us.
To formulate the crashing problem, we have to introduce some additional decision variables,
namely
yi
The problem posed in the coursepack is to find the cheapest way to meet the deadline of 25 days.
Thus, we have a different objective, namely
min 10yA + 20 yB +
+ 15 yG.
The precedence constraints are much the same as in the earlier model, but we need to take the yi
variables into account. For example, the duration of task A is no longer necessarily 6, but
instead 6 yA. So, we write the constraints
xC xA + 6 yA,
xC xB + 9 yB,
and so forth. Since we are now pegging the end of the project to the 25-day deadline, we no
longer need the variable d: in the constraints involving the project completion date, we can just
use 25 instead of d, obtaining:
25 xF + 12 yF
25 xG + 6 yG.
Thus, the full model is
xi
yi
=
=
min 10yA + 20 yB +
+ 15 yG
ST xC xA + 6 yA
xC xB + 9 yB
xD xA + 6 yA
xD xB + 9 yB
xE xD + 7 yD
xF xC + 8 yC
xF xE + 10 yE
xG xE + 10 yE
25 xF + 12 yF
25 xG + 6 yG
0 yA, yB,, yG 5
xA, xB,, xG, d 0.
Page 6 of 7
Page 7 of 7