Resource Leveling
Scheduling a task to start as soon as its predecessors allow, does not take into the account resource capacity constraints. Resource capacity is almost always constrained in real world scenarios, and need to be taken into account.
Levelling resources involve delaying / interrupting tasks until sufficient resources are available. You can do this manually by modifying the task schedule yourself, or you can use the DTS levelling algorithms to do this automatically.
DTS cannot guarantee a mathematically optimum resource scheduling solution since algorithms that can provide the mathematically exact optimum result for levelling problems require serious computational resources (to optimally level a reasonable size project may run for an impractically long time). However, what DTS and many other scheduling systems do is to use heuristic methods that can provide good-enough solutions under most circumstances.
DTS levels resources by prioritizing tasks according to some user-definable rules and scheduling them in this order taking into account resource capacity. DTS will however always take into account the predecessors of a task, i.e. only schedule the task after its predecessors have been scheduled. In the case of tasks scheduled as late as possible, the reverse applies, i.e. the successors is considered as well.
There are two algorithms available:
- Algorithm 1 – The list of all tasks is sorted by the selected fields, of which the priority has to be the first sort field. The system will start to schedule from the top of the list checking each task to ensure that its predecessors have been scheduled. If it skips a task (due to predecessors not being scheduled) it will return to the task as soon as any task lower down in the sort list has been scheduled. This algorithm generally produces the best results. There are 2 variations to this algorithm:
- Prioritize predecessors of higher-priority tasks - assume you have a chain of tasks where say the last task has the highest priority. This option will give the entire chain of predecessors of such a task the same priority, ensuring that it does not get delayed unnecessarily due to the lower-priority tasks occurring before it.
- Re-sort and re-schedule on every pass - this option may give a different result, depending on which fields you sort on. The reason is that all tasks with the same priority may sort in a slightly different order after another task has been levelled (i.e. re-scheduled to start on a later date). Due to the constant re-scheduling it may become extremely slow.
- Algorithm 2 – DTS works through the network using the dependency constraints and finds all those tasks that either do not have a predecessor, or whose predecessors have been levelled already. These tasks are sorted according to the fields selected in the grid, except that you can now use any combination of fields. There are 3 variations to this algorithm.
- Single pass – DTS works through the task network by iteratively building up lists of tasks that can be scheduled (i.e. all predecessors have been levelled), sorting this list and levelling. It does one pass through the network.
- Multi-pass, original sort, re-schedule on every pass – Similar to the single-pass case, this also starts off by building up a list of tasks that can be scheduled (i.e. those with no predecessors). After sorting and levelling, it builds up the next list by using all tasks that were delayed during the previous levelling pass, as well as the successors of those tasks that were not delayed, and re-schedules these first. This means that a task that is delayed during a pass is re-scheduled, and may be levelled again. Due to the constant re-scheduling it may become extremely slow.
- Multi-pass, re-sort and re-schedule on every pass – Similar to the previous case, except that on every subsequent pass after the first one, the tasks that were delayed due to levelling are un-levelled (i.e. they are moved back in time). Then a new list of candidate tasks to be levelled is set up, scheduled, re-sorted and levelled. Due to the constant re-scheduling it may become extremely slow.
Levelling ALAP tasks
When there is at least one task with an as-late-as-possible (ALAP) constraint, the levelling algorithm will perform an additional “backwards pass” on ALAP tasks (after the normal levelling process has run).
The scheduler re-levels ALAP tasks, starting with the latest ones, i.e. it starts moving ALAP tasks to the latest possible date within network and resource constraints. The effect during this backwards pass is to increase resource utilisation towards the end of the schedule and reduce it during early phases (i.e. where ALAP tasks occurred after the normal levelling process).
Related topics and activities