@@ -432,20 +432,20 @@ Minimalizovat počet intervalů je to stejné jako minimalizovat počet hranic m
Ve vstupu problému dělení náhrdelníku navíc musí platit, pro každý typ má být stejný počet aut obarvený jednotlivými barvami
(a tedy počet aut daného typu musí být násobkem $k$).
Naopak binární paint shop problém je speciálním případem dělení náhrdelníku
pro dva lupiče, kde navíc platí, že všechna $a_i$ jsou 1 (tedy od každého drahokamu jsou na náhrdelníku právě dva drahokamy).
pro dva lupiče, kde navíc platí, že všechna $a_i$ jsou 1 (tedy od každého typu jsou na náhrdelníku právě dva drahokamy).
Semidefinitní programování
==========================
V této kapitole si představíme princip semidefinitního programování (dále též SDP), jak jej popisují Gärtner a Matoušek [@semidef], a jeho použití na problém maximálního řezu,
z něhož vychází algoritmus na binary paint shop.
z něhož vychází algoritmus na binární paint shop.
Nejprve zavedeme a připomeneme notaci důležitou v této kapitole.
tedy matice $A\in \R^{n\times m}$ obsahuje prvky $A_{i,j}$ pro všechna $0\le i < n$ a $0 \le j < m$.
Nechť $\SYM_n = \{X \in \R^{n\times n} \mid x_{i,j} = x_{j,i} \hbox{\ pro všechna\ } 0 \le i,j < n\}$ je třída všech symetrických matic a nechť $X \circ Y = \sum_{0\le i<n} \sum_{0\le j<0} x_{i,j} y_{i,j}$ značí součet součinu matic po složkách.
Nechť $\SYM_n = \{X \in \R^{n\times n} \mid x_{i,j} = x_{j,i} \hbox{\ pro všechna\ } 0 \le i,j < n\}$ je třída všech symetrických matic a nechť $X \circ Y = \sum_{0\le i<n} \sum_{0\le j<m} x_{i,j} y_{i,j}$ značí součet součinu matic po složkách.
Nakonec $X \succeq 0$ bude značit skutečnost, že matice $X$ je pozitivně semidefinitní (bude vysvětleno později).
Úloha semidefinitního programování je optimalizační úloha (podobně jako lineární programování) následujícího formátu:
...
...
@@ -501,14 +501,14 @@ Problém maximálního řezu (resp. rozhodovací verze, kde se ptáme na existen
je NP-úplný [@maxcut-np], proto
se u něj zkoumají aproximační algoritmy a pravděpodobnostní aproximační algoritmy.
Nejprve si ukážeme triviální $0.5$-aproximační pravděpodobnostní algoritmus:
Nejprve si ukážeme triviální pravděpodobnostní $0.5$-aproximační algoritmus:
::: {c=box t=algo}
Každý vrchol uniformně náhodně přiřaď do množiny $A$ nebo $B$.
:::
::: {c=box t=theorem}
Triviální algoritmus je $0.5$-aproximační pravděpodobnostní algoritmus.
Triviální algoritmus je pravděpodobnostní $0.5$-aproximační algoritmus.
:::
::: {c=proof}
...
...
@@ -526,9 +526,9 @@ Předešlý algoritmus lze derandomizovat, jak popisuje Dimitrakakis [@maxcut-de
Výsledný algoritmus pak vždy najde řešení obsahující alespoň $1/2$ hran, tedy alespoň $1/2$ optima.
Lepšího aproximačního poměru můžeme dosáhnout
Goemansův-Williamsonovým algoritmem, založeným na semidefinitním
programování a proto popsaného mimo jiné v již dříve zmíněném úvodu do semidefinitního programování [@semidef].
Lepšího aproximačního poměru dosáhneme
Goemansovým-Williamsonovým algoritmem, založeným na semidefinitním
programování a proto popsaným mimo jiné v již dříve zmíněném úvodu do semidefinitního programování [@semidef].
Naivní implementace je, že si pro každý vrchol $u$
vyrobíme proměnnou $x_u$, která může nabývat hodnot $\pm 1$, která bude říkat, do jaké množiny máme vrchol umístit.
...
...
@@ -562,7 +562,7 @@ $n-1$ dimenzionální sféru v $\R^n$.
Účelová funkce se snaží umístit body vrcholů spojených hranou co nejdále od sebe.
V případě, kdy jsme povolovali pouze hodnoty $\pm 1$, bylo jasné, které vrcholy patří do které množiny.
Nyní jsou však výstupem optimalizace vektory a tedy přiřazení množinám není tak jednoznačné.
Nyní však výstupem optimalizace jsou vektory a tedy přiřazení množinám není tak jednoznačné.
Rádi bychom umístili od sebe vzdálené body do různých množin.
Na to můžeme rovnoměrně náhodně zvolit nadrovinu
procházející počátkem a rozdělit body
...
...
@@ -745,7 +745,7 @@ Ovšem v našem případě místo maximalizace děláme minimalizaci účelové
Tedy abychom mohli tvrdit, že pravděpodobnost je menší než nějaký násobek účelové funkce,
potřebovali bychom horní odhad poměru. Ovšem tento poměr je neomezený (viz obrázky [](#gw-func) a [](#gw-frac)).
V okolí $x=1$ jsou obě funkce poblíž $0$, ovšem pravděpodobnost se k nule blíží mnohem strměji.
Tedy pro dvojici vektorů poblíž sobě je skalární součin skoro 1, ovšem pravděpodobnost oddělení je libovolně krát větší než vzdálenost součinu od jedné.
Tedy pro dvojici vektorů poblíž sebe je skalární součin skoro 1, ovšem pravděpodobnost oddělení je libovolně krát větší než vzdálenost součinu od jedné.
O binárním paint shop problému je navíc známé, že je za předpokladu Unique game conjecture a $\P\neq \NP$ je polynomiálně neaproximovatelný s konstantním faktorem [@neaprox], takže nemožnost výše uvedeného
postupu by nás ani neměla zaskočit, protože v případě, že by šlo udělat odhad tímto způsobem, získali bychom pravděpodobnostní aproximační algoritmus.
...
...
@@ -844,8 +844,9 @@ Měření řešení BPS
Součástí práce je implementace algoritmů řešících Binární paint shop problém.
Každý z nich byl následně spuštěn pro různé velikosti, pokaždé na $1\,000$ nezávisle náhodně vybraných vstupech s počtem typů aut
Jedna z implementací $\algo{sdp}$ -- pomocí sage vyžaduje moc paměti a proto byla spuštěna jen na vstupech do velikosti $566$.
Celý test běžel jednovláknově zhruba dva dny a využíval nejvýše 16 GB operační paměti.
Jedna z implementací $\algo{sdp}$ -- pomocí sage vyžaduje velké množství paměti a proto byla spuštěna jen na vstupech do velikosti $566$.
Celý test běžel několik dní na čtveřici stojů, na každém dva programy současně,
každý z nich běžel jednovlákonvě a využíval nejvýše 16 GB operační paměti.
U $\algo{sdp}$ řešení bylo použito 10 náhodných řezů a vždy byl vybraný nejlepší z nich.
Gitový repozitář s implementací i naměřenými daty je k dispozici na <https://gitlab.kam.mff.cuni.cz/jirikalvoda/binary-paint-shop-problem>.
Na následujících stranách jsou zpracovaná různá naměřená data.
...
...
@@ -860,7 +861,7 @@ tedy v polovině mezi okolními hodnotami na logaritmické stupnici.
Praktické řešení semidef. programů
-----------------------------------------
U triviálních algoritmů byla implementace poměrně přímočará.
U většiny algoritmů byla implementace poměrně přímočará.
Ovšem u řešení semidefinitního programování je většina složitosti algoritmu schovaná právě v řešení semidefinitních programů,
což už svojí složitostí nepatří mezi algoritmy, které bychom chtěli (re)implementovat.
Proto je žádoucí se spolehnout na funkčnost již existujících implementací.
...
...
@@ -960,7 +961,7 @@ Hodnoty skalárních součinů
--------------------------
V odhadu střední hodnoty počtu změn barev v $\algo{sdp}$ řešení jsme využívali toho, že funkce rozdílu pravděpodobnosti řezu a účelové funkce (funkce $f$) je nejvýše $d = 0.1053$.
Ovšem tato funkce nenabývá takto vysokých hodnot zdaleka všude, na polovině definičního oboru je dokonce záporná (viz obrázek [](#sdp-diff)). Kdyby tedy alespoň část optimalizovaných skalárních součinů se vyskytovala mimo oblast, kde $f$ nabývá vysokých hodnot, šel by odhad zlepšit.
Ovšem tato funkce nenabývá takto vysokých hodnot zdaleka všude, na polovině definičního oboru je dokonce záporná (viz obrázek [](#sdp-diff)). Kdyby se tedy alespoň část optimalizovaných skalárních součinů vyskytovala mimo oblast, kde $f$ nabývá vysokých hodnot, šel by odhad zlepšit.
Bohužel dle naměřených dat to vypadá, že hodnoty skalárních součinů se
koncentrují pouze poblíž maxima $f$. Viz obrázek [](#scalar_products_200).
...
...
@@ -1211,7 +1212,7 @@ fig.update_layout(
Naměřená závislost relativního skóre řešení na velikosti vstupu.
:::
Na výše uvedeném grafu a tabulek na následujících stranách si můžeme všimnout, že s rostoucím $n$
Na výše uvedeném grafu a tabulkách na následujících stranách si můžeme všimnout, že s rostoucím $n$
se u všech měřených algoritmů zmenšuje rozptyl relativního skóre.
Z grafu vidíme, že pro dostatečně velká $n$ je naměřené relativní skóre algoritmu $\algo{sdp}$ menší než $0.34$.