L5.7 Kapitola K5 — Rozvrhování (Slot 5) · [MUST]

EDD a Hornův algoritmus ($1\,|\,\mathrm{pmtn}, r_j\,|\,L_{\max}$)

Jedna nová věc V každém okamžiku spusť ready úlohu s nejbližším due date. Bez release times je to prosté seřazení EDD (optimální pro $1\,||\,L_{\max}$); s release times a povolenou preempcí je to Hornův algoritmus — preempce nastane, když přijde naléhavější úloha.

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í.

$1\,||\,L_{\max}$: stačí seřadit — EDD

Zkus sám: jeden stroj, všechny úlohy k dispozici od $t = 0$, žádná preempce není potřeba. $p = (3, 1)$, $d = (8, 2)$. Které pořadí je lepší a jaké obecné pravidlo z toho čteš?

$(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í.

Slide 28 (EN 1:1) — Problem $1\,||\,L_{\max}$ — EDD and its Optimality

“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:

Zkus sám: proč prohození sousedů $T_b, T_a$ (kde $d_a \le d_b$ a $T_b$ běží těsně před $T_a$) nemůže $L_{\max}$ zhoršit? Sleduj, co se stane s lateness jen těch dvou úloh.

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:

Slide 29 (EN 1:1) — Optimality of EDD — Illustration

“$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$:

  1. If $L_a' \ge L_b'$ then $L_{\max}'(\{T_a, T_b\}) = C_a' - d_a < C_a^A - d_a$
  2. If $L_a' \le L_b'$ then $L_{\max}'(\{T_a, T_b\}) = C_b' - d_b = C_a^A - d_b < C_a^A - d_a$”

“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.”

Přidej release times: kdy se vyplatí čekat?

Zkus sám: $T_1$: $r_1 = 0$, $p_1 = 4$, $d_1 = 8$; $T_2$: $r_2 = 1$, $p_2 = 1$, $d_2 = 2$. Bez preempce: co udělá hladové EDD, které nikdy nenechá stroj stát? Šlo by to líp, kdyby stroj směl chvíli zahálet? A co kdyby byla povolená preempce?

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.

Slide 27 (EN 1:1) — Scheduling on One Resource — Minimizing $L_{\max}$

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).

Hornův algoritmus = iterované EDD

Zkus sám: s preempcí chceme „v každém okamžiku pusť ready úlohu s nejmenším $d_j$“. Okamžiků je ale nekonečně mnoho — ve kterých časech se množina ready úloh (a tedy volba) může vůbec změnit?

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\}$.

Slide 30 (EN 1:1) — Problem $1\,|\,\mathrm{pmtn}, r_j\,|\,L_{\max}$ — Horn's Algorithm

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):

Optimalita a druhé jméno: EDF

Zkus sám: jak důkaz výměnami z EDD přenést na preemptivní rozvrhy, kde úlohy běží po kouskách? (Nápověda: vstupy jsou celočíselné — na jak malé kousky můžeš každý rozvrh rozsekat?)

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.

Slide 32 (EN 1:1) — Optimality of Horn's Algorithm

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:

Slidy 33–34 (EN 1:1) — důkaz výměnami jednotkových dílků

“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].

Nebezpečné polopravdy

① „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).

Key takeaways — L5.7
T01 Problem $1 \mid pmtn, r_j \mid L_{\max}$ — Horn's Algorithm zdroj: task bank #38 = příklad slidu 31 (EN 1:1); Horn doložen i na zkoušce 29. 6. 2023
Assignment (original, EN — bank #38)

“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}$.”

a) Co je v zadání?

Č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}$.

b) Co k tomu budeme potřebovat?

c) Jak nad úlohou uvažovat?

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é.

d) Úplné řešení

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ánopo kroku
102$\mathbf{T_1}(13),\, T_4(16)$$\min\{3, 2\} = 2$$T_1\ \langle 0, 2)$$p_1 := 1$ (preempce)
224$T_1(13),\, \mathbf{T_3}(11),\, T_4(16)$$\min\{3, 2\} = 2$$T_3\ \langle 2, 4)$$p_3 := 1$ (preempce)
34$\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$
46$\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$
57$\infty$$\mathbf{T_1}(13),\, T_4(16)$$\min\{1, \infty\} = 1$$T_1\ \langle 7, 8)$$T_1$ hotová, $C_1 = 8$
68$\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í.

T02 EDD pro $1\,||\,L_{\max}$ + důkaz optimality zdroj: VLASTNÍ drill (přiznáno); algoritmus i důkaz dle slidů 28–29; „EDD optimalita“ je férová ústní otázka
Assignment (EN — vlastní, přiznáno)

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}$.

a) Co je v zadání?

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í.

b) Co k tomu budeme potřebovat?

c) Jak nad úlohou uvažovat?

(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.

d) Úplné řešení

(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$):

  • $L_a' \ge L_b'$: maximum dvojice je $C_a' - d_a < C_a^A - d_a$ ($T_a$ skončila dřív);
  • $L_a' \le L_b'$: maximum dvojice je $C_b' - d_b = C_a^A - d_b \le C_a^A - d_a$ (protože $d_b \ge d_a$; $T_b$ končí tam, kde dřív končila $T_a$).

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$

← Předchozí L5.6b · LP relaxace jako dolní mez v B&B