Dosud jsme v K5 minimalizovali $C_{\max}$ a $\sum w_j C_j$. Dnes poprvé kritérium s due daty: maximum lateness $L_{\max} = \max_j (C_j - d_j)$ — značení $L_j$, $d_j$ vs. $\tilde{d}_j$ znáš z [L5.1] Grahamova notace α|β|γ. A vzpomeň si: $L_{\max}$ v kritériu implikuje existenci due dat, i když v $\beta$ nestojí.
$(T_1, T_2)$: $C = (3, 4)$, $L = (3-8, 4-2) = (-5, 2)$, $L_{\max} = 2$. $(T_2, T_1)$: $C = (1, 4)$, $L = (1-2, 4-8) = (-1, -4)$, $L_{\max} = -1$. Naléhavější (dřívější due date) má jít dřív — obecně: seřaď úlohy podle neklesajících $d_j$. Tomu se říká EDD — Earliest Due Date first a pro $1\,||\,L_{\max}$ je to optimální.
“Can be solved by EDD (Earliest Due Date first), i.e. tasks are scheduled in order of nondecreasing due dates. Time complexity is $\mathcal{O}(n \cdot \log n)$.
Optimality can be proven by simple swaps:
Ostatních úloh se prohození nedotkne (blok $T_b T_a$ zabírá stejný interval jako $T_a T_b$). Před swapem je horší z dvojice $T_a$: končí později (v čase $C_a^A$) a má dřívější due date, takže $L_{\max}^A(\{T_a, T_b\}) = C_a^A - d_a$. Po swapu skončí $T_a$ dřív (lepší) a $T_b$ skončí v $C_a^A$ — ale jeho lateness $C_a^A - d_b \le C_a^A - d_a$, protože $d_b \ge d_a$. Maximum dvojice tedy nevzroste. Formálně dle slidu 29:
“$L_{\max}^A(\{T_a, T_b\}) = C_a^A - d_a$, $L_{\max}'(\{T_a, T_b\}) = \max\{L_a', L_b'\}$.
Two cases must be considered when $p_a > 0$ and $p_b > 0$:
“Since, in both cases, $L_{\max}'(\{T_a, T_b\}) < L_{\max}^A(\{T_a, T_b\})$ we can conclude that the swap of $T_a$ and $T_b$ decreases $L_{\max}(\{T_a, T_b\})$ and thus it cannot increase $L_{\max}(\mathcal{T})$, the maximum lateness of all tasks.”
Hladově: v $t = 0$ je ready jen $T_1$ → běží $\langle 0, 4)$, pak $T_2$ $\langle 4, 5)$: $L_2 = 5 - 2 = 3$, $L_{\max} = 3$. Kdyby stroj počkal do $t = 1$: $T_2$ $\langle 1, 2)$, $T_1$ $\langle 2, 6)$: $L = (-2, 0)$, $L_{\max} = 0$. Jenže rozhodnout, kdy a kvůli komu čekat, znamená koukat do budoucnosti — přesně proto je $1\,|\,r_j\,|\,L_{\max}$ NP-hard. S preempcí žádné věštění netřeba: spusť $T_1$, v $t = 1$ ji přeruš kvůli naléhavější $T_2$, pak dokonči: $T_1$ $\langle 0,1)$, $T_2$ $\langle 1,2)$, $T_1$ $\langle 2,5)$ → $L = (-3, 0)$, $L_{\max} = 0$. Preempce dává „výhodu čekání“ zadarmo — rozběhnutá práce nepropadne.
Important notes:
Tahle mapa je zkoušková klasika: druhý řádek (NP-hard bez preempce — nepreemptivní příbuzný s deadliny se řeší Bratleyho B&B, [L5.9]), třetí a čtvrtý řádek je dnešní lekce, poslední řádek (precedence) vyřeší transformace Chetto-Silly-Bouchentouf v [L5.8] Chetto-Silly-Bouchentouf. Že preempce dělá z těžkých problémů lehké, jsi už viděl u [L5.4] McNaughton (P|pmtn|Cmax).
Jen ve dvou typech bodů: když přijde nová úloha (release time $r_j$) — může být naléhavější a vyvolat preempci — a když běžící úloha doběhne. Mezi dvěma takovými body se nic nemění, takže stačí v každém rozhodovacím bodě udělat EDD nad ready úlohami a pustit vítěze až do dalšího bodu. Přesně to dělá Hornův algoritmus: $t_1$ = teď, $t_2$ = nejbližší příští release, $\delta = \min\{p_k, t_2 - t_1\}$.
“Input: $\mathcal{T}$, set of $n$ preemptive tasks. Processing times $(p_1, p_2, \ldots, p_n)$, release dates $(r_1, r_2, \ldots, r_n)$ and due-dates $(d_1, d_2, \ldots, d_n)$.
Output: Start times of preempted parts of tasks.”
while T != ∅ do
t1 := min_{Tj ∈ T} {rj}; // t1 is now
if all tasks are ready at time t1 then t2 = ∞;
else t2 = min_{Tj ∈ T} {rj | rj > t1}; // situation changes in t2
T' = {Tj | Tj ∈ T, rj = t1}; // set of ready tasks
choose Tk ∈ T' with minimal dj; // EDD in T'
δ := min {pk, t2 − t1};
schedule Tk or its part in interval ⟨t1, t1 + δ);
if δ = pk then T := T \ {Tk};
else pk := pk − δ; // preemption
for Tj ∈ T' do rj := t1 + δ;
end
Dva drobné triky v zápisu: $p_k := p_k - \delta$ je účetnictví preempce (zbytek úlohy čeká na později) a závěrečné rj := t1 + δ posune „release“ všech ready úloh na konec právě naplánovaného úseku — takže v příští iteraci vyjde $t_1 = t_1 + \delta$ a ready množina se správně srovná s nově příchozími. Projdi si běh (vlastní mini-instance — přiznáno):
Na jednotkové dílky. Každý rozvrh se dá WLOG rozdělit na sloty délky 1; když se optimální rozvrh $S^A$ v nějakém slotu $t$ liší od volby „ready úloha s nejbližším deadlinem“ ($i_t \ne j_t$), prohodíme slot úlohy $T_{i_t}$ s pozdějším slotem úlohy $T_{j_t}$ — obě jsou v $t$ ready ($r_{j_t} \le t$), takže prohození je legální, a stejný argument jako u EDD ukáže, že $L_{\max}$ nevzroste. Nejvýš $D$ výměn (D = poslední deadline) převede $S^A$ na rozvrh EDF.
“Theorem — Optimality of Horn's Algorithm. Given a set of $n$ independent preemptive tasks with arbitrary release times, any algorithm that at any instant executes the task with earliest due date among all the ready tasks is optimal with respect to $L_{\max}$ minimization.
When we assume $1\,|\,\mathrm{pmtn}, r_j, d_j = \tilde{d}_j\,|\,L_{\max}$ then the algorithm is often called EDF (Earliest Deadline First) and we will speak about deadlines rather than due dates from now on. Such algorithm:
“Assuming the input parameters to be nonnegative integers, the proof of the theorem is based on the following reasoning:
“Using the same argument adopted in the proof of EDD optimality for $1\,||\,L_{\max}$, it is easy to show that each swap cannot increase the maximum lateness of the task set $L_{\max}$.” (Oba důkazy — EDD i Horn/EDF — patří mezi férově zkoušené „dokažte“ u ústní.)
Verze s deadliny ($d_j = \tilde{d}_j$) je krok k real-time rozvrhování: EDF nejen minimalizuje $L_{\max}$, ale tím pádem rozhoduje schedulabilitu — přípustný rozvrh existuje právě tehdy, když EDF skončí s $L_{\max} \le 0$. (Feasibilitu pro více procesorů $P\,|\,\mathrm{pmtn}, r_j, \tilde{d}_j\,|$ jsme řešili toky v [L5.0] Rozvrhování přes toky.) A když přibudou precedence, předzpracují se úpravou $r_j', \tilde{d}_j'$ a pustí se zase EDF — to je Chetto-Silly-Bouchentouf, příští lekce [L5.8].
① „EDD funguje i s release times.“ Bez preempce ne — $1\,|\,r_j\,|\,L_{\max}$ je NP-hard; hladové EDD bez čekání klidně vyrobí $L_{\max} = 3$ tam, kde optimum je $0$ (viz try výše). Optimalita EDD platí pro $1\,||\,L_{\max}$, optimalita Horn/EDF pro preemptivní případ. ② Preempce jen v release timech. Mezi dvěma releasy se množina ready úloh nezvětšuje, takže běžící vítěz EDD zůstává vítězem — kdo kreslí preempci „uprostřed ničeho“, dělá chybu. ③ Záporný $L_{\max}$ není chyba — znamená rezervu (maximalizace earliness, slide 27). A nezaměň $d_j$ (due date, smí se přetáhnout — měkké) s $\tilde{d}_j$ (deadline — tvrdé, [L5.1]): s deadliny čteš výsledek EDF jako verdikt feasibility ($L_{\max} \le 0$ ano/ne).
“Use Horn's Algorithm for the following source example:
$$\mathcal{T} = \{T_1, T_2, T_3, T_4\}, \qquad p = (3, 2, 3, 4), \qquad r = (0, 4, 2, 0), \qquad d = (13, 8, 11, 16).$$
Construct the preemptive schedule and compute $L_{\max}$.”
Čtyři preemptivní úlohy na jednom stroji, každá s release timem a due datem. Máme odsimulovat Hornův algoritmus (iterované EDD), nakreslit Ganttův diagram včetně preempcí a spočítat $L_{\max}$.
Veď si tabulku iterací: v každé urči $t_1$ (teď), $t_2$ (nejbližší další release), množinu ready úloh $T'$ s jejich due daty, vítěze EDD a $\delta = \min\{p_k, t_2 - t_1\}$. Hlídej dva momenty, kdy nově příchozí úloha přebije běžící (preempce). Na konci přečti z Ganttu completion times a spočti $L_j = C_j - d_j$ pro všechny úlohy — maximum klidně vyjde záporné.
Tabulka iterací (due daty ready úloh v závorkách, vítěz EDD tučně):
| # | $t_1$ | $t_2$ | $T'$ (ready) | $\delta$ | naplánováno | po kroku |
|---|---|---|---|---|---|---|
| 1 | 0 | 2 | $\mathbf{T_1}(13),\, T_4(16)$ | $\min\{3, 2\} = 2$ | $T_1\ \langle 0, 2)$ | $p_1 := 1$ (preempce) |
| 2 | 2 | 4 | $T_1(13),\, \mathbf{T_3}(11),\, T_4(16)$ | $\min\{3, 2\} = 2$ | $T_3\ \langle 2, 4)$ | $p_3 := 1$ (preempce) |
| 3 | 4 | $\infty$ | $T_1(13),\, \mathbf{T_2}(8),\, T_3(11),\, T_4(16)$ | $\min\{2, \infty\} = 2$ | $T_2\ \langle 4, 6)$ | $T_2$ hotová, $C_2 = 6$ |
| 4 | 6 | $\infty$ | $T_1(13),\, \mathbf{T_3}(11),\, T_4(16)$ | $\min\{1, \infty\} = 1$ | $T_3\ \langle 6, 7)$ | $T_3$ hotová, $C_3 = 7$ |
| 5 | 7 | $\infty$ | $\mathbf{T_1}(13),\, T_4(16)$ | $\min\{1, \infty\} = 1$ | $T_1\ \langle 7, 8)$ | $T_1$ hotová, $C_1 = 8$ |
| 6 | 8 | $\infty$ | $\mathbf{T_4}(16)$ | $\min\{4, \infty\} = 4$ | $T_4\ \langle 8, 12)$ | $T_4$ hotová, $C_4 = 12$ |
Preempce nastaly přesně v release timech naléhavějších úloh: $T_1$ přerušena v $t = 2$ příchodem $T_3$ ($d_3 = 11 < 13$), $T_3$ přerušena v $t = 4$ příchodem $T_2$ ($d_2 = 8 < 11$).
Lateness: $L_1 = 8 - 13 = -5$, $L_2 = 6 - 8 = -2$, $L_3 = 7 - 11 = -4$, $L_4 = 12 - 16 = -4$.
$$L_{\max} = \max\{-5, -2, -4, -4\} = -2 \quad (\text{určuje } T_2).$$
Záporný výsledek = všechno stíháme s rezervou aspoň 2 (earliness).
Pozn. k podkladům (přiznáno): textový přepis obrázku slidu 31 uvádí bloky „$T_1$: 9→10“ a „$T_4$: 7→11“, které se navzájem překrývají — na jednom stroji nemožné, přepis je zjevně poškozený. Běh dle pseudokódu je jednoznačný: v $t = 7$ vybírá EDD $T_1$ ($d_1 = 13 < d_4 = 16$), tedy $T_1\ \langle 7, 8)$ a $T_4\ \langle 8, 12)$. Bloky $T_1\ \langle 0,2)$, $T_3\ \langle 2,4) \cup \langle 6,7)$ a $T_2\ \langle 4,6)$ se s přepisem shodují.
Consider the problem $1\,||\,L_{\max}$ with $n = 4$ tasks, $p = (2, 1, 3, 2)$ and $d = (5, 9, 6, 10)$.
(i) Find a schedule minimizing the maximum lateness and compute $L_{\max}$.
(ii) Prove that the algorithm you used is optimal for $1\,||\,L_{\max}$.
Jeden stroj, žádné release times ($\beta$ prázdné — všechny úlohy od $t = 0$), minimalizace $L_{\max}$. Část (ii) je důkazová — typická otázka k ústní.
(i) Bez $r_j$ nepomůže ani preempce — stačí najít správné pořadí. Podle čeho řadit? (ii) Důkaz veď přes spor s konečným počtem oprav: vezmi optimální rozvrh lišící se od tvého a najdi v něm sousední dvojici „v protisměru“; ukaž, že její prohození nic nezhorší. Rozeber, čí lateness se změní a kterým směrem.
(i) EDD: seřaď podle neklesajících $d_j$ → pořadí $(T_1, T_3, T_2, T_4)$ s due daty $(5, 6, 9, 10)$. Completion times: $C_1 = 2$, $C_3 = 5$, $C_2 = 6$, $C_4 = 8$.
Lateness: $L_1 = 2 - 5 = -3$, $L_3 = 5 - 6 = -1$, $L_2 = 6 - 9 = -3$, $L_4 = 8 - 10 = -2$, tedy $$L_{\max} = -1 \quad (\text{určuje } T_3).$$
(ii) Optimalita EDD (dle slidů 28–29). Nechť $S^A$ je optimální rozvrh a $S^{EDD}$ rozvrh EDD. Je-li $S^A \ne S^{EDD}$, existují úlohy $T_a, T_b$ s $d_a \le d_b$ takové, že $T_b$ běží v $S^A$ bezprostředně před $T_a$. Prohoď je → rozvrh $S'$; ostatní úlohy se nepohnou (dvojice zabírá týž interval). Před prohozením $L_{\max}^A(\{T_a, T_b\}) = C_a^A - d_a$ (pozdější konec, dřívější due date). Po prohození rozliš dva případy ($p_a, p_b > 0$):
V obou případech maximum lateness dvojice nevzroste, a protože se nikdo jiný nezměnil, $L_{\max}(\mathcal{T})$ nevzroste. Konečně mnoha takovými prohozeními převedu $S^A$ na $S^{EDD}$: $S^A \xrightarrow{\text{swap}} S' \xrightarrow{\text{swap}} \cdots \xrightarrow{\text{swap}} S^{EDD}$, tedy $L_{\max}(S^{EDD}) \le L_{\max}(S^A)$ a EDD je optimální. $\blacksquare$