= Task float
{title2=$\mathrm{TF}_i=L_i-E_i$}
= Total float
{synonym}
= Task slack
{synonym}
<Task float>, also called <total float> or <task slack>, measures an activity's available start-time delay relative to its earliest start, while allowing a feasible schedule that meets the fixed project finish. For earliest start $E_i$, latest start $L_i$, and fixed duration $\tau_i$, it is
$$
\mathrm{TF}_i=L_i-E_i=(L_i+\tau_i)-(E_i+\tau_i).
$$
In the six-activity <project scheduling> example with start zero and finish 10, B has <task float> 2 and E has <task float> 6. B can move from the interval $[3,5]$ to $[5,7]$, and E from $[0,3]$ to $[6,9]$, without changing D's or F's earliest starts. A, C, D, and F have zero <task float>. With the finish fixed to the optimal duration and the basic <critical path method> assumptions, zero <task float> identifies exactly the activities lying on at least one critical <graph path>. See https://www.cmu.edu/cee/projects/PMbook/10_Fundamental_Scheduling_Procedures.html#10.4[Hendrickson, §10.4, Activity Float and Schedules].
<Task float> is not generally an independent allowance that can be spent separately on every activity. For a small example, let two duration-1 activities X then Y form one chain, running in parallel with a separate duration-4 activity. The optimal finish is 4. X has earliest/latest starts 0/2 and Y has earliest/latest starts 1/3, so each has <task float> 2. Delaying X to 2 forces Y to start at 3, using Y's allowance too. Choosing X at its latest start 2 and Y at its earliest start 1 violates precedence, although both chosen times lie inside their individual ranges. The <optimization constraints> still couple the decisions. Here B and E can both use their full <task floats> together because they lie on separate branches; that freedom must be checked from the <Directed acyclic graph>.
// Target: mathematical-optimization.bigb
Back to article page