Rozvrhování s omezujícími podmínkami (dokončení)
21. března 2023
1 Podmínky pro zdroje (pokračování)
2 Globální omezení
3 Prohledávání a rozvrhovací strategie
Produkovatelné/spotřebovatelné zdroje
Zdroj = rezervoár
Aktivita konzumuje nějaké množství zdroje cap(A)<0 nebo
aktivita produkuje nějaké množství zdroje cap(A)>0
Požadována minimální kapacita zdroje (při konzumaci)
a maximální kapacita zdroje nemůže být překročena (produkcí)
−1
−1
+1
Kumulativní zdroj může být chápan jako speciální případ rezervoáru
každá aktivita konzumuje cap(A) při startu
a produkuje cap(A) na konci
Hana Rudová, FI MU: Rozvrhování s omezujícími podmínkami (dokončení) 2 21. března 2023
Relativní uspořádání
Pokud je čas relativní (uspořádání aktivit)
potom techniky edge finding a agregovaných požadavků nic neodvodí
Pořád ale můžeme používat informace o uspořádání aktivit a
spotřebě/produkci daného zdroje
Příklad:
reservoár: aktivity konzumují a produkují zdroj
−1−1−1
+1
lze odvodit nezbytnost přídavné aktivity produkující jednotku zdroje
Hana Rudová, FI MU: Rozvrhování s omezujícími podmínkami (dokončení) 3 21. března 2023
Optimistický zdrojový profil (orp) Cesta&Stella 1997
orp(A): maximální možná úroveň zdroje v čase, kdy se A začne zpracovávat
Aktivity, které musí být před A, se vezmou dohromady s produkčními
aktivitami, které mohou být před A
orp(A) = InitLevel + cap(A) + B<0 cap(B)
Příklad:
B??A znamená, že pořadí A a B ještě není známé
Hana Rudová, FI MU: Rozvrhování s omezujícími podmínkami (dokončení) 4 21. března 2023
orp odvozovací pravidla I.
orp(A) < MinLevel ⇒ fail
i když je veškerá produkce plánována před A
není dosažena minimální požadovaná úroveň zdroje
orp(A) = InitLevel + cap(A) + B<0 cap(B)
Hana Rudová, FI MU: Rozvrhování s omezujícími podmínkami (dokončení) 5 21. března 2023
orp odvozovací pravidla II.
orp(A) − cap(D) − D<0 cap(B) < MinLevel
⇒ D << A
Uvažujme časový okamžik, kdy začne aktivita A
pro libovolné D takové, že D??A a cap(D) > 0:
pokud je produkce v D plánována za A a minimální požadovaná
úroveň zdroje není dosažena, pak musí být D před A
Příklad:
Hana Rudová, FI MU: Rozvrhování s omezujícími podmínkami (dokončení) 6 21. března 2023
Odvozovací pravidla pro orp
orp(A) = InitLevel + prod(A) + B<0 prod(B)
orp(A) < MinLevel ⇒ fail
přestože veškerá produkce je plánována před A, pořád ještě není
dosažena požadovaná minimální úroveň zdroje
orp(A) − prod(D) − D<0 prod(C) < MinLevel
⇒ D << A
pro libovolné D takové, že D??A a prod(D) > 0
pokud je produkce v D plánována za A a minimální požadovaná úroveň zdroje není
dosažena ani když všechny ostatní produkční aktivity jsou před A (které tam být
mohou), potom D musí být před A
tedy odečteme produkci C, které musí být až po D (tudíž tato produkce není k
dispozici pro A)
⇒ v orp(A) je zahrnuta produkce D a produkce aktivit C, které musí být po D. Proto
tyto produkce odečítáme od orp(A) a dostáváme se k novému požadavku na
MinLevel.
Hana Rudová, FI MU: Rozvrhování s omezujícími podmínkami (dokončení) 7 21. března 2023
Optimistický zdrojový profil: cvičení
orp(A) = InitLevel + cap(A) + B<0 cap(B)
orp(A) − cap(D) − D<0 cap(B) < MinLevel
⇒ D << A
Máme dány aktivity A, B, C, X, Y , Z
a jejich požadované kapacity jsou po řadě 1, 2, 3, 4, 5, −1
Jsou dány precedence: A << B << C, X << Y
InitLevel = MinLevel = 0
Jaká je hodnota orp(A)?
orp(A) = 0 + cap(A) + 0 + (cap(X) + cap(Y )) = 0 + 1 + 0 + (4 + 5) = 10
Může být X naplánováno po A? 10 − 4 − 5 = 1, tj. ano
Co se změní, pokud bychom přidali aktivitu D s následujícími vlastnostmi?
cap(D) = −2
D << A
orp(A) = 0 + 1 + (−2) + (4 + 5) = 8 a dále 8 − 4 − 5 = −1, tj. X nesmí být po A
Hana Rudová, FI MU: Rozvrhování s omezujícími podmínkami (dokončení) 8 21. března 2023
Pesimistický zdrojový profil (prp) Cesta&Stella 1997
prp(A): minimální možná úroveň zdroje v čase, kdy se A začne zpracovávat
Aktivity, které musí být před A, se vezmou dohromady s konzumačními
aktivitami, které mohou být před A
prp(A) = InitLevel + cap(A) + B< MaxLevel ⇒ fail
i když je veškerá konzumace plánována před A,
maximální povolená kapacita zdroje je překročena
InitLevel
cap(B): all B with B??A and cap(B)<0
cap(B): all B with B< MaxLevel
⇒ D << A
Uvažujme časový okamžik, kdy začne aktivita A:
pro libovolné D takové, že D??A a cap(D) < 0:
jestliže je konzumace v D plánována po A a je překročena maximální
povolená úroveň zdroje, pak musí být D před A
Příklad:
InitLevel
cap(B): all B with B??A and cap(B)<0
cap(B): all B with B< MaxLevel ⇒ fail
přestože veškerá konzumace je plánována před A, je maximální úroveň
zdroje (kapacita) překročena
prp(A) − prod(D) − D< MaxLevel
⇒ D << A
pro libovolné D takové, že D??A a prod(D) < 0
pokud je konzumace v D plánována za A a maximální úroveň zdroje je překročena i
když všechny ostatní konzumační aktivity jsou před A (které tam být mohou),
potom D musí být před A
tedy přičteme konzumaci C, které musí být až po D (tudíž se tato konzumace
neodehraje před A)
⇒ v prp(A) je zahrnuta konzumace D a konzumace aktivit C, které musí být po D.
Proto tyto konzumace přičítáme k prp(A) a dostáváme se k novému požadavku na
MaxLevel.
Hana Rudová, FI MU: Rozvrhování s omezujícími podmínkami (dokončení) 12 21. března 2023
Globální podmínky
Pro reprezentaci zdrojů využívány v programovacích jazycích
tzv. globální podmínky
definované pro libovolný konečný počet proměnných
komplexní podmínky s vlastním propagačním algoritmem
Základní globální podmínky (pro rozvrhování)
příklady z IBM ILOG OPL (Optimization Programming Language)
všechny proměnné různé
allDifferent
disjunktivní zdroj
dvar interval, dvar sequence
noOverlap
kumulativní zdroj
cumuFunction, pulse
Hana Rudová, FI MU: Rozvrhování s omezujícími podmínkami (dokončení) 13 21. března 2023
Všechny proměnné různé
Proměnné v poli Array jsou různé
reprezentace unárního zdroje s jednotkovou dobou trvání všech aktivit
dvar int Array[Interval];
globální podmínka: allDifferent(Array)
učitel min max
Jan 3 6
Petr 3 4
Anna 2 5
Ota 2 4
Eva 3 4
Marie 1 6
Příklad: učitelé musí učit v různé hodiny
Jan = 6, Ota = 2, Anna = 5,
Marie = 1, Petr ∈ {3, 4}, Eva ∈ {3, 4}
Hana Rudová, FI MU: Rozvrhování s omezujícími podmínkami (dokončení) 14 21. března 2023
Intervalové proměnné
Intervalová proměnná: pro modelování časového intervalu (úlohy, aktivity)
hodnotou intervalové proměnné je celočíselný interval [start, end)
příklad: dvar interval x in 0..1000000 size 100..200;
Hana Rudová, FI MU: Rozvrhování s omezujícími podmínkami (dokončení) 15 21. března 2023
Disjunktní rozvrhování
Sekvenční proměnná p
definována na množině intervalových proměnných x
dvar interval x[i in 1..n] ...;
dvar sequence p in x;
hodnota intervalové proměnné p je permutace přítomných intervalů
pozor, permutace t ještě neimplikuje žádné uspořádání v čase
Omezení noOverlap(p)
vyjadřuje, že sekvenční proměnná p reprezentuje řetězec
nepřekrývajících se intervalových proměnných
pro vyjádření rozvrhování na unárním/disjunktivním zdroji, kde se
intervaly/úlohy nepřekrývají
Hana Rudová, FI MU: Rozvrhování s omezujícími podmínkami (dokončení) 16 21. března 2023
Precedence, účelová funkce
Mezi intervalovými proměnnými můžeme definovat precedenční podmínky:
dvar interval i;
dvar interval j;
endBeforeStart(i, j);
startBeforeStart(i, j);
startAtStart(i, j);
...
Pro vytváření účelových funkcí nebo definici omezení
startOf(x)
endOf(x)
sizeOf(x, V)
Příklad: minimalizace makespanu
minimize max(i in 1..n) endOf(x[i])
Hana Rudová, FI MU: Rozvrhování s omezujícími podmínkami (dokončení) 17 21. března 2023
Příklad: rozvrhování problému job-shop
tuple Operation {
int mch; // machine
int pt; // processing time
};
Operation Ops[j in Jobs][p in Pos] = ...;
op[j][p] odkazuje operaci úlohy j, která je zpracovávána v rámci úlohy jako p-tá
Hana Rudová, FI MU: Rozvrhování s omezujícími podmínkami (dokončení) 18 21. března 2023
Kumulativní zdroj pomocí kumulativní funkce
Hodnota výrazu kumulativní funkce reprezentuje vývoj kvantity v čase, která může
být inkrementálně změněna (snížena nebo navýšena) intervalovými proměnnými.
Intervalové proměnné x[i] přispívají do kumul. funkce po dobu svého provádění
int capacity[1..5] = [1,3,2,4,1];
cumulFunction y = sum(i in 1..5) pulse(x[i],capacity[i]);
Omezení na výrazech kumulativní funkce: pro omezení kapacity zdroje
int h = ...
cumulFunction f= ...
f<=h
Příklad: job-shop a omezení celkového počtu strojů
cumulFunction allMachines = sum(j in Jobs, p in Pos) pulse(op[j][p],1);
allMachines <= m;
Hana Rudová, FI MU: Rozvrhování s omezujícími podmínkami (dokončení) 19 21. března 2023
Prohledávání/přiřazování (opakování)
Konzistenční techniky jsou (obvykle) neúplné
⇒ potřeba prohledávací algoritmus, který vyřeší "zbytek"
Přiřazovaní (labeling)
prohledávání do hloubky (DFS/BT)
přiřaď hodnotu do proměnné
propaguj = udělěj
problém lokálně konzistentní
vrať se v případě neúspěchu
Hana Rudová, FI MU: Rozvrhování s omezujícími podmínkami (dokončení) 20 21. března 2023
Způsoby větvení (opakování)
Jaká proměnná má být ohodnocena první?
princip prvotního neúspěchu (first-fail)
preferuj proměnnou, jejíž přiřazení je nejobtížnější
(hrozí u ní nebezpečí failu)
Jaká hodnota má být vyzkoušena první?
princip prvotního úspěchu (succeed-first)
preferuj hodnoty, které nejspíše patří do řešení
Hana Rudová, FI MU: Rozvrhování s omezujícími podmínkami (dokončení) 21 21. března 2023
Schémata větvení
Větvení = řešení disjunkcí
Tradiční rozvrhovací přístupy
kritická rozhodnutí se dělají první
vyřeš kritická místa (bottlenecks), . . .
definuje tvar prohledávacího stromu
podobně jako princip prvního neúspěchu (first-fail)
preferuj alternativy s větší flexibilitou
definuje pořadí větví pro prozkoumání
podobně jako princip prvního úspěchu (succeed-first)
Jak popsat, co je kritické a co je flexibilní?
Hana Rudová, FI MU: Rozvrhování s omezujícími podmínkami (dokončení) 22 21. března 2023
Rezerva (slack) Smith&Cheng 1993
Rezerva (slack) je formální popis flexibility
Rezerva pro dané pořadí dvou aktivit
„volný čas pro posunování aktivit”
A
B
slack for A<