Čtení: 30 minHodnotí se: zápočtový test, úloha 3 (6 b)

3 Modelování jako ILP a SAT

Po přečtení umíš
  • zvolit proměnné, aby každé řešení odpovídalo jednomu přiřazení
  • přepsat podmínky „aspoň“, „nejvýše“ a „právě“ do ILP i CNF
  • zapsat klasické problémy jako ILP nebo SAT
  • ověřit, že model nedovoluje nesmyslná řešení

V úloze máš problém a chceš ho přeložit do jazyka řešiče. Nemusíš vymýšlet algoritmus. Stačí dobře pojmenovat proměnné a vzorně přepsat podmínky.

3.1 Ukázka: rozdáváme hlídky

Ve firmě jsou tři chodby: AB, BC, CD. Chceme co nejméně hlídek tak, aby každá chodba měla hlídku aspoň na jednom konci. To je Vertex Cover.

Pro každé místo zavedeme xv∈{0,1}x_v \in \{0, 1\}, kde 1 znamená, že tam hlídka je.

min⁡ xA+xB+xC+xD\min\ x_A + x_B + x_C + x_D xA+xB≥1,xB+xC≥1,xC+xD≥1x_A + x_B \ge 1, \quad x_B + x_C \ge 1, \quad x_C + x_D \ge 1

Řešením je xB=xC=1x_B = x_C = 1 se dvěma hlídkami. Každá nerovnice říká přesně jednu větu ze zadání.

3.2 ILP

Definice 3.2 (Celočíselné lineární programování)

Proměnné x1,…,xn∈Zx_1, \dots, x_n \in \mathbb{Z}, často jen {0,1}\{0, 1\}. Minimalizujeme lineární funkci za podmínek Ax≤bAx \le b. Rozhodovací verze se ptá, zda existuje celočíselné xx splňující Ax≤bAx \le b. Reálné LP je polynomiální, požadavek celých čísel z něj dělá NP-těžký problém.

Tahák (Převod vět do ILP)
Věta Zápis
aspoň jedno z a,ba, b a+b≥1a + b \ge 1
nejvýše jedno a+b≤1a + b \le 1
právě jedno a+b+c=1a + b + c = 1
negace ¬a\neg a 1−a1 - a
aa implikuje bb a≤ba \le b
nejvýše kk vybraných ∑vxv≤k\sum_v x_v \le k
Příklad 3.4 (3-SAT jako ILP)

Pro každou proměnnou yi∈{0,1}y_i \in \{0, 1\}. Negaci zapíšeme 1−yi1 - y_i. Klauzule (y1∨¬y2∨y3)(y_1 \vee \neg y_2 \vee y_3) se stane

y1+(1−y2)+y3≥1.y_1 + (1 - y_2) + y_3 \ge 1.

Klauzule je splněná, když je aspoň jeden sčítanec 1.

Příklad 3.5 (3-barvení jako ILP)

Indikátor xv,c∈{0,1}x_{v,c} \in \{0, 1\} říká, že vrchol vv má barvu cc.

  • Každý vrchol má právě jednu barvu: xv,R+xv,G+xv,B=1x_{v,R} + x_{v,G} + x_{v,B} = 1.
  • Hrana {u,v}\{u, v\} a barva cc: xu,c+xv,c≤1x_{u,c} + x_{v,c} \le 1.
Příklad 3.6 (Dominující množina jako ILP)

xv∈{0,1}x_v \in \{0, 1\} znamená, že vv je v množině. Každý vrchol musí být vybraný nebo mít vybraného souseda:

xv+∑u∈N(v)xu≥1∀v,∑vxv≤k.x_v + \sum_{u \in N(v)} x_u \ge 1 \quad \forall v, \qquad \sum_v x_v \le k.

3.3 SAT

Formule je v CNF: klauzule spojené AND, uvnitř OR. Řešič dostane DIMACS: proměnné jsou čísla, řádek 1 -2 0 znamená x1∨¬x2x_1 \vee \neg x_2.

Tahák (Převod vět do CNF)
Věta Klauzule
aspoň jedno z a,b,ca, b, c (a∨b∨c)(a \vee b \vee c)
nejvýše jedno (¬a∨¬b),(¬a∨¬c),(¬b∨¬c)(\neg a \vee \neg b), (\neg a \vee \neg c), (\neg b \vee \neg c)
právě jedno obojí dohromady
aa implikuje bb (¬a∨b)(\neg a \vee b)
ne všechny tři (¬a∨¬b∨¬c)(\neg a \vee \neg b \vee \neg c)

Rozdíl proti ILP: v SAT není součet. Podmínka „nejvýše jedno“ proto potřebuje klauzuli na každou dvojici.

Příklad 3.8 (3-barvení jako SAT)

Proměnná xv,cx_{v,c} pro každý vrchol a barvu.

  • Aspoň jedna barva: (xv,1∨xv,2∨xv,3)(x_{v,1} \vee x_{v,2} \vee x_{v,3}).
  • Hrana: (¬xu,c∨¬xv,c)(\neg x_{u,c} \vee \neg x_{v,c}) pro každou barvu cc.

Podmínka „nejvýše jedna barva“ tu není potřeba. Má-li vrchol v řešení dvě barvy, jednu zahodíme a nic se nepokazí. Stejný trik používá proseminář u Schurových čísel.

Příklad 3.9 (Hamiltonovská kružnice jako SAT)

Klíč je kódování podle pozic: xp,vx_{p,v} říká, že na pozici pp kružnice je vrchol vv.

  1. Na každé pozici je aspoň jeden vrchol.
  2. Každý vrchol je aspoň na jedné pozici.
  3. Žádný vrchol není na dvou pozicích: (¬xp,v∨¬xq,v)(\neg x_{p,v} \vee \neg x_{q,v}).
  4. Na žádné pozici nejsou dva vrcholy: (¬xp,u∨¬xp,v)(\neg x_{p,u} \vee \neg x_{p,v}).
  5. Sousední pozice jsou spojené hranou. Pro každou nehranu {u,v}\{u, v\} a pozici pp: (¬xp,u∨¬xp+1,v)(\neg x_{p,u} \vee \neg x_{p+1,v}), indexy modulo nn.

Proměnných je n2n^2 a klauzulí polynomiálně mnoho.

Příklad 3.10 (Schurův problém z prosemináře)

Lze čísla 1,…,n1, \dots, n obarvit kk barvami bez jednobarevné trojice x+y=zx + y = z? Proměnná xi,cx_{i,c}, v DIMACS (i−1)k+c(i - 1)k + c.

  • Aspoň jedna barva pro každé ii.
  • Pro x≤yx \le y, x+y≤nx + y \le n a barvu cc: (¬xx,c∨¬xy,c∨¬xx+y,c)(\neg x_{x,c} \vee \neg x_{y,c} \vee \neg x_{x+y,c}).

Pro k=3k = 3 dostane číslo 2 s barvou 2 proměnnou (2−1)⋅3+2=5(2 - 1) \cdot 3 + 2 = 5.

3.4 Jak model ověřit

Než model odevzdáš, odpověz si na dvě otázky:

  1. Každé skutečné řešení splňuje všechny podmínky? Jinak model zakazuje něco platného.
  2. Každé splnění podmínek je skutečné řešení? Jinak model pouští nesmysl.

3.5 Typické chyby

3.6 Kvíz

Kvíz

1. Jak v ILP zapíšeš, že vybereš právě jeden ze tří prvků?
2. Kolik klauzulí potřebuje v SAT podmínka nejvýše jedno z 5 proměnných při párovém kódování?
3. Schurův problém s k=4k = 4: jaké číslo má proměnná x3,2x_{3,2} v DIMACS?
4. Které zápisy patří do ILP? Může být správně více možností, ale také žádná.
5. Klauzule (y1∨¬y2)(y_1 \vee \neg y_2) v ILP je:
6. Proč u 3-barvení v SAT nemusí být podmínka nejvýše jedna barva?
Ukázat řešeníZ vrcholu s více barvami lze libovolnou barvu odebrat a žádná podmínka hrany se tím neporuší. Formule jsou ekvisplnitelné.

3.7 Příklady na procvičení

Cvičení 3.11

Zapiš Set Cover jako ILP.

Řešení

xi∈{0,1}x_i \in \{0, 1\} říká, že množina SiS_i je vybraná. Pro každý prvek uu: ∑i:u∈Sixi≥1\sum_{i : u \in S_i} x_i \ge 1. Dále ∑ixi≤k\sum_i x_i \le k.

Cvičení 3.12

Zapiš Clique velikosti kk jako SAT.

Řešení

xi,vx_{i,v} říká, že ii-tý člen kliky je vrchol vv, pro i=1,…,ki = 1, \dots, k.

  • Každý člen je nějaký vrchol: ⋁vxi,v\bigvee_v x_{i,v}.
  • Pro i<ji < j a dvojici u,vu, v, kde u=vu = v nebo {u,v}\{u, v\} není hrana: (¬xi,u∨¬xj,v)(\neg x_{i,u} \vee \neg x_{j,v}).

Druhá podmínka zakáže opakování vrcholu i nehrany.

Cvičení 3.13

Máš nn zkoušek, tt termínů, nejvýše cc zkoušek v termínu a konflikty mezi zkouškami. Zapiš ILP.

Řešení

xe,tx_{e,t} říká, že zkouška ee je v termínu tt.

  • Každá zkouška jednou: ∑txe,t=1\sum_t x_{e,t} = 1.
  • Konflikt {e,f}\{e, f\}: xe,t+xf,t≤1x_{e,t} + x_{f,t} \le 1 pro každé tt.
  • Kapacita: ∑exe,t≤c\sum_e x_{e,t} \le c pro každé tt.

3.8 Tahák

Tahák
  • Napiš větu: „x...x_{...} znamená, že ...“.
  • ILP: aspoň ≥1\ge 1, nejvýše ≤1\le 1, právě =1= 1, negace 1−a1 - a, implikace a≤ba \le b.
  • SAT: aspoň = jedna klauzule, nejvýše = klauzule na dvojici, implikace (¬a∨b)(\neg a \vee b).
  • Pořadí a cesty: xp,vx_{p,v} (na pozici pp je vrchol vv).
  • Výběr z více možností: indikátor xv,cx_{v,c}.
  • Kontrola: řešení ⇒ podmínky, podmínky ⇒ řešení.

Zdroje

  • NI-ICC přednáška 5: ILP strany 19–22
  • NI-ICC proseminář 7: SAT řešič a Schurova čísla, strany 2–22