Past articles in this series have explored resource-constrained project scheduling using simulation. In this article, we will demonstrate these concepts using an unleveled project schedule. The steps to be demonstrated are:

- Use simulation to identify the distribution of resource-feasible schedules
- Use simulation to estimate the average duration of resource-feasible schedules
- For a unique resource-feasible schedule, use simulation to identify the resource critical path or paths associated with that schedule

The last item resolves the issue of phantom float, as well.

## Unleveled schedule instance

We will start with a project schedule that needs to be leveled. It has fifteen tasks, 21 logical constraints, and durations vary between 1 and 10 days. The overall schedule is 60 days long and the logical critical path is <**1,2,3,5,6,8,10,11** >. The schedule instance has 19 logical paths and the average out-degree of each schedule task is 1.4 paths. There are three resource types, with capacity ranging between one and five individual resources per type.

The schedule is displayed in MS Project in Figure 1. We can see that most of the tasks have over allocated resources and that the schedule requires resource leveling.

Figure 1. Unleveled project schedule

## Distribution of non-delay resource-feasible schedules

The data in the following figures was generated using a simulation technique described in a prior article. Using a simple dispatching algorithm with random ordering of task assignments at decision points, a resource-feasible non-delay schedule is generated. A non-delay schedule is one in which tasks are scheduled as soon as required resources become available If the process is repeated, the result is a distribution of resource-feasible non-delay schedules, which stabilizes within a few thousand iterations, if not sooner.

The distribution of schedule durations of the non-delay resource feasible schedules is shown in Figure 2. The range of non-delay schedule durations is 74 to 90 days, with an average of 76.9 days.

Figure 2. Distribution of resource-feasible schedule durations (n=10,000)

Figure 3 illustrates that there can be more than one resource-feasible non-delay schedule that yields a particular schedule duration. Each schedule is identified by its unique task start time vector (sVec).

Figure 3. Unique task start time vectors within distribution of non-delay resource-feasible schedules (n=10,000)

## Resource-feasible schedule simulation

As shown in a prior article, resource-constrained schedule simulation can be used to estimate the average schedule length of resource-feasible schedules. As in the prior articles, task preemption and resource assignment adjustment are not considered in the leveling.

The difference between the simulated mean schedule length of a resource unconstrained schedule and its constrained counterpart can be significant, as illustrated in the following figures. Figure 4 shows the frequency distribution of schedule durations for the resource unconstrained and constrained schedule.

Figure 4. Frequency distributions of project durations for the resource unconstrained and constrained schedule

Figure 5 shows the schedule duration means and cumulative frequency distributions from the unconstrained and constrained simulations. There is a clear shift between the unconstrained and constrained mean duration. The shift shows the effect of leveling lag on the resource-constrained schedule. As tasks are delayed pending resource assignment, the overall schedule length is extended. The variation around the means is due to the simulated variance in individual task durations. Task duration was varied between 80% and 150% of the original task duration in this simulation. Further, both means are subject to path convergence bias, which is an effect of project schedule simulation.

Figure 5. Duration means and cumulative frequency distributions for unconstrained and constrained schedule

## Resource Critical Path (RCP) identification

If we arbitrarily choose one of the 74-day resource feasible schedules, sVec=<0,7,15,20,29,20,33,38,38,58,48,61,66,58,61>, and we run a simulation to identify sets of resource paths that would explain the resource flows for that schedule, there are more than 4500 unique sets of resource constraints that can be derived from the sets of resource paths generated in a simulation involving 10,000 trials. However, when each of those sets of resource constraints are joined with the set of logical constraints, all of the joined sets reduce to a single resource critical path (RCP), <**1,2,3,6,5,7,8,11,14,15,13** >.

The notion of resource critical path ambiguity is addressed in a prior article. Depending upon the complexity of schedule, there may be more than one RCP. In the prior article, we saw that the sets of resource constraints for a unique resource-feasible schedule reduce to a set of combinations of RCP’s.

The additional resource constraints generated by the simulation were added to the Successors field in MS Project. One set of the more than 4500 resource constraint sets was chosen arbitrarily, since all sets reduce to the same RCP in this particular case. The non-redundant set of resource constraints is **A _{R}**={<

**1,3**>,<

**1,6**>,<

**2,4**>,<

**2,5**>,<

**2,6**>,<

**4,5**>,<

**5,7**>,<

**5,11**>,<

**6,5**>,<

**7,8**>,<

**7,11**>,<

**8,11**>,<

**10,15**>,<

**11,10**>,<

**11,14**>,<

**14,12**>,<

**15,13**>}. The set of logical constraints is

**A**={<

**1,2**>,<

**1,5**>,<

**2,3**>,<

**3,4**><

**3,6**>,<

**4,7**>,<

**4,8**>,<

**5,8**>,<

**5,9**>,<

**6,7**>,<

**7,9**>,<

**8,10**>,<

**8,14**>,<

**9,10**>,<

**9,11**>,<

**9,13**>,<

**9,14**>,<

**10,12**>,<

**11,12**>,<

**11,15**>,<

**14,15**>}. Joining the set of resource constraints with the set of logical constraints, in order to expose the resource critical path and resolve the issue of phantom float is addressed in a prior article.

Note that the RCP solution does not involve Leveling Delay. Leveling Delay in MS Project can mask the resource critical path. The schedule is driven entirely by the union of the logical and resource constraints.

Figure 6. 74-day resource-feasible schedule, with resource constraints added to show the RCP

A similar process could be used to identify the set of RCP combinations associated with any of the non-delay resource-feasible schedules. This was just one of many possible solutions.

## How does MS Project level the schedule?

In MS Project, the Standard leveling of the unleveled schedule (without preemption or adjustment of resource assignments) yields an 83-day schedule with a start vector of sVec=<0,7,15,20,34,20,29,57,38,67,47,70,75,67,70>. This is not one of the non-delay schedules identified above. Task **8** could have been started at time 39 since all required resources were available at that time. However, it is a viable resource-feasible schedule, within the range of non-delay schedules.

Leveling Delay in MS Project masks the resource critical path. Note that the critical path appears to be discontinuous. MS Project has computed the critical path correctly, taking Leveling Delay into account. But, there is phantom float. For example, task **2** does not have **4** days of total float. If the start of task **2** is delayed by one day, it will cause an over allocation of resource **2** between tasks **5** and **7** at time 36.

Figure 7. MS Project Standard leveling, without preemption or adjustment of resource assignments

The start vector of the MS Project leveling was used in a simulation to identify sets of resource paths that would explain possible resource allocation schemes. All of the sets of resource constraints generated from the sets of resource paths, when combined with the set of logical constraints, reduce to a single RCP, <**1,2,3,6,7,5,9,11,8,14,15,13**>, in this case. Arbitrarily joining one of the sets of resource constraints with the set of logical constraints and loading the combined constraints into MS Project yields the schedule in Figure 8. Note that the resource critical path does not involve Leveling Delay. The schedule is driven by the union of the logical and resource constraints. Also, there is no phantom float!

Figure 8. Resource critical path for MS Project leveling, with resource constraints added to show the RCP

## Summary

There are several benefits to using simulation in resource leveling. By being able to visualize the distribution of resource-feasible schedule durations, the project manager has a better understanding of what leveling possibilities are. By simulating the schedule durations of resource-feasible schedules, the project manager can determine the likelihood of meeting a particular schedule duration. While the 74-day schedule may be optimal in terms of shortest resource-feasible schedule duration, an 83-day schedule is much more likely to be met given task duration variation that occurs as a schedule is executed.

The ultimate benefit is being able to identify the combination of RCP’s associated with a unique resource-feasible schedule. As seen in the last figures, the leveled schedules are being driven by resource constraints, in addition to the task duration and logical constraints of the traditional critical path analysis.

Further, this method resolves the issue with phantom float that exists in resource leveled schedules. Traditional backward-pass calculations cannot properly identify float in the leveled schedule due to the ambiguity involved in identifying which resource caused a leveling delay. Here, simulation is used to explore possible resource allocation schemes for a particular resource-feasible schedule. Then, the set of resource constraints derived from a set of resource paths can be reduced to a set of RCP combinations for a given resource-feasible schedule.

________________

© Nicklas, Inc. and robinnicklas.com, 2018. All rights reserved. Unauthorized use and/or duplication of this material without express and written permission from this site’s author and/or owner is strictly prohibited.