@@ -548,6 +554,7 @@ Pro dostatečně malé $\varepsilon$ se tedy jedná o $0.878$ pravděpodobnostn
Řešení semidefinitních programů
-------------------------------
TODO
...
...
@@ -556,7 +563,7 @@ Pro dostatečně malé $\varepsilon$ se tedy jedná o $0.878$ pravděpodobnostn
Řešení vychází z Goemans-Williamsonova algoritmu na maximální řez.
Pro každé auto nám bude semidefinitní program umísťovat bod/vektor na jednotkovou sféru.
Poté náhodně rozřízneme nadrovinou sférou na dvě poloviny
Poté náhodně rozřízneme nadrovinou sféru na dvě poloviny
a podle toho, do které poloviny auto patří, zvolíme jeho barvu.
Rozdílné barvy aut $i, j$ stejného typu zařídíme tak, že
...
...
@@ -564,18 +571,18 @@ vynutíme $\vec{y_i} = -\vec{y_j}$. Na to nám stačí jediná podmínka -- ří
Účelovou funkcí pak řekneme, že sousední auta mají preferovat stejnou barvu, tedy jejich body na sféře mají být blízko sebe, což znamená, že skalární součin má být co největší.
Finální semidefinitní program v dekompomovaném tvaru tedy vypadá takto:
Finální semidefinitní program v dekomponovaném tvaru tedy vypadá takto:
Označme konstantu z předchozího lemmatu jako $d = 0.1053$.
Tedy když je účelová funkce pro sousední dvojici aut je $r$, tak pravděpodobnost změny barev je nejvýše $d + r$.
Sečtením přes všechny hrany (z linearity středních hodnot) tedy získáme, že
střední hodnota součtu změn je nejvýše $c(2n-1) + R$, kde $R = \sum_i^{2n-1} \frac{1}{2} - \frac{\vec{y_i}^{\rm T} \vec{y_{i+1}}}{2}$, tedy jedno z ekvivalentních vyjádření účelové funkce.
$$\progline{maximalizuj}{\sum_{0\le i < 2n-1} \vec{y_{t_i}}^{\rm T} \vec{y_{t_{i+1}}} P_{i} P_{i+1}}{}$$
$$\progline{za podmínek}{|y_i| = 1}{0 \le i < n}$$
Výhodou je, že je potřeba poloviční počet proměnných.
Výhodou je, že je potřeba poloviční počet proměnných,
proto v implementační části práce jsem využíval této formy programu.
Měření SDP řešení
=================
...
...
@@ -714,7 +722,7 @@ Střední hodnota indikátoru souslednosti aut daného typu je tedy ${2n-1 \over
Z linearity střední hodnoty tedy počet sousedících aut stejného typu je $n/n = 1$.
:::
Ve 100 vstupech by tedy sousedních aut stejného typu mělo být ve střední hodnotě zhruba 100, což z části vysvětluje pozorovanou anomalit.
Ve 100 vstupech by tedy sousedních aut stejného typu mělo být ve střední hodnotě zhruba 100, což z části vysvětluje pozorovanou anomalitu.
Není však vyloučeno, že hodnoty skalárního součinu $-1$ nebo blízké program dosáhne i jinak.
...
...
@@ -727,7 +735,7 @@ Z naměřených dat však vychází, že semidefinitní program většinou gener
má mnohem menší dimenzi. Přesněji řečeno, pro řešení často platí, že
všechny vektory v něm mají několik prvních souřadnic velké hodnoty
a ve zbylých souřadnic mají hodnoty blízké nule.
Tedy kdybychom vektory promítly na méně dimenzionální sféru (vzali místo nich nejbližší bod na ní), tak se účelová funkce moc nezmění.
Tedy kdybychom vektory promítli na méně dimenzionální sféru (vzali místo nich nejbližší bod na ní), tak se účelová funkce moc nezmění.
::: {#max_coords_200 c=figure floatpage=200}
```python {c=plotly}
...
...
@@ -808,7 +816,7 @@ Bohužel kvalita dostupných řešitelů semidefinitních programů je poměrně
### SDPA-C
Jedním z použitých programů byl SDPA-C [@sdpa-web].
Jedná se o knihovnu c C++ (TODO sazba)
založenou na metodě vnitřvích bodů v primárním a duálním problému. Dle autorů projektu [@sdpa-web]:
založenou na metodě vnitřních bodů v primárním a duálním problému. Dle autorů projektu [@sdpa-web]:
::: {.group lang=cs}
> SDPA (SemiDefinite Programming Algorithm) is one of the most efficient and stable software packages for solving SDPs based on the primal-dual interior-point method. It fully exploits the sparsity of given problems.
...
...
@@ -863,7 +871,7 @@ line 193 in sdpa_linear.cpp
Tedy během výpočtu program něco spočte špatně a jako mezivýsledek mu vyjde matice, co není semidefinitní, se kterou již dále nejde pokračovat.
Příčinu této chyby se mi bohužel nepodařilo odhalit, protože na rozdíl od předchozího problému vůbec není jasné, kde začít hledat.
Detekce nesemidefinitnost matice totiž může být v úplně jiné části kódu, než kde nastane chyba.
Detekce nesemidefinitnosti matice totiž může být v úplně jiné části kódu, než kde nastane chyba.
Problém se projevuje například na vstupu s $n=5$ a seedem $19$.
...
...
@@ -897,7 +905,7 @@ vstupem semidefiního programu je polynomiálně mnoho čísel konstantní velik
Řešení založená na semidefiním programování nemůže být moc rychlé.
Již samotný vstup pro řešič semidefinitních programů má kubickou složitost vzhledem k délce vstupu Binárního paint shop problému.
Program totiž obsahuje $n$ podínek na délku vektoru
Program totiž obsahuje $n$ podmínek na délku vektoru
a každá z nich se zapisuje pomocí matice $n \times n$.