Pauza od rozvrhů — ale jen zdánlivá. Branch & Bound (metoda větví a mezí) je obecná technika řešení ILP a kapitola K5 ji potřebuje dvakrát: jako bounding LP relaxací pro $1|prec|\sum w_j C_j$ [L5.6b] a jako kostru Bratleyho algoritmu (B&B nad permutacemi úloh) [L5.9]. Zároveň je to samostatná zkoušková úloha: na zápočtovém testu 16. 3. 2021 padla v obou variantách (jednou minimalizace, jednou maximalizace — obě níže jako T01 a T02) a doložená je i z testu 8. 3. 2011 a zkoušky 24. 5. 2011. Teorie = slidy 13–16 přednášky o ILP.
Z [L0.7] Co je ILP a LP relaxace víš dvě klíčové věci: zaokrouhlení LP optima nefunguje (může být infeasible i daleko od optima) a LP relaxace dává mez na ILP optimum — horní u maximalizace, dolní u minimalizace. Celou lekci budeme stavět na příkladu ze slidu 16:
$$\begin{aligned} \max \quad & -x_1 + 2x_2 \\ & 2x_1 + x_2 \le 5 \\ & -4x_1 + 4x_2 \le 5 \\ & x_1, x_2 \ge 0, \quad x_1, x_2 \in \mathbb{Z} \end{aligned}$$LP relaxaci vyřešíš graficky (přesně jak to chce zkouškové zadání: “use graphical method to find the solution of such LP”): nakresli obě poloroviny do mřížky, vrstevnici $-x_1 + 2x_2 = \text{konst}$ posouvej směrem růstu (doleva nahoru) — optimum padne do vrcholu, tj. průsečíku $2x_1 + x_2 = 5$ a $-4x_1 + 4x_2 = 5$: $x^{LP} = (1{,}25;\ 2{,}5)$, $z^{LP} = 3{,}75$.
Každé celočíselné přípustné řešení je i přípustným řešením relaxace, takže ILP optimum je nejvýš $3{,}75$ (horní mez). Jakmile najdeš jakékoli celočíselné přípustné řešení, jeho hodnota je naopak dolní mez — optimum je sevřené mezi nimi. Chybí ti systematický způsob, jak necelé LP optimum „rozbít“ na celočíselné kandidáty, aniž bys nějaké řešení ztratil — to je větvení níže.
Bonus: tady mají všechna celočíselná řešení celočíselnou hodnotu $-x_1 + 2x_2$, takže mez jde zostřit na $\lfloor 3{,}75 \rfloor = 3$. B&B na tomhle triku nestojí, ale u zkoušky se hodí jako rychlá kontrola výsledku.
Požaduj $x_1 \le 1$ nebo $x_1 \ge 2$. Každé celočíselné $x_1$ splňuje právě jednu z těch podmínek (mezi $1$ a $2$ žádné celé číslo neleží), takže žádného kandidáta jsme nepřišli. Vyříznutý otevřený pás $1 < x_1 < 2$ obsahuje jen necelé body — včetně toho otravného LP optima $(1{,}25;\ 2{,}5)$, které se už v žádném podproblému nevrátí. Proto „grafické řezání“: do mřížky přibude svislá (či vodorovná) čára a oblast se rozpadne na dvě menší.
Takhle vypadají oba podproblémy po větvení na $x_1$ — všimni si, že sjednocení zelených bodů obou obrázků je přesně množina zelených bodů z obrázku výše:
Pozn. pro binární proměnné: má-li proměnná doménu $\{0,1\}$ ([L0.8] Binární proměnná), větvení $x_i \le 0$ / $x_i \ge 1$ znamená prostě zafixuj $x_i = 0$ nebo $x_i = 1$ — strom pak větví po rozhodnutích. Stejná myšlenka „rozhodnutí = větev“ pohání Bratleyho B&B nad permutacemi úloh [L5.9].
Ne — uzel zahodíš. LP relaxace je horní mez pro všechna (i celočíselná) řešení v celém podstromu toho uzlu: nic pod ním nemůže být lepší než $2{,}5 < 3 = z^b$. To je „bound“ v Branch & Bound — bez něj by metoda degenerovala na úplnou enumeraci (slide 11: „inspecting all possible solutions“).
function z,x = ILP(A,b,c,zᵇ,xᵇ)
z^LP, x^LP := solution to LP problem
is the solution to LP infeasible?
yes → z,x := -∞, [ ]; return
no → continue
if z^LP <= zᵇ ?
yes → z,x := zᵇ, xᵇ; return
no → continue
if all variables integer?
yes → z,x := z^LP, x^LP; return
no →
select some non-integer x_i
k := x_i
solve recursively two problems:
the first one extended with x_i <= ⌊k⌋
z',x' := ILP(A',b',c,zᵇ,xᵇ)
if z' > zᵇ then zᵇ,xᵇ := z',x'
the second one extended with x_i >= ⌊k+1⌋
z'',x'' := ILP(A'',b'',c,zᵇ,xᵇ)
if z'' > zᵇ then zᵇ,xᵇ := z'',x''
z,x := zᵇ, xᵇ
return
Čtení: $z^b, x^b$ je dosud nejlepší celočíselné řešení (incumbent), které se předává rekurzí. Uzel má tři způsoby, jak se stát listem: ① LP infeasible, ② ořezán testem $z^{LP} \le z^b$ (podstrom nemůže pomoci), ③ LP optimum vyšlo celé (kandidát — možná nový incumbent). Jinak se větví.
Proklikej celý strom (DFS, vždy nejdřív levá větev „$\le$“). U každého uzlu si představ obrázek: stejná mřížka, jen oblast seříznutá podmínkami na cestě od kořene — přesně tohle budeš u zkoušky kreslit:
„Zadane nerovnice a kriterium a vyresit tento ILP problem pomoci metody vetvi a mezi. Byla tam nakreslena mrizka, kde jsme si to meli kreslit. Takze si zopaknout jak se zakresluji nerovnice do roviny :-)“ — tedy: dostaneš mřížku a kreslíš. Stejná úloha („Větve a meze pro ILP“) je doložená i na zkoušce 24. 5. 2011 (dochovaly se jen fotky zadání).
“Solve the following ILP instance by Branch and Bound Algorithm, where each vertex of the search tree represents one LP problem (use graphical method to find the solution of such LP).
$$\begin{aligned} \min z = \;& -x_1 + 2x_2 \\ \text{s.t.} \;& 2x_1 + x_2 \ge 4 \\ & -4x_1 + 4x_2 \ge -5 \\ & x_1, x_2 \in \mathbb{Z}_0^+ \text{”} \end{aligned}$$ILP se dvěma proměnnými — přesně formát z výkladu, ale minimalizace a omezení s „$\ge$“. Každý uzel stromu = jedno LP řešené graficky (to je v zadání explicitně). Pozor: přípustná oblast je neomezená (otevřená doprava nahoru) — minimum přesto existuje.
Nakresli mřížku a obě hranice: $2x_1 + x_2 = 4$ (přípustná je strana nad ní) a $x_2 = x_1 - 1{,}25$ (přípustná je strana nad ní). Kritérium $z = -x_1 + 2x_2$ klesá směrem doprava dolů — kam až tě oblast pustí? Najdi vrchol, urči necelou proměnnou, větvi a u každého uzlu se ptej: je LP nepřípustné? Je $z^{LP} \ge z^b$? Je řešení celé? Nezapomeň: první celé řešení ($z^b = 3$ hned v první větvi!) není konec.
Kořen (grafika): oblast je průnik polorovin nad oběma čarami v prvním kvadrantu. Vrstevnici $-x_1 + 2x_2 = \text{konst}$ tlačíme doprava dolů; oblast má jen dva vrcholy, $(0; 4)$ se $z = 8$ a průsečík obou hranic: $2x_1 + x_2 = 4$, $x_2 = x_1 - 1{,}25$ $\Rightarrow$ $3x_1 = 5{,}25$ $\Rightarrow$ $x^{LP} = (1{,}75;\ 0{,}5)$, $z^{LP} = -0{,}75$ — dolní mez. (Neomezeným směrem oblasti $z$ jen roste: pro přípustný směr $d$ platí $d_2 \ge d_1$ i $2d_1 + d_2 \ge 0$, z čehož $-d_1 + 2d_2 \ge 0$.)
Strom (větvíme na $x_1 = 1{,}75$):
Všechny větve uzavřeny → optimum $x^* = (2,\ 1)$, $z^* = 0$. Rychlá kontrola sousedů: $(2,0)$ a $(3,1)$ porušují $-4x_1 + 4x_2 \ge -5$; $(3,2)$ má $z = 1$; $(1,2)$ má $z = 3$. ✓
Tohle je doložená zkoušková úloha (zápočtový test 2021, varianta 1). Vyřeš ji celou NA PAPÍR bez koukání do řešení: mřížka + oblast, u každého uzlu stromu grafické LP ($x^{LP}$, $z^{LP}$), podmínky větvení na hranách a důvod uzavření každého listu. Pošli mi fotku — zkontroluju ti ji a vytknu chyby (nejčastější: ořez podle špatného směru u minimalizace a ukončení po prvním celém řešení).
“Solve the following ILP instance by Branch and Bound Algorithm, where each vertex of the search tree represents one LP problem (use graphical method to find the solution of such LP).
$$\begin{aligned} \max z = \;& x_1 + 2x_2 \\ \text{s.t.} \;& x_1 + x_2 \le 3 \\ & -2x_1 + 2x_2 \le 1 \\ & x_1, x_2 \in \mathbb{Z}_0^+ \text{”} \end{aligned}$$Druhá varianta téhož testu — maximalizace, malá ohraničená oblast. Tady poběží pseudokód ze slidu 15 doslova (včetně testu $z^{LP} \le z^b$).
Oblast je čtyřúhelník s jediným necelým vrcholem — právě tím, kam tlačí kritérium. Po větvení na $x_1$ si u pravé větve všimni, že LP optimum vyjde rovnou celé. V jakém pořadí větve projdeš, rozhodne, kolik práce ušetříš — zkus si obě pořadí a sleduj, kdy zafunguje test $z^{LP} \le z^b$.
Kořen (grafika): vrcholy oblasti: $(0;0)$, $(3;0)$, $(0;\ 0{,}5)$ a průsečík $x_1 + x_2 = 3$ s $-2x_1 + 2x_2 = 1$, tj. $x_2 = x_1 + 0{,}5$ $\Rightarrow$ $x^{LP} = (1{,}25;\ 1{,}75)$, $z^{LP} = 4{,}75$ — horní mez. Větvíme na $x_1 = 1{,}25$: $x_1 \le 1$ / $x_1 \ge 2$.
Strom uzavřen → optimum $x^* = (2,\ 1)$, $z^* = 4$ (LP mez kořene $4{,}75$, zaokrouhleno přes celočíselnost kritéria $\le 4$ — sedí ✓).
Pořadí větví: kdybys prošel nejdřív ④ ($z^b = 4$), uzel ① se ořeže okamžitě: $z^{LP}(①) = 4 \le 4 = z^b$ (test ze slidu 15 je neostrý — při rovnosti už podstrom nemůže být ostře lepší) a uzly ②③ vůbec nepočítáš. Výsledek je stejný, jen levněji — u zkoušky je legální libovolné pořadí, ale důvody ořezů musíš napsat.