Prerekvizity: [L1.1] Cílová funkce a základní omezení. Navazujeme přímo na [L1.7] — ve Wedding plan nám z modelu zbývá poslední nevyřízená věta.
Zkouškové zadání Wedding plan říká: „…for the sake of justice, the number of guests invited from the groom's side and the bride's side can differ by at most $D_{max}$.“ Označme počty pozvaných z obou stran (lineární výrazy v binárkách $x_i$ „host $i$ pozván“):
$$a = \sum_{i=1}^{n} gr(g_i)\,x_i \qquad b = \sum_{i=1}^{n} br(g_i)\,x_i.$$Podmínka „liší se nejvýš o $D_{max}$“ je $|a - b| \le D_{max}$. Jenže absolute value (absolutní hodnota) není lineární funkce — do ILP ji takhle napsat nesmíme.
$|t| \le D$ znamená přesně $-D \le t \le D$. Dosaď $t = a - b$ a roztrhni na dvě lineární nerovnosti:
$$a - b \le D \qquad \text{a zároveň} \qquad b - a \le D.$$První hlídá případ „$a$ je větší“, druhá případ „$b$ je větší“. Obě musí platit současně — a „současně“ (průnik, AND) je v ILP zadarmo: prostě napíšeš obě omezení pod sebe. Žádná binárka, žádné big-M.
Ne! $|t| \ge D$ znamená „$t \ge D$ NEBO $t \le -D$“ — to je disjunkce, přípustná množina má díru uprostřed (je nekonvexní). „Nebo“ se v ILP platí binárním přepínačem a big-M [L1.4]:
$$a - b \ge D - M y, \qquad b - a \ge D - M(1 - y), \qquad y \in \{0,1\}.$$Zapamatuj si ten kontrast: $|{\cdot}| \le D$ je AND (zadarmo), $|{\cdot}| \ge D$ je OR (big-M). Směr nerovnosti rozhoduje o ceně.
Tím je Wedding plan kompletně pokrytý — celý model složíš v [L1.9]. Ale dvojice hodnot je jen začátek: co když se nesmí „rozjet“ víc než dvě hodnoty najednou?
Zápočtový test 2021 chtěl rozdělit bankovky do čtyř skupin $S_1, \dots, S_4$ se součty $h_1, \dots, h_4$ tak, aby rozdíl mezi nejvyšším a nejnižším součtem nepřekročil limit $P$:
$$\max_j h_j \;-\; \min_j h_j \;\le\; P.$$Funkce $\max$ a $\min$ ale lineární nejsou — stejný problém jako u absolutní hodnoty.
Ano — „max − min ≤ P“ platí právě tehdy, když se žádné dvě hodnoty neliší o víc než $P$. Stačí tedy napsat $|h_j - h_k| \le P$ pro všechny dvojice, tj. dvě nerovnosti na dvojici:
$$h_j - h_k \le P \quad \forall j \ne k.$$Pro 4 skupiny je to $\binom{4}{2} \cdot 2 = 12$ nerovností. Funguje to, ale počet omezení roste kvadraticky s počtem skupin — a hlavně existuje elegantnější konstrukce, kterou používá vzorové řešení a kterou musíš umět: pomocné proměnné.
Maximum je nejmenší číslo, které je $\ge$ všem hodnotám. Lineárně umíme zařídit tu druhou půlku:
$$h_{max} \ge h_j \qquad \forall j \in 1..4.$$Symetricky pro minimum: $h_{min} \le h_j$ pro všechna $j$. A samotné omezení rozptylu je pak jediná nerovnost:
$$h_{max} - h_{min} \le P.$$Celkem $2 \cdot 4 + 1 = 9$ omezení a dvě pomocné proměnné — a počet roste jen lineárně s počtem skupin.
Na konkrétním (nevyhovujícím) rozdělení: součty skupin $h = (9, 12, 10, 14)$, celkový součet $45$, limit $P = 0.1 \cdot 45 = 4.5$:
V konstrukci je schovaná jemnost, na kterou se u ústní zkoušky dobře ptá.
Nebrání mu nic — $h_{max}$ je jen horní mez hodnot, ne jejich maximum (a $h_{min}$ jen dolní mez). Ale nevadí to, protože nerovnost $h_{max} - h_{min} \le P$ tlačí proti ulétnutí:
Přípustná rozdělení jsou tedy přesně ta správná — konstrukce je korektní, i když se $h_{max}$ maximu jen „umí rovnat“, nemusí.
Ne! Právě proto, že $h_{max}$ smí ulétnout nahoru (a $h_{min}$ dolů), splní solver $h_{max} - h_{min} \ge P$ vždy — třeba $h_{max} = 10^6$, $h_{min} = 0$ — aniž by skutečné hodnoty cokoli plnily. Omezení by bylo bezzubé.
Stejná logika říká, kdy konstrukci smíš dát do kritéria: $\min\,(h_{max} - h_{min})$ funguje (minimalizace stlačí meze až na skutečné max/min), $\max\,(h_{max} - h_{min})$ ne. Pomocná proměnná funguje jen ve směru, ve kterém ji omezení/kritérium „přitlačí“ k hodnotám. Srovnej s big-M [L1.4]: tam má $M$ tutéž roli jednostranné meze.
Konstrukce z této lekce zachycuje max/min přes JEDNU pevnou množinu hodnot — čtyři součty $h_1, \dots, h_4$, které v každém přípustném řešení existují vedle sebe. Něco úplně jiného je požadavek typu „nerovnost musí platit pro každou možnou volbu“ (worst-case přes všechny kombinace, např. „ať si student vybere kterékoli jedno jídlo denně…“). Tam žádná konečná množina hodnot „vedle sebe“ neleží a $h_{max} \ge h_j$ napsat nejde — je to jiná konstrukce, viz [L1.13]. Nezaměňuj!
“Formulate using ILP:
Pozn.: zápis „$S_j \subseteq \{1, \ldots, 4\}$“ je takto v originále; míněno je zjevně $S_j \subseteq \{1, \ldots, n\}$ pro $j \in 1..4$ (skupiny jsou množiny bankovek).
Rozhodovací (decision) úloha: existuje rozdělení $n$ bankovek do 4 navzájem disjunktních skupin tak, aby rozdíl mezi nejvyšším a nejnižším součtem skupiny byl nejvýš 10 % celkového součtu? „Disjoint division“ = každá bankovka padne právě do jedné skupiny. Nehledáme optimum, jen přípustnost — kritérium může být klidně $\min 0$.
Jaká binárka popíše „bankovka $i$ patří do skupiny $j$“? Které omezení vynutí „pairwise disjoint“ a zároveň „každá bankovka někde je“? Jak z binárek lineárně poskládáš součet skupiny $h_j$? Limit „10 % of the sum of all banknotes value“ — je to konstanta, nebo proměnná? (Hodnoty $p_i$ jsou parametry zadání!) A nakonec: dvě pomocné proměnné a tři druhy omezení z této lekce.
Dle vzorového řešení: $x_{ij} = 1$ ⟺ bankovka $i \in S_j$.
$$\begin{aligned} \min \quad & 0 \\ \text{subject to:} \quad & \\ & \sum_{i \in 1..n} x_{ij} \cdot p_i = h_j \quad j \in 1..4 \\ & \sum_{j \in 1..4} x_{ij} = 1 \quad i \in 1..n \\ & h_{min} \le h_j \quad j \in 1..4 \\ & h_{max} \ge h_j \quad j \in 1..4 \\ & h_{max} - h_{min} \le 0.1 \sum_{i \in 1..n} p_i \\ \text{parameters:} \quad & p_{i \in 1..n} \in \mathbb{Z}^+ \\ \text{variables:} \quad & x_{i \in 1..n,\, j \in 1..4} \in \{0,1\}, \;\; h_{max}, h_{min}, h_{j \in 1..4} \in \mathbb{Z}^+ \end{aligned}$$Komentáře: