Řešení problému SAT s využitím lokálního prohledávání Vladimír Brablec Seminář z umělé inteligence II, 2010
Motivace Obsah referátů Články, podle nichž je prezentace vytvořena 1 Selman B., Kautz H., Cohen B.: Local Search Strategies for Satisfiability Testing, 1995. 2 Schöning U.: New Algorithms for k-sat Based on the Local Search Principle, 2001. 3 Gu J., Purdom P. W., Franco J., Wah B. W.: Algorithms for the Satisfiability (SAT) Problem: A Survay, 1991.
Motivace Obsah referátů Motivace SAT je rozhodnutelný (tabulková metoda) SAT je NP-úplný 2-SAT je v P formuli kolika proměnných zvládneme vyřešit za 10 dní? procesor 2 10 9 operací / s (tj. asi 2 31 ) 10 dnů = 864 000 s (tj. méně než 2 20 ) celkem tedy formule může mít kolem 50 proměnných to je málo!
Motivace Obsah referátů Motivace cíl: řešit formule s tisíci či dokonce milióny proměnných proč? řada aplikací (HW/SW verification, AI planning,...) cíl je dosažitelný na řadě reálných problémů (heuristiky) v obecném případě nebudeme lepší než tabulková metoda
Motivace Obsah referátů Co zaznělo minule procedura DPLL úplná metoda postupně ohodnocující atomy 3 druhy heuristik: nalezení nutného ohodnocení proměnné volba další proměnné, kterou máme ohodnotit řešení konfliktů (formule není splněna vygenerovaným ohodnocením)
Motivace Obsah referátů Co zazní dnes lokální metody řešení SAT (často nejsou úplné) základní metody a jejich experimentální srovnání analýza dalších algoritmů
Základní algoritmy - přehled Experimentální srovnání algoritmů Problémy lokálního prohledávání Reprezentace problému vstup: výroková formule v CNF (konjunkce klauzulí) klauzule je disjunkce literálů literál je výroková proměnná nebo její negace výstup: fle je splnitelná (existuje ohodnocení výrokových proměnných prvky {0,1}, které splňuje fli), nebo není splnitelná
Základní algoritmy - přehled Experimentální srovnání algoritmů Problémy lokálního prohledávání Neúplnost lokálního prohledávání zdá se, že lok. prohledávání se hodí jen na problémy, kdy nám stačí splnit co největší počet klauzulí překvapivě, s vysokou pravděpodobností lze najít splňující ohodnocení všech klauzulí často najdeme splňující ohodnocení, nikdy však nedokážeme, že fle není splnitelná vede k nutnosti přeformulování některých problémů
Základní algoritmy - přehled Experimentální srovnání algoritmů Problémy lokálního prohledávání Algoritmus GSAT prohledává prostor pravdivostních ohodnocení všech atomů (rozdíl oproti DPLL) sousední stavy mají od aktuálního stavu Hammingovu vzdálenost rovnou 1 počáteční stav - náhodně vygenerované ohodnocení tělo algoritmu - cyklus dokud není nalezeno splňující ohodnocení nebo vyčerpán čas unsat(v) počet klauzulí nesplněných aktuálním ohodnocením v najdi proměnnou p, jejíž překlopení hodnoty by vedlo k nejmenší hodnotě unsat(v) překlop hodnotu proměnné p
Základní algoritmy - přehled Experimentální srovnání algoritmů Problémy lokálního prohledávání Lokální minima Co dělat, když překlopení žádné proměnné nevede k takovému ohodnocení v k+1, že unsat(v k+1 ) < unsat(v k )? pouhé přijetí stavů, které mají unsat(v k+1 ) = unsat(v k ) vede k dramaticky vyšší šanci najít globální minimum patrně bude třeba ošetřit zpětné kroky
Základní algoritmy - přehled Experimentální srovnání algoritmů Problémy lokálního prohledávání Obrázek: cit. [1], s. 3
Základní algoritmy - přehled Experimentální srovnání algoritmů Problémy lokálního prohledávání Lokální minima restartovat prohledávání (tj. znovu začít od náhodného stavu) stochastická verze mezi sousedními stavy, které zlepšují unsat, vybírá náhodně s pravděpodobností danou velikostí zlepšení nemusí se vydat do souseda, který nejvíc zlepšuje unsat (pomalejší konvergence)
Základní algoritmy - přehled Experimentální srovnání algoritmů Problémy lokálního prohledávání Simulované žíhání algoritmus náhodně vybere sousední stav a vydá se do něj, pokud: je to stav nezhoršující unsat - vždy je to stav zhoršující (unsat(v k ) < unsat(v k+1 )) - s pravděpodobností e unsat(v k+1 ) unsat(v k ) T, kde T se průběžně snižuje překvapivě se ukázalo výhodnější držet T konstantní možné vysvětlení: stěžejní práce spočívá ve splnění několika posledních klauzulí - zde je již T nízká optimální hodnota T experimentálně stanovena na 0,2 pro náhodné problémy
Základní algoritmy - přehled Experimentální srovnání algoritmů Problémy lokálního prohledávání Náhodná procházka Základní algoritmus vybírá sousední stav zcela náhodně - přitom jen testuje, zda už nejde o splňující ohodnocení úplná metoda, ale pomalá není prakticky použitelná
Základní algoritmy - přehled Experimentální srovnání algoritmů Problémy lokálního prohledávání Modifikovaný algoritmus - analýza dle [1] začíná s náhodným ohodnocením náhodně vybere nesplněnou klauzuli a v ní nějaký literál překlopí hodnotu vybraného literálu předchozí 2 kroky opakuje pro 2-SAT najde splňující ohodnocení v čase O(n 2 ) s pravděpodobností blížící se 1 na obecné problémy se nehodí
Základní algoritmy - přehled Experimentální srovnání algoritmů Problémy lokálního prohledávání Kombinace hladového alg. a náhodné procházky Random Walk Strategy s pravděpodobností p překlop hodnotu proměnné v nějaké nesplněné klauzuli (čili každá proměnná vyskytující se v nějaké nesplněné klauzuli má stejnou šanci) s pravděpodobností 1 p udělej hladový pohyb (GSAT) Random Noise Strategy s pravděpodobností p překlop hodnotu náhodně zvolené proměnné s pravděpodobností 1 p udělej hladový pohyb (GSAT) u obou strategií byla experimentálně stanovena optimální hodnota p mezi 0,5 a 0,6.
Základní algoritmy - přehled Experimentální srovnání algoritmů Problémy lokálního prohledávání Paprskové hledání začneme s k náhodnými ohodnoceními prozkoumáme všechny jejich sousedy a vybereme z nich k nejlepších (tj. splňujících nejvíc klauzulí) opakujeme
Základní algoritmy - přehled Experimentální srovnání algoritmů Problémy lokálního prohledávání Algoritmus WSAT náhodně vybere nesplněnou klauzuli z této klauzule s pravděpodobností p vybere náhodně literál a s pravděpodobností 1 p vybere literál hladově překlopí hodnotu literálu a opakuje postup
Základní algoritmy - přehled Experimentální srovnání algoritmů Problémy lokálního prohledávání Srovnání algoritmů GSAT s restarty a zlepšujícími nebo stejně dobrými stavy Random Walk Strategy Random Noise Strategy Simulované žíhání U všech algoritmů max. 1000 restartů a 20 hodin
Základní algoritmy - přehled Experimentální srovnání algoritmů Problémy lokálního prohledávání Náhodné problémy - testovací data náhodné instance CNF flí jsou vhodné k porovnání algoritmů jak ale generovat těžké náhodné problémy? nageneruj L náhodných klauzulí, kde každá obsahuje K náhodně vybraných proměnných, které jsou z 50% znegované těžké fle jsou ty, u kterých je pravděpodobnost okolo 50%, že budou splněny u 3-SAT to odpovídá poměru L 4.3N
Základní algoritmy - přehled Experimentální srovnání algoritmů Problémy lokálního prohledávání Obrázek: cit. [1], s. 7
Základní algoritmy - přehled Experimentální srovnání algoritmů Problémy lokálního prohledávání Plánovací problémy snadno jsou nalezena ohodnocení splňující téměř všechny klauzule téměř optimální stavy však odpovídají např. špatně umístěnému disku na dně (v problému Hanoi)
Základní algoritmy - přehled Experimentální srovnání algoritmů Problémy lokálního prohledávání Obrázek: cit. [1], s. 8
Základní algoritmy - přehled Experimentální srovnání algoritmů Problémy lokálního prohledávání Tvorba obvodů na základě chování neznámého obvodu (známe vstupy a jim příslušící výstupy) obvod zkonstruovat navíc máme jistá omezení na počty hradel
Základní algoritmy - přehled Experimentální srovnání algoritmů Problémy lokálního prohledávání Obrázek: cit. [1], s. 9
Základní algoritmy - přehled Experimentální srovnání algoritmů Problémy lokálního prohledávání Problémy lokálního prohledávání Obrázek: cit. [3], s. 30
Základní algoritmy - přehled Experimentální srovnání algoritmů Problémy lokálního prohledávání Tunelová heuristika překlopí hodnotu proměnných, pokud to nezmění počet nesplněných klauzulí hledání smyček
Random Funkce procedure (a: assignment; m: integer ): boolean;
Random Funkce procedure (a: assignment; m: integer ): boolean; begin
Random Funkce procedure (a: assignment; m: integer ): boolean; begin if ϕ(a) = 1 then return true;
Random Funkce procedure (a: assignment; m: integer ): boolean; begin if ϕ(a) = 1 then return true; if m = 0 then return false;
Random Funkce procedure (a: assignment; m: integer ): boolean; begin if ϕ(a) = 1 then return true; if m = 0 then return false; {Let C = {l 1, l 2,..., l k } be some clause in ϕ with C(a) = 0, i.e. all k literals l i of C are set to 0 under a }
Random Funkce procedure (a: assignment; m: integer ): boolean; begin if ϕ(a) = 1 then return true; if m = 0 then return false; {Let C = {l 1, l 2,..., l k } be some clause in ϕ with C(a) = 0, i.e. all k literals l i of C are set to 0 under a } for i := 1 to k do if (a l i, m 1) then return true;
Random Funkce procedure (a: assignment; m: integer ): boolean; begin if ϕ(a) = 1 then return true; if m = 0 then return false; {Let C = {l 1, l 2,..., l k } be some clause in ϕ with C(a) = 0, i.e. all k literals l i of C are set to 0 under a } for i := 1 to k do if (a l i, m 1) then return true; return false;
Random Funkce procedure (a: assignment; m: integer ): boolean; begin if ϕ(a) = 1 then return true; if m = 0 then return false; {Let C = {l 1, l 2,..., l k } be some clause in ϕ with C(a) = 0, i.e. all k literals l i of C are set to 0 under a } for i := 1 to k do if (a l i, m 1) then return true; return false; end
Random Korektnost necht a je splňující ohodnocení fle a a je aktuální ohod. se vzdáleností d pro aspoň jedno ohodnocení (a l i ); i {1,... k} je jeho vzdálenost d 1 Př.: {( p q), ( p s), p}; a = (0, 0, 0) modifikace: jednou překlopenou proměnnou už nepřeklápět zpátky mezi nesplněnými klauzulemi vybrat tu nejkratší
Random Složitost a kompletní alg. každé volání (a, m) může vyvolat až k volání (a l, m) složitost je tedy O(k m ) celý alg.: volat (0 n, n 2 ) a (1n, n 2 ) složitost O(k n 2 ) má význam jen pro 3-SAT, kde 3 n 2 1.732 n
Random Algoritmus Random for t times do begin Choose an assignment a, uniformly at random; if (a, β) then accept end; reject
Random Složitost Random jak zvolit t a β, aby pravděpodobnost chyby byla zanedbatelná a zároveň složitost co nejmenší? složitost je O(t k β ) jedno volání (a, β) najde optimání ohodnocení s pravděpodobností β ( n ) i i=0 2 n
Random Složitost Random pravděpodobnost, že cesta od žádného z t náhodných počátečních ohodnocení nevedla k nalezení optima, je t β ( n ) i 1 i=0 2 n když vhodně zvolíme t tak, aby tato pravděpodobnost byla co nejmenší, vyjde nám celková složitost O ( t k β) ( [2 O ββ (1 β) 1 β k β] ) n
Random Složitost Random poslední výraz je minimalizován, když β = 1 složitost potom vyjde ( 2 k k+1 ) n pro případ 3-SAT to dává 1.5 n k+1
Random Deterministický předchozí algoritmus upravíme - místo náhodných počátečních ohodnocení vybereme {a 1... a n } tak, aby {0, 1} n = t i=1 H β(a i ), kde H β (a) je množina ohodnocení, která mají od a vzálenost nejvýš β chtěli bychom najít co nejmenší β a t v ideálním případě platí t = 2n β ( n ) i i=0 když ( to opět upravíme, dostaneme složitost [2 O ββ (1 β) 1 β k β] ) n
Random Modifikovaný algoritmus náhodné procházky for t times do
Random Modifikovaný algoritmus náhodné procházky for t times do begin
Random Modifikovaný algoritmus náhodné procházky for t times do begin Choose an assignment a {0, 1} n, uniformly at random;
Random Modifikovaný algoritmus náhodné procházky for t times do begin Choose an assignment a {0, 1} n, uniformly at random; for u times do
Random Modifikovaný algoritmus náhodné procházky for t times do begin Choose an assignment a {0, 1} n, uniformly at random; for u times do begin
Random Modifikovaný algoritmus náhodné procházky for t times do begin Choose an assignment a {0, 1} n, uniformly at random; for u times do begin if ϕ(a) = 1 then accept;
Random Modifikovaný algoritmus náhodné procházky for t times do begin Choose an assignment a {0, 1} n, uniformly at random; for u times do begin if ϕ(a) = 1 then accept; {Let C = {l 1, l 2,..., l k } be some clause in ϕ with C(a) = 0, i.e. all k literals l i of C are set to 0 under a}
Random Modifikovaný algoritmus náhodné procházky for t times do begin Choose an assignment a {0, 1} n, uniformly at random; for u times do begin if ϕ(a) = 1 then accept; {Let C = {l 1, l 2,..., l k } be some clause in ϕ with C(a) = 0, i.e. all k literals l i of C are set to 0 under a} Choose one of the k literals l i at random;
Random Modifikovaný algoritmus náhodné procházky for t times do begin Choose an assignment a {0, 1} n, uniformly at random; for u times do begin if ϕ(a) = 1 then accept; {Let C = {l 1, l 2,..., l k } be some clause in ϕ with C(a) = 0, i.e. all k literals l i of C are set to 0 under a} Choose one of the k literals l i at random; Flip the value of l i in assignment a;
Random Modifikovaný algoritmus náhodné procházky for t times do begin Choose an assignment a {0, 1} n, uniformly at random; for u times do begin if ϕ(a) = 1 then accept; {Let C = {l 1, l 2,..., l k } be some clause in ϕ with C(a) = 0, i.e. all k literals l i of C are set to 0 under a} Choose one of the k literals l i at random; Flip the value of l i in assignment a; end;
Random Modifikovaný algoritmus náhodné procházky for t times do begin Choose an assignment a {0, 1} n, uniformly at random; for u times do begin if ϕ(a) = 1 then accept; {Let C = {l 1, l 2,..., l k } be some clause in ϕ with C(a) = 0, i.e. all k literals l i of C are set to 0 under a} Choose one of the k literals l i at random; Flip the value of l i in assignment a; end; end;
Random Modifikovaný algoritmus náhodné procházky for t times do begin Choose an assignment a {0, 1} n, uniformly at random; for u times do begin if ϕ(a) = 1 then accept; {Let C = {l 1, l 2,..., l k } be some clause in ϕ with C(a) = 0, i.e. all k literals l i of C are set to 0 under a} Choose one of the k literals l i at random; Flip the value of l i in assignment a; end; end; reject
Random Modifikovaná náhodná proch. - analýza dle [2] necht ϕ je splnitelná fle, vybereme nějaké její splňující ohodnocení a v každé klauzuli fixujeme jeden literál, který je splněn ohodnocením a ; nazveme ho dobrý literál necht náhodné počát. ohodnocení má od a vzdálenost j vzdálenost je náhodná proměnná binomického rozdělení ( ) ( ) n 1 j ( ) 1 n j ( n P[vzdál. od a = j] = = j 2 2 j pokaždé, kdy alg. volí literál z nesplněné klauzule, je šance, že zvolí dobrý literál, 1 k ) 2 n jiný literál zvolí s pravd. 1 1 k to definuje Markovský řetězec
Random Modifikovaná náhodná proch. - analýza dle [2] z vlastností Markovského řetězce plyne: ( ) 1 j P[cílový stav je dosažen poč. stav je j] = k 1 n ( ) ( ) n 1 j P[cílový stav je dosažen] = 2 n j k 1 j=0 ( ) k n P[cílový stav je dosažen] = 2(k 1) obdobně jako dříve je třeba vhodně zvolit u a t tak, aby byla minimalizována možnost, že alg. nenajde optimum ( ) 2(k 1) n celková složitost alg. pak vyjde k ( ) 4 n 3-SAT je řešen se složitostí 3
Random Alg. nezávislých klauzulí počáteční ohodnocení vybereme chytřeji než zcela náhodně nezávislé klauzule nemají žádnou společnou proměnnou následující alg. spočítá maximální množinu nezávislých klauzulí: C := ; for i := 1 to m do if clause C i is independent of all clauses in C then C := C C i ; pro 3-SAT C n 3
Random Alg. nezávislých klauzulí pokud je C αn každá nezávislá klauzule může být splněna 7 (částečnými) ohodnoceními z 8 splňujících ohodnocení C je 7 C 7 αn dokud nenajdeme splňující ohod. celé ϕ, bereme postupně tato částečná ohodn. všechny nezávislé klauzule jsou jimi splněny ostatní klauzule jsou bud splněny, nebo se z nich staly 2-SAT kluzule 2-SAT je řešitelný polynomiálně máme tedy alg. se slož. O(7 αn )
Random Alg. nezávislých klauzulí pokud je C > αn použije se předchozí alg. (náhodná procházka); trojice proměnných z klauzulí v C budou však ohodnoceny s jinou pravděpodobností: ohodnocení pravděpodobnost 000 0 001 z 010 z 100 z 011 y 101 y 110 y 111 x
Random Alg. nezávislých klauzulí x = 1 7, y = 2 21, z = 4 21 při této konfiguraci je P[nalezení splňujícího ohodn.] [ (3 4 ) 1 3α ( ) ] 3 α n 7 pokud má složitost alg. záviset jen na počáteční enumeraci, položíme α 0.146652 O(1.3303 n ) 7 α = ( ) 4 1 3α ( ) 7 α 3 3
z experimentálně porovnávaných algoritmů vyšel nejlépe Random Walk Strategy analýza dalších algoritmů dopadla takto: - O(1.732 n ) Random - O(1.5 n ) - O( ( 4 n) 3) Alg. nezávislých klauzulí - O(1.3303 n )