Budapesti M˝ uszaki ´es Gazdas´agtudom´anyi Egyetem Villamosm´ern¨oki ´es Informatikai Kar
SAT-solverek gyors´ıt´asa best-first search algoritmussal
Bart´ok D´avid II. ´evfolyam, m´ern¨ok informatikus szak
´ am Konzulens: Dr. Mann Zolt´an Ad´ Sz´am´ıt´astudom´anyi ´es Inform´aci´oelm´eleti Tansz´ek
2013. okt´ober 25.
Tartalomjegyz´ ek 1. Bevezet´ es 1.1. T´emav´ alaszt´ as . . . . . . . 1.2. SAT gyakorlati alkalmaz´ asai 1.2.1. Elektronik´ aban . . . 1.2.2. Genetik´ aban . . . . 1.2.3. Egy´eb probl´em´ ak . . 2. Elm´ eleti h´ att´ er 2.1. Keres´esi fa . . . . . . . . . 2.2. A best-first search . . . . 2.3. SAT-probl´ema . . . . . . ´ 2.3.1. Attekint´ es . . . . . 2.3.2. DPLL . . . . . . . 2.3.3. CDCL . . . . . . . 2.3.4. Kitekint´es: Parallel
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
6 6 7 7 8 9
. . . . . . . . . . . . . . . . . . SAT
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
10 10 11 14 14 15 16 18
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
20 20 20 21 22
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . meghat´aroz´asa . . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
24 24 24 25 26 26 27 28 29 31
3. Haszn´ alt programok 3.1. MiniSat . . . . . . . . . . . 3.1.1. A cnf form´ atum . . 3.2. SAT-probl´ema gener´ atorok 3.3. BCAT . . . . . . . . . . . .
. . . . .
. . . .
. . . .
4. Az algoritmus 4.1. Logikai szint . . . . . . . . . . . . . . . . . . . 4.1.1. Az alap¨ otlet . . . . . . . . . . . . . . . 4.1.2. A keres´esi t´er sz´etoszt´asa . . . . . . . 4.1.3. A heurisztika . . . . . . . . . . . . . . 4.2. Implement´ aci´ o . . . . . . . . . . . . . . . . . 4.2.1. Az eredeti MiniSat m˝ uk¨od´ese . . . . . 4.2.2. Inicializ´ al´ as . . . . . . . . . . . . . . . 4.2.3. Az assumption¨ okben szerepl˝o v´altoz´ok 4.2.4. A keres´es . . . . . . . . . . . . . . . . 5. M´ er´ esek
33
6. Befejez´ es 6.1. Eredm´enyek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.2. Egy´eb ¨ otletek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
37 37 37
2
´ ak jegyz´ Abr´ eke 1.1. A neh´ez fark´ u eloszl´ as . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1. 2.2. 2.3. 2.4. 2.5. 2.6. 2.7.
Visszal´ep´eses keres´es . . . . . Best-first search . . . . . . . . Solverp´eld´ anyok a f´ aban . . . Szemantikus fa . . . . . . . . Egy megoldhatatlan probl´ema Az implik´ aci´ os gr´ af . . . . . . A vezet˝ o utak . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . keres´esi f´aja . . . . . . . . . . . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
10 12 12 14 14 17 18
3.1. Egy latin n´egyzet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2. A probl´ema neh´ezs´eg´enek alakul´asa . . . . . . . . . . . . . . . . . . . . . . . . . . . .
21 22
4.1. Best-first search 2 solverrel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2. 8 solver megval´ os´ıt´ asa assumption¨okkel . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3. A solver sz´ ama ´es a hozz´ a tartoz´o assumption-t¨omb . . . . . . . . . . . . . . . . . .
24 25 29
5.1. 5.2. 5.3. 5.4.
33 34 35 36
A best-first search v´ altozatok eredm´enyei . . . . . . . Az u ´jraind´ıt´ asokkal gyors´ıtott BFS . . . . . . . . . . . A BFS ´es a MiniSat sz´ or´ as´anak ¨osszehasonl´ıt´asa . . . Sz´ or´ asok alakul´ asa pr´ımt´enyez˝ore bont´as-probl´em´akon
3
. . . . . . .
. . . .
. . . . . . .
. . . .
. . . . . . .
. . . .
. . . . . . .
. . . .
. . . . . . .
. . . .
. . . . . . .
. . . .
. . . . . . .
. . . .
. . . . . . .
. . . .
. . . . . . .
. . . .
. . . . . . .
. . . .
. . . . . . .
. . . .
. . . . . . .
. . . .
. . . . . . .
. . . .
. . . . . . .
. . . .
. . . . . . .
. . . .
. . . . . . .
6
. . . .
. . . .
Bart´ ok D´ avid
SAT-solverek gyors´ıt´asa best-first search algoritmussal
¨ Osszefoglal´ as A m´ern¨ oki gyakorlatban a legfontosabb probl´em´ak jelent˝os r´esz´ere igaz, hogy jelenleg nem l´etezik minden p´eld´ anyukat gyorsan (polinomid˝oben) megoldani k´epes algoritmus. Ezeket ¨osszefoglal´ o n´even NP-teljes probl´em´ aknak nevezz¨ uk. Az els˝o ismert NP-teljes probl´ema a Boolean Satisfiability (SAT), ahol egy logikai formula v´altoz´oinak pr´ob´alunk u ´gy ´ert´eket tal´alni, hogy a kifejez´es igazra ´ert´ekel˝ odj¨ on ki. Az ipari alkalmaz´ asokban gyakran fordulnak el˝o olyan probl´em´ak, melyeket k¨onnyen megfogalmazhatunk SAT-probl´emak´ent. Ezek neh´ezs´ege a mai sz´am´ıt´og´epek sz´am´ıt´asi kapacit´ as´ at is kem´enyen pr´ ob´ ara teszi. A kutat´asa ´eppen emiatt n´epszer˝ u, olyannyira, hogy ´evente SAT-versenyt is rendeznek. Itt saj´ at k´esz´ıt´es˝ u algoritmusokkal lehet r´eszt venni, ´es a c´el probl´emap´eld´anyok min´el gyorsabb megold´ asa. A jelenlegi SAT-megold´ o algoritmusok (solverek) legnagyobb probl´em´aja az, hogy b´ar sok esetben gyorsan oldj´ ak meg a probl´em´ akat, n´eha a fut´asi id˝o a szok´asosn´al nagys´agrendekkel hosszabbra is ny´ ulhat. Ennek cs¨ okkent´es´ere a jelenlegi leghat´ekonyabb m´odszer az, hogy a keres´est bizonyos id˝ ok¨ oz¨ onk´ent u ´jraind´ıtjuk. Val´ osz´ın˝ us´ıthet˝o, hogy ekkor hamarabb eredm´enyre jutunk, mintha az algoritmust beavatkoz´ as n´elk¨ ul futtatn´ank. Ez a megold´as azonban k¨ozel sem t¨ok´eletes: a keres´es el´ert r´eszeredm´enyei az u ´jraind´ıt´ asn´al elvesznek, valamint semmi sem garant´alja, hogy az u ´j futtat´ asn´ al val´ oban gyorsan eredm´enyt kapunk. A TDK dolgozatomban az u ´jraind´ıt´as helyett egy m´asik m´odszert alkalmazok a fut´asid˝ok sz´ or´ as´ anak cs¨ okkent´es´ere. Ez a legjobbat el˝osz¨or” (best-first search) algoritmus, amely a fut´ asa ” sor´ an gy˝ ujt¨ ott adatok alapj´ an pr´ob´alja kital´alni, merre kell keresn¨ unk a megold´as min´el hamarabbi el´er´es´ehez. Ez´ altal a solver k´epes lesz arra, hogy v´altoztasson a keres´esi strat´egi´aj´an, de az addigi r´eszeredm´enyei megtart´ asa mellett. A jelenlegi SAT-solverek nem o¨sszeegyeztethet˝ok a hagyom´anyos best-first search kialak´ıt´as´ aval, ez´ert az alkalmaz´ ashoz az algoritmus jelent˝os m´odos´ıt´as´ara volt sz¨ uks´eg. Fontos k´erd´es volt az is, hogy pontosan milyen adatok alapj´an tudjuk meg´ıt´elni a megold´as k¨ozels´eg´et? A tervez´es ut´ an a k´esz algoritmust a MiniSatba, egy gyors, de k¨onnyen b˝ov´ıthet˝o SAT-solverbe implement´altam. Az eredm´enyek ki´ert´ekel´es´et ´es a finomhangol´ast egy algoritmusok tesztel´es´et seg´ıt˝o szoftvercsomag, a BCAT k¨ onny´ıtette meg. A tesztel´es sor´ an kapott eredm´enyek azt mutatj´ak, hogy ezzel a m´odszerrel sz´amottev˝ oen gyors´ıtottam a k¨ ul¨ onf´ele probl´emap´eld´anyok megold´as´at, ´es siker¨ ult cs¨okkentenem a fut´asid˝ ok hatalmas k¨ ul¨ onbs´eg´et is.
4
Bart´ ok D´ avid
SAT-solverek gyors´ıt´asa best-first search algoritmussal
Abstract For most of the problems in engineering practice currently exists no algorithm, that can solve all instances quickly (in polynomial time). These problems are called NP-complete. The first known NP-complete problem was Boolean Satisfiability (SAT), in which we have to assign values to the variables of a Boolean formula so that it evaluates to true”. Problems that can easily be interpreted ” as SAT occur often in industrial applications. The difficulty of these can be challenging even for the computational capacity of today’s hardware. Accordingly, the research of this problem is so popular that a SAT competition is held annually. Here the participants apply with self-made algorithms and the goal is to solve many instances of SAT as fast as possible. The greatest trouble with current SAT algorithms (solvers) is that although they mostly solve the problems fast enough, sometimes running time can stretch to even other orders of magnitude. The current most effective solution to this is restarting search after a given amount of time. By using this strategy we probably receive a result faster than if we ran the algorithm without external intervention. However, this method is far from perfect: partial solutions are lost during restarts and we have no guarantee that the next run truly provides a quick result. In this paper I propose another solution to reduce the variance of running times. This is the best-first search algorithm, which uses data collected during its run to predict where the result might be found. Thus the solver becomes able to change its search strategy but also keeping the already discovered partial results. Current SAT solvers are not suited for the usage of best-first search, therefore, significant changes had to be executed on the original algorithm before realization. It was also really important to determine how to approximate the closeness of a solution during search. After the design was complete I implemented the algorithm into MiniSat, which is an effective but easily extensible SAT solver. The evaluation of results and fine-tuning were made easier by BCAT, a software package built for testing of combinatorial algorithms. The achieved results show that by using best-first search I made the solution of several SAT instances significantly faster and the variance of running times has also been reduced.
5
1. fejezet
Bevezet´ es 1.1.
T´ emav´ alaszt´ as
A TDK dolgozatomban a best-first search (BFS) algoritmus alkalmaz´as´at mutatom be boolean satisfiability (SAT) probl´em´ akra. A SAT-probl´em´aban egy konjunkt´ıv norm´alform´aban megadott logikai formul´ ar´ ol kell eld¨ onten¨ unk, hogy a v´altoz´oinak tudunk-e u ´gy ´ert´eket adni, hogy a kifejez´es igazra ´ert´ekel˝ odj¨ on ki. Ez volt az els˝o ismert NP-teljes probl´ema: ez azt jelenti, hogy jelenleg nincsen olyan solver (megold´ oprogram), amelyik minden egyes probl´emap´eld´anyra az input hossz´ anak f¨ uggv´eny´eben polinom fut´ asi idej˝ u [12]. Val´osz´ın˝ us´ıthet˝o, hogy ilyet egy´altal´an nem lehet tal´ alni, azaz csak a probl´ema egyes speci´alis p´eld´anyaira l´eteznek hat´ekony algoritmusok. Mivel a SAT´ probl´ema alkalmaz´ asai szerte´ agaz´ oak, nagyon sokan foglalkoznak a kutat´as´aval. Evente ker¨ ul megrendez´esre a nemzetk¨ ozi SAT verseny, ahol saj´at k´esz´ıt´es˝ u solverekkel lehet nevezni, ´es a c´el k¨ ul¨ onf´ele probl´emap´eld´ anyok min´el gyorsabb megold´asa. A SAT-solverekn´el jelenleg a legnagyobb probl´ema az algoritmusok fut´asi idej´enek u ´n. neh´ez fark´ u eloszl´ asa (heavy-tailed runtime distribution). Ez azt jelenti, hogy ´atlagos esetben r¨ovid id˝ o alatt lefut az algoritmus, azonban nem elhanyagolhat´o azon esetek sz´ama, amikor a fut´asi id˝ o az atlag ak´ ´ ar t¨ obbsz¨ or¨ os´ere is ny´ ulik, vagy n´eha nagys´agrendekkel nagyobbra is. Ez l´athat´o az 1.1. abr´ ´ an. Előfordulás gyakorisága
Futási idő
1.1. ´abra. A neh´ez fark´ u eloszl´as
6
Bart´ ok D´ avid
SAT-solverek gyors´ıt´asa best-first search algoritmussal
Ennek jelenlegi leghat´ekonyabb megold´asa az, hogy ha az algoritmus m´ar r´egen fut, akkor u ´jraind´ıtjuk [9]. Ezt az´ert tessz¨ uk, mert rem´elj¨ uk, hogy k¨ovetkez˝o nekifut´asra m´ask´epp fog viselkedni, ´es eredm´enyesebb lesz, azaz az ´atlagos fut´asi id˝o alatt, vagy annak k¨orny´ek´en v´egez. Ezzel a megk¨ ozel´ıt´essel t¨ obb probl´ema is felmer¨ ul: egyr´eszt az u ´jraind´ıt´assal elvesznek az algoritmus eddig el´ert r´eszeredm´enyei. M´ asr´eszt a statisztik´an k´ıv¨ ul semmi sem garant´alja, hogy az ism´etelt pr´ ob´ alkoz´ as gyorsabb lesz. Azonban a gyakorlat azt mutatja, hogy ez az u ´n. restart-m´ odszer meglep˝ oen j´ ol m˝ uk¨ odik, ´es nagy m´ert´ekben gyors´ıtja a solverek m˝ uk¨od´es´et [13]. Mi lenne viszont akkor, ha a restart helyett valahogy el´erhetn´enk azt, hogy az algoritmus valami annyira sz´ amottev˝ ot v´ altoztasson a keres´esben, ami fel´er ugyan egy u ´jraind´ıt´assal, de emellett megtartan´ a az eddigi eredm´enyeit? K´ıv´anatos lenne tov´abb´a az is, hogy a solver ne egy v´eletlenszer˝ uu ´ton folytassa tov´ abb a keres´est, hanem u ´gy, hogy min´el nagyobb val´osz´ın˝ us´eggel jusson gyors megold´ asra. Ezekre a probl´em´ akra kerestem a megold´ast a kutat´asom sor´an, azt v´arva, hogy ´ıgy gyors´ıtani tudom a SAT-solverek m˝ uk¨ od´es´et, legink´ abb a neh´ezfark´ u eloszl´as farokr´esz´enek cs¨okkent´es´en kereszt¨ ul. Ez a c´el apr´ obb algoritmikus m´odos´ıt´asok seg´ıts´eg´evel nem ´erhet˝o el, ez´ert egy teljesen u ´j megk¨ ozel´ıt´esre volt sz¨ uks´egem. A tapasztalatok azt mutatj´ak, hogy a best-first search, melyet a k¨ ovetkez˝ okben r´eszletesen bemutatok, sikeresen alkalmazhat´o ezen c´elok el´er´es´ere a gr´afsz´ınez´es eset´en [5], ami szint´en egy NP-teljes probl´ema. Ez keltette fel a figyelmemet a m´odszer ir´ant. A kutat´ asom a k¨ ovetkez˝ o l´ep´esekb˝ol ´allt: el˝osz¨or ´attanulm´anyoztam a SAT probl´em´ahoz ´es a best-first searchh¨ oz kapcsol´ od´ o elm´eleti alapokat. Ezut´an megismerkedtem a MiniSattal, egy nagyon sikeres SAT-solverrel [7]. Siker´enek az oka t¨obbek k¨oz¨ott ´atl´athat´os´ag´aban ´es b˝ov´ıthet˝os´eg´eben rejlik. Ezut´ an kital´ altam, hogyan lehetne ebbe be´ep´ıteni a BFS algoritmust, majd kieg´esz´ıtettem a MiniSat forr´ ask´ odj´ at ennek megfelel˝oen. Az algoritmus tesztel´es´enek megk¨onny´ıt´es´ehez implement´ altam azt a BCAT keretrendszerbe, ami egy algoritmusok c´elir´anyos tesztel´es´ere szolg´al´o szoftvercsomag [6]. Az utols´ o l´ep´es a tesztel´es ´es az eredm´enyek ´ert´ekel´ese volt.
1.2.
SAT gyakorlati alkalmaz´ asai
A SAT-probl´ema nagyon fontos szerepet t¨olt be a m´ern¨oki gyakorlatban. T¨obbf´ele tervez´esi ´es tesztel´esi feladatban haszn´ alnak SAT-solvereket, valamint sz´amtalan matematikai ´es informatikai k´erd´es fogalmazhat´ o meg SAT-probl´emak´ent [15]. Ezek k¨oz¨ ul mutatok be n´eh´anyat.
1.2.1.
Elektronik´ aban
A kombin´ aci´ os ekvivalencia ellen˝ orz´es´en´el (combinational equivalence checking) azt ellen˝orizz¨ uk, hogy k´et kombin´ aci´ os h´ al´ ozat azonosan m˝ uk¨odik-e. A gyakorlatban ez p´eld´aul akkor fordulhat el˝ o, hogyha van egy hardver¨ unk, amit m´ar tesztelt¨ unk, ´es t¨ok´eletesen m˝ uk¨odik, de valamilyen okb´ ol apr´ obb m´ odos´ıt´ asokat kell rajta v´egrehajtanunk. A m˝ uk¨od´esen nem szeretn´enk v´altoztatni, ez´ert osszevetj¨ ¨ uk azt az eredeti v´ altozat´eval, mivel arr´ol tudjuk, hogy a k´ıv´ant kimenetet ´all´ıtja el˝o. A megold´ ast u ´gy kapjuk, hogy az ¨osszes lehets´eges bemenetre ¨osszehasonl´ıtjuk a h´al´ozatok kimenet´et. Ha minden egyes alkalommal ugyanazt az eredm´enyt adj´ak, akkor ekvivalensek, ha viszont l´etezik olyan input, hogy az outputok k¨ ul¨onb¨oz˝oek, akkor nem azonos a m˝ uk¨od´es. Azt, hogy az outputok egyenl˝ oek-e, legk¨onnyebben egy kiz´ar´o vagy (XOR) kapcsolattal tudjuk jellemezni. Legyen a k´et h´ al´ ozatot le´ır´o f¨ uggv´eny f illetve F. Ha a k´et h´al´ozat nem ekvivalens, legal´ abb egy x inputra igaz a k¨ ovetkez˝o formula: f (x) ⊕ F (x) = 1 A logikai ´ aramk¨ or¨ ok konjunkt´ıv norm´alform´av´a val´o konvert´al´asa ismert [3], ezt alkalmazva a fenti formul´ ara egy SAT-probl´em´ aval tal´aljuk szemben magunkat. Az integr´ alt ´ aramk¨ or¨ okben k¨ ul¨onb¨oz˝o hib´ak l´ephetnek fel, amelyek kisz˝ ur´ese nagyon fontos. Erre a leggyakrabban haszn´ alt m´ odszer az automatikus tesztminta-gener´al´as (automatic test-pattern
7
Bart´ ok D´ avid
SAT-solverek gyors´ıt´asa best-first search algoritmussal
generation - ATPG). Az ´ aramk¨ orben tal´alhat´o hib´akat a stuck-at modell seg´ıts´eg´evel k´epzelhetj¨ uk el: a hardverben egy ¨ osszek¨ ottet´es beragadt” valamilyen logikai ´allapotba (0 vagy 1). Az ATPG ” olyan inputot gener´ al, amivel egy´ertelm˝ uen kider´ıthet˝o, hogy egy felt´etelezett hiba jelen van-e a h´ al´ ozatban. Ez a probl´ema ´ertelmezhet˝ o egy ekvivalencia-ellen˝orz´esk´ent is, ahol a k´et ¨osszehasonl´ıtand´ o h´ al´ ozat a j´ ol ´es a rosszul m˝ uk¨ od˝ o v´altozatok. Amelyik bemenetre a k´et h´al´ozat k¨ ul¨onb¨oz˝o kimenetet ad, az alkalmazhat´ o a hiba tesztel´es´ere. Ha nincsen ilyen bemenet, akkor a hiba ilyen m´ odon nem mutathat´ o ki. A gyakorlatban ezt a m´odszert m´eg k¨ ul¨onf´ele tr¨ ukk¨okkel gyors´ıtj´ak, pl. a hib´ asan m˝ uk¨ od˝ o h´ al´ ozatot nem ¨ onmag´ aban, hanem az eredetit˝ol val´o k¨ ul¨onbs´egeivel reprezent´alj´ak, azonban ez a SAT-probl´em´ av´ a konvert´ alhat´os´agot nem befoly´asolja. Egy rendszer ellen˝ orz´es´en´el nagyon fontos szempont, hogy az megfelel-e a specifik´aci´ onak. Erre szolg´ al a modellellen˝ orz´es (model checking), aminek a kombin´aci´os ekvivalencia ellen˝ orz´ese tulajdonk´eppen egy speci´ alis esete, hiszen abban az esetben a specifik´aci´o maga is egy h´al´ozat. A modellellen˝ orz´esn´el a specifik´ aci´ ot egy id˝o-logika seg´ıts´eg´evel adjuk meg, p´eld´aul a k¨ovetkez˝ok´eppen: A h˝ ut˝ oben a l´ ampa nem kapcsol fel, am´ıg az ajt´o z´arva van. NOT lampa bekapcsol UNTIL ajto zarva Ezt a specifik´ aci´ ot hasonl´ıtjuk ¨ossze az ´allapotg´epk´ent megadott implement´aci´onkkal. Gyakran defini´ alunk egy ellen˝ orz˝ o f¨ uggv´enyt, amelynek az ´allapotg´ep minden ´allapot´aban igaznak kell lennie. Korl´ atozott modellellen˝ orz´esnek (bounded model checking) h´ıvjuk azt, amikor azt vizsg´ aljuk, hogy a kezd˝ o´ allapotb´ ol k l´ep´essz´ ammal milyen ´allapotokba lehet eljutni, ´es ezekben az ´allapotokban teljes¨ ul-e ez a f¨ uggv´eny. A tesztel´eshez c´elszer˝ u ezt 0-t´ol egy el´eg nagy k sz´amig v´egign´ezni. A modellellen˝ orz´es ezen v´ altozata konvert´alhat´o SAT-probl´em´av´a, ´es a gyakorlatban ez el´eg hat´ekonynak bizonyul [2].
1.2.2.
Genetik´ aban
A haplot´ıpusok az ember g´enk´eszlet´eben bizonyos genetikai mut´aci´okat t´arolnak, ´ıgy a meghat´ aroz´ asuk hasznos lehet k¨ ul¨ onb¨oz˝o betegs´egek kisz˝ ur´es´ere. A haplot´ıpusokat azonban direkt m´ odon nem tudjuk vizsg´ alni, ez´ert az ember genetikai fel´ep´ıt´es´eb˝ol (genot´ıpus) hat´arozzuk meg oket statisztikai adatok alapj´ ˝ an. A probl´ema matematikai le´ır´ asa [14]: Adottak a genot´ıpusok: n darab karakterl´anc a {0, 1, 2} sz´amokb´ol, amelyek mindegyike m karakterb˝ ol ´ all. A haplot´ıpusok szint´en m hossz´ u karakterl´ancok, de csak a {0, 1} sz´amokb´ol ´allhatnak. K´et haplot´ıpus (h1 , h2 ) megmagyar´ az egy g genot´ıpust, ha minden 0 < j ≤ m helyi´ert´ekre teljes¨ ul a k¨ ovetkez˝ o: Ha gj = 0, akkor h1j = h2j = 0 Ha gj = 1, akkor h1j = h2j = 1 Ha gj = 2, akkor h1j 6= h2j P´eld´ aul a 0011 genot´ıpust megmagyar´azz´ak a {0011 ´es 0011} haplot´ıpusok, a 0122 genot´ıpust a {0101 ´es 0110} vagy a {0100 ´es 0111} haplot´ıpusok. A feladatunk egy olyan minim´alis sz´amoss´ag´ u haplot´ıpus-halmazt tal´alni, amelyb˝ol minden genot´ıpushoz ki tudunk v´ alasztani 2 (nem felt´etlen¨ ul k¨ ul¨onb¨oz˝o) elemet u ´gy, hogy a kiv´alasztott elemek megmagyar´ azz´ ak a genot´ıpust. 8
Bart´ ok D´ avid
SAT-solverek gyors´ıt´asa best-first search algoritmussal
Az 1.1. t´ abl´ azatban egy 4 darab, 4 karakter hossz´ u genot´ıpusb´ol ´all´o p´eld´an szeml´eltetem a probl´em´ at. A t´ abl´ azat azt is tartalmazza, hogy az egyes genot´ıpus milyen haplot´ıpus-p´arokkal magyar´ azhat´ o meg. Genot´ıpus 0011 0101 0002 2012
Haplot´ıpus 1 0011 0101 0000 0010 0011
Haplot´ıpus 2 0011 0101 0001 1011 1010
1.1. t´abl´azat. Haplot´ıpus meghat´aroz´as A f´ elk¨ ov´ errel jel¨ olt haplot´ıpusokat mindenk´eppen bele kell v´alasztanunk a halmazba, mert az els˝ o h´ arom genot´ıpust csak vel¨ uk magyar´azhatjuk meg. ´Igy a 0011, amit m´ar a halmazba v´ alasztottunk, az 1010 -val egy¨ utt megmagyar´azza az ¨osszes genot´ıpust. Ezzel megtal´altuk a minim´ alis halmazt. Term´eszetesen ez egy nagyon egyszer˝ u probl´emap´eld´any, bonyolultabb probl´em´ ak eset´en viszont kifizet˝ od˝ o a SAT-probl´em´av´a konvert´al´as ´es az ´ıgy t¨ort´en˝o megold´as.
1.2.3.
Egy´ eb probl´ em´ ak
Nagyon sok feladat megfogalmazhat´o SAT-probl´emak´ent, ezek k¨oz¨ ul csak p´arat sorolok fel: • Gr´ afsz´ınez´es: Kisz´ınezhet˝ oek-e egy gr´af cs´ ucsai k darab sz´ınnel u ´gy, hogy a szomsz´edos cs´ ucsok k¨ oz¨ ott ne legyen azonos sz´ın˝ u? • Integer linear programming (ILP): Adott valah´any eg´esz´ert´ek˝ u v´altoz´o, ´es line´ aris egyenl˝ otlens´egek, amelyeknek teljes¨ ulnie kell. A feladat egy adott, a v´altoz´okb´ol ´all´o line´ aris c´elf¨ uggv´eny maximaliz´ al´ asa. • Klikk probl´ema: Egy gr´ afban maxim´alis m´eret˝ u teljes r´eszgr´af keres´ese. • Pr´ımt´enyez˝ okre bonthat´ os´ ag: Egy adott sz´amr´ol el kell d¨onten¨ unk, hogy pr´ım-e.
9
2. fejezet
Elm´ eleti h´ att´ er 2.1.
Keres´ esi fa
Keres´esi f´ anak egy olyan f´ at nevez¨ unk, amely rendelkezik egy kit¨ untetett cs´ uccsal (gy¨ok´er), amib˝ ol elindulunk a keres´es sor´ an, illetve a fa levelei lehets´eges megold´asokat reprezent´alnak, amelyek k¨ oz¨ ul tetsz˝ oleges mennyis´eg˝ u lehet val´ oban megold´as. Term´eszetesen az is el˝ofordulhat, hogy egyetlen megold´ as sem l´etezik. A bej´ ar´ as sor´an a kiindul´asi cs´ ucsb´ol a levelek fel´e haladunk, azonban ez t¨ obbf´elek´eppen is megval´ os´ıthat´ o az el´agaz´asok miatt. A keres´es sor´an teh´at minden cs´ ucsban d¨ ont´eseket kell hoznunk arr´ ol, hogy merre k´ıv´anunk tov´abbhaladni. Ezeket a d¨ont´esi lehet˝os´egeket jelentik a cs´ ucsokat ¨ osszek¨ ot˝ o ´elek. A fa cs´ ucsai a gy¨ ok´ert˝ ol val´ o t´ avols´ag szerint szinteken helyezkednek el: a fa tetej´eb˝ol indulunk a keres´esn´el, ´es a legals´ o szinten helyezkednek el a levelek. A fa szintjeit azzal azonos´ıtjuk, hogy h´ any d¨ ont´es ut´ an jutunk el r´ ajuk. Ez alapj´an a fa gy¨okere a 0. szintnek tekinthet˝o. A legegyszer˝ ubb algoritmus ilyen probl´em´ak megold´as´ara az, ha elindulunk lefel´e a f´ aban, v´eletlenszer˝ uen el´ agazva minden egyes szinten. Ha egy olyan cs´ ucshoz jutunk el, ami ellentmond´ asra vezet, akkor visszal´ep¨ unk a legutols´o olyan pontba, ahol m´eg egy´eb ir´anyba is el´agazhatunk, majd erre folytatjuk a keres´est. Ez a visszal´ep´eses keres´es (backtrack search), ami tulajdonk´eppen a m´elys´egi keres´eshez hasonl´ oan j´ arja be a f´at. (0)
(1)
(. . . )
(2) (3) ø
(4) ø
(5) (6) X
(. . . )
(. . . ) ø
(. . . ) ø
(. . . ) X
(. . . ) (. . . ) ø
(. . . ) ø
2.1. ´abra. Visszal´ep´eses keres´es A 2.1. ´ abr´ an l´ athat´ o az algoritmus m˝ uk¨od´ese. A sz´amok azt jelentik, hogy a backtrack milyen sorrendben l´ atogatja meg a fa egyes cs´ ucspontjait, az als´o szint alatti ´ath´ uzott k¨or azt, hogy az adott cs´ ucs nem megold´ as, a pipa pedig megold´ast jelez. Az els˝o konfliktus a 3. l´ep´es ut´an t¨ort´ent, ahonnan az algoritmus visszaugrott a 2. cs´ ucsra. A 4. l´ep´esben ism´et konfliktus t¨ort´ent, ez´ert az 1. cs´ ucsba t´ert¨ unk vissza. Itt v´eg¨ ul az 5. cs´ ucson kereszt¨ ul a 6. l´ep´essel megtal´altuk a megold´ ast. 10
Bart´ ok D´ avid
SAT-solverek gyors´ıt´asa best-first search algoritmussal
A . . . -tal jel¨ olt cs´ ucsokat az algoritmus nem l´atogatta meg. Mivel a backtrack az els˝o megold´ as megtal´ al´ asa ut´ an kil´ep, a m´ asik megold´ast nem fedezt¨ uk fel. A visszal´ep´eses keres´es egy egzakt algoritmus, ami azt jelenti, hogy garant´altan helyes v´ alaszt ad a probl´em´ ara. A v´eletlenszer˝ u el´agaz´asok miatt term´eszetesen ugyanazon a probl´em´ an is el˝ ofordulhatnak elt´er´esek a fut´ asid˝oben t¨obbsz¨ori futtat´as eset´en. Az algoritmus rekurz´ıv megval´ os´ıt´ as´ at az al´ abbi pszeudok´ od ´ırja le: 1 2 3 4 5 6 7 8 9 10 11 12 13 14
BTSearch(Problem P, Assignment A) { for(d=firstDecision; d<=lastDecision; d++) A=addDecision(A, d); if(NOT(contradiction(P, A)) if(solved(P, A)) return true; else if (BTSearch(P, A) == true) return true; else A=undoDecision(A, d); return false; } • Problem P: Az adott probl´ema. • Assignment A: Az eddig meglev˝o d¨ont´esek list´aja, a legels˝o f¨ ugg´enyh´ıv´askor ez u ¨res. • firstDecision, lastDecision: A d¨ont´eseket eg´esz sz´amokk´ent elk´epzelve az els˝o ´es utols´ o lehets´eges ´ert´ekek. • addDecision(): Egy adott d¨ ont´est hozz´aad az aktu´alis d¨ont´esek list´aj´ahoz. • contradiction(): Igaz ´ert´eket ad vissza, ha tal´alt ellentmond´ast az adott d¨ont´esi lista alapj´ an. • solved(): Igaz ´ert´eket ad vissza, ha az adott d¨ont´esek megold´ast adnak a probl´em´ara. • undoDecision(): Visszavonja a d¨ont´esi lista legutols´o d¨ont´es´et, azaz egy szinttel feljebb ker¨ ul¨ unk a keres´esi f´ aban.
2.2.
A best-first search
A best-first search a visszal´ep´eses keres´essel ellent´etben nem a m´elys´egi keres´esre ´ep¨ ul, hanem mindig a feladat szempontj´ ab´ ol leg´ıg´eretesebbnek t˝ un˝o csom´opontot fejti ki. Erre egy ki´ert´ekel˝o heurisztikus f¨ uggv´enyt haszn´ al, ami a csom´ opontokhoz egy sz´amot rendel azok tulajdons´agai alapj´an. Ha ez a f¨ uggv´eny azt pr´ ob´ alja k¨ ozel´ıteni, hogy a keres´esi f´aban mennyire vagyunk k¨ozel a megold´ashoz, moh´ o best-first search algoritmusr´ ol besz´el¨ unk. A 2.2. ´ abr´ an azt l´ athatjuk, amint az algoritmus az els˝o l´ep´es ut´an u ´gy ´ıt´eli meg, hogy a lentebb l´ep´es helyett kedvez˝ obb, ha ink´ abb a m´asik azonos szinten lev˝o d¨ont´est fejti ki. Ezut´an azonban m´egis ´ıg´eretesebbnek t˝ unik az els˝ o d¨ont´esb˝ol tov´abbl´ep´es (3. cs´ ucs). A k¨ovetkez˝o, 4. l´ep´esben meg is tal´ aljuk a megold´ ast. Ezen az egyszer˝ u p´eld´ an is l´ athatjuk az algoritmus f˝obb jellegzetess´eg´et: ahelyett, hogy csak ellentmond´ as eset´en l´epne vissza, minden egyes d¨ont´es ut´an m´erlegeli, hogy hol ´erdemes folytatni a keres´est. A 2. l´ep´es term´eszetesen nem a legjobb d¨ont´es, hiszen egyb˝ol is megtal´alhattuk volna a megold´ ast. Annak az oka, hogy m´egis itt folytattuk a keres´est az, hogy a csom´opontokat ki´ert´ekel˝ o 11
Bart´ ok D´ avid
SAT-solverek gyors´ıt´asa best-first search algoritmussal
(0)
(1)
(2) (3)
(. . . ) (. . . ) ø
(. . . ) ø
(4) X
(. . . )
(. . . )
(. . . ) ø
(. . . ) ø
(. . . ) X
(. . . ) ø
(. . . ) ø
2.2. ´abra. Best-first search f¨ uggv´eny csup´ an megbecs¨ ulni tudja a megold´as k¨ozels´eg´et. A visszal´ep´eses keres´eshez hasonl´ oan ez az algoritmus is egzakt, a ki´ert´ekel˝o f¨ uggv´eny csak az algoritmus fut´asidej´et befoly´asolja, de a bej´ ar´ as ugyan´ ugy mindig j´ o eredm´enyt fog adni. A best-first search a gyakorlatban u ´gy is megval´os´ıthat´o, hogy a keres´esi f´at diszjunkt r´eszekre osztjuk, ´es ezek mindegyik´eben l´etrehozunk egy-egy solverp´eld´anyt. A keres´es sor´an ezek k¨ oz¨ ott v´ altogatunk az alapj´ an, hogy melyik t˝ unik a legsikeresebbnek. Ebben a v´altozatban m´ar nem felt´etlen¨ ul m´erlegelj¨ uk minden l´ep´es ut´an, hogy melyik solvert futtassuk, hanem csak bizonyos id˝ ok¨ oz¨ onk´ent ker¨ ul sor a ki´ert´ekel˝o f¨ uggv´eny haszn´alat´ara. ´Igy jelent˝osen cs¨okkenthet˝o a heurisztik´ aval kapcsolatos j´ arul´ekos er˝ oforr´ask¨olts´eg (overhead). (. . . )
(. . . )
1. solver
(. . . )
2. solver
3. solver
4. solver
2.3. ´abra. Solverp´eld´anyok a f´aban A 2.3. ´ abr´ an l´ athat´ o ennek az alap¨otlete: u ´gy hozhatunk l´etre a legegyszer˝ ubben diszjunkt r´eszeket a f´ aban, hogy a solverek kiindul´opontj´anak egy, az eredetihez k´epest lentebbi szintet v´ alasztunk. Az ezen a szinten lev˝o minden egyes cs´ ucsb´ol el kell ilyenkor ind´ıtanunk egy solvert, k¨ ul¨ onben nem fedj¨ uk le az eg´esz keres´esi teret. A fenti p´eld´aban n´egy r´eszre osztottuk a f´at, ennek megfelel˝ oen a 2. szintr˝ ol kezdj¨ uk a keres´est. Az al´abbi pszeudok´od a best-first search megval´os´ıt´ as´ at ´ırja le:
12
Bart´ ok D´ avid
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
SAT-solverek gyors´ıt´asa best-first search algoritmussal
BFSSearch(List L) { Solver currentSolver=firstOfList(L); while(true) currentSolver.assignment=addDecision(currentSolver); markNode(currentSolver.assignment); if(solved(currentSolver)) return true; if(contradiction(currentSolver)) if(exhausted(currentSolver)) removeFromList(L, currentSolver) if(isEmpty(L)) return false; else undoDecision(currentSolver); if(”limit for running the current solver is reached” OR ”current solver was exhausted”) currentSolver.heuristic=setHeuristic(currentSolver); currentSolver=findMaxHeuristic(L);
20 21
} • List L: A keres´esre haszn´ alt solverek list´aja. • Solver currentSolver: Az ´eppen futtatott solver, tagv´altoz´oi: assignment: Aktu´ alis d¨ ont´esi lista. heuristic: Mennyire j´ ar k¨ozel a solver a megold´ashoz. • firstOfList(): Visszaadja egy lista els˝o elem´et. • addDecision(): Megvizsg´ alja a probl´em´at ´es a d¨ont´esek meglev˝o list´aj´at, majd egy u ´j d¨ ont´est hoz l´etre. • markNode(): R¨ ogz´ıti, hogy az adott cs´ ucs´at megl´atogattuk a f´anak. • exhausted(): Igaz ´ert´eket ad vissza, ha a solver m´ar teljes eg´esz´eben bej´arta a keres´esi t´er neki sz´ ant r´esz´et. • removeFromList(): Elt´ avol´ıtja a solvert a list´ab´ol. • isEmpty(): Igaz ´ert´eket ad vissza, ha u ¨res a lista, ez azt jelenti, hogy a probl´ema megoldhatatlan. • setHeuristic(): Ki´ert´ekel˝ o f¨ uggv´eny, amely az adott probl´ema ´es a d¨ont´esek alapj´an pr´ ob´ alja meghat´ arozni, hogy mennyire vagyunk k¨ozel a megold´ashoz. • findMaxHeuristic(): A solverek list´aj´ab´ol kiv´alasztja azt, amelyiket legk¨ozelebb ´erdemes futtatnunk.
13
Bart´ ok D´ avid
2.3. 2.3.1.
SAT-solverek gyors´ıt´asa best-first search algoritmussal
SAT-probl´ ema ´ Attekint´ es
Adott egy logikai formula (F) konjunkt´ıv norm´alforma alakban. A probl´ema a k¨ovetkez˝o: tudunk-e a v´ altoz´ oknak u ´gy ´ert´eket adni, hogy F igaz lesz? A probl´ema meg´ert´es´ehez sz¨ uks´eg¨ unk van n´eh´any defin´ıci´ora [8]: Liter´ al: Egy v´ altoz´ o vagy annak neg´altja. Kl´ oz: Liter´ alok diszjunkci´ oja. Konjunkt´ıv norm´ alforma: Kl´ ozok konjunkci´oja. Interpret´ aci´ o: Egy formula minden egyes v´altoz´oj´ahoz ´ert´eket rendel¨ unk. Egy n v´altoz´ob´ ol ´ all´ o formul´ anak pontosan 2n darab k¨ ul¨onb¨oz˝o interpret´aci´oja van. A formula interpret´ aci´ oit ´ abr´azolhatjuk szemantikus fa form´aj´aban (2.4. ´abra). Itt teh´ at l´ athatjuk, hogyan is n´ez ki a SAT-probl´ema eset´eben a keres´esi fa: az el´agaz´asok az egyes v´altoz´ oknak adott ´ert´ekek alapj´ an j¨ onnek l´etre. Kiindul´as
x0 =0 x1 =1
x1 =0 x2 =0
x0 =1
x2 =1
x2 =0
x1 =1
x1 =0
x2 =1
x2 =0
x2 =1
x2 =0
x2 =1
2.4. ´abra. Szemantikus fa Ezt a keres´esi f´ at kell bej´ arnunk a solver seg´ıts´eg´evel. Ha tal´alunk egy olyan levelet, ahol az adott interpret´ aci´ ot ki´ert´ekelve a formula igaz lesz, megtal´altuk a megold´ast (satisfiable). A solverek hat´ekonys´ ag´ at mutatja az, hogy mennyire hamar tal´alj´ak meg a fa ezen pontj´at. Ha a levelek k¨ oz¨ ul egyik sem ad megold´ast, akkor a probl´ema megoldhatatlan (unsatisfiable). Ennek ellen˝ orz´es´ehez legrosszabb esetben mind a 2n levelet be kell j´arnunk, ami exponenci´ alisan sok l´ep´est jelent. Legt¨ obbsz¨ or azonban nincsen sz¨ uks´eg az ¨osszes l´ep´es v´egrehajt´as´ara: ha m´ ar a fa legals´ o szintje el˝ ott ellentmond´asra akadunk, azzal eg´esz ter¨ uleteket z´arhatunk ki a keres´esb˝ ol. Ennek magyar´ azata, hogy ha m´ ar n´eh´any v´altoz´o adott ´ert´ekei ellentmond´asra vezetnek, ez nem oldhat´ o fel u ´jabb v´ altoz´ oknak t¨ ort´en˝o ´ert´ekad´assal. (0)
(1) (2) (3) ø
(4) ø
(6) (5) (. . . ) ø
(7)
(. . . ) ø
(8) ø
(9) ø
(10) (11) ø
(12) ø
2.5. ´ abra. Egy megoldhatatlan probl´ema keres´esi f´aja
14
Bart´ ok D´ avid
SAT-solverek gyors´ıt´asa best-first search algoritmussal
Az 2.5. ´ abr´ an p´eld´ aul m´ ar az 5. l´ep´esben ´eszrevett¨ uk a keres´esn´el, hogy a cs´ ucs alatt lev˝o levelek k¨ oz¨ ul egyik sem megold´ as.
2.3.2.
DPLL
A SAT-probl´ema kapcs´ an a kl´ ozok le´ır´as´ara a k¨ovetkez˝o defin´ıci´okat haszn´aljuk: Satisfied kl´ oz: Olyan kl´ oz, amelynek legal´abb egy liter´alja igaz ´ert´eket kapott. Unsatisfied kl´ oz: Olyan kl´ oz, amelynek m´ar ¨osszes liter´alja hamis ´ert´eket kapott. Unit kl´ oz: Olyan kl´ oz, amelyben m´ar egy kiv´etel´evel minden liter´alnak van ´ert´eke, de ezek mindegyike hamis. Unresolved kl´ oz: Amikor a kl´ ozra a fenti ´allapotok k¨oz¨ ul egyik sem teljes¨ ul. Az egyszer˝ ubb fel´ep´ıt´es˝ u SAT-solverek a DPLL (Davis–Putnam–Logemann–Loveland) [4] algoritmusra ´ep¨ ulnek. Ez tulajdonk´eppen a fentebb r´eszletezett backtrack egy kieg´esz´ıtett v´altozata. A legfontosabb kieg´esz´ıt´es a unit propagation: minden ´ert´ekad´as ut´an ´eszleli a unit kl´ozokat, ´es a k¨ ovetkez˝ o ´ert´ekad´ as ez alapj´ an t¨ ort´enik. Ennek oka, hogy a unit kl´oz utols´o liter´alj´anak igaz ´ert´eket kell adnunk, hogy a kl´ oz satisfied legyen. N´eh´ any DPLL algoritmus tartalmazza az u ´n. pure literal rule-t is: Ha egy v´altoz´o vagy csak pon´ altan, vagy csak neg´ altan szerepel az eg´esz kifejez´esben, a keres´es legelej´en megkapja els˝o esetben az igaz, m´ asodik esetben a hamis ´ert´eket, hiszen ´ıgy az ¨osszes ezt tartalmaz´o kl´oz satisfied lesz. Ezeket a kl´ ozokat a k´es˝ obbi keres´es sor´an nem kell figyelembe venni. A DPLL legegyszer˝ ubb megval´ os´ıt´ asa a backtrackhez hasonl´oan rekurz´ıvan t¨ort´enik, ezt szeml´elteti a k¨ovetkez˝o pszeudok´ od is: 1 2 3 4 5
Solve(Problem P) { A=assignPureLiterals(P); return DPLL(P, A); }
6 7 8 9 10 11 12 13 14 15 16 17 18
DPLL(Problem P, Assignment A) { unitPropagate(P, A); if(contradiction(P,A)) return false; if(allVariablesAssigned(P,A)) return true; variable V=chooseVariable(P, A); newAssignment1=addDecision(A, V); newAssignment2=addDecision(A, NOT(V)); return( DPLL(P, newAssignment1) OR DPLL(P, newAssigment2)); } • unitPropagate(): A unit kl´ ozokban fennmarad´o v´altoz´oknak ´ert´eket ad. Ha ennek sor´ an u ´j unit kl´ oz keletkezik, akkor a folyamat tov´abb folytat´odik. • assignPureLiterals(): A csak egyf´ele polarit´assal szerepl˝o v´altoz´oknak r¨ogt¨on ´ert´eket ad. • allVariablesAssigned(): Ellen˝orzi, hogy minden v´altoz´onak van-e m´ar ´ert´eke. Mivel a konfliktusokat az ez el˝ otti f¨ uggv´enyh´ıv´assal m´ar kisz˝ urt¨ uk, a visszaadott igaz ´ert´ek egy j´o megold´ ast jelez.
15
Bart´ ok D´ avid
SAT-solverek gyors´ıt´asa best-first search algoritmussal
• chooseVariable(): A probl´ema ´es az eddigi d¨ont´esek alapj´an kiv´alasztja a k¨ovetkez˝o v´altoz´ ot, aminek ´ert´eket adunk.
2.3.3.
CDCL
A CDCL (conflict-driven clause learning) a modern solverek ´altal leggyakrabban haszn´alt algoritmus. Az el˝ oz˝ o fejezetben ismertetett DPLL-re ´ep¨ ul, de azt jelent˝os m´odos´ıt´asokkal haszn´alja. A legfontosabb k¨ ul¨ onbs´eg, hogy minden konfliktus ut´an egy tanult kl´oz ker¨ ul hozz´aad´asra a formul´ahoz. A tanult kl´ oz a konfliktushoz vezet˝ o ´ert´ekad´asok, vagy ezek egy r´esz´enek neg´altj´at tartalmazza. Ennek a c´elja az, hogy elker¨ ulj¨ uk ugyanazon konfliktus k´etszeri el˝ofordul´as´at. A keres´es sor´ an az ´ert´ekad´ asokhoz mindig kapcsolunk egy d¨ont´esi szintet. Ez megadja, hogy a keres´es alatt hanyadik d¨ ont´essel kapott ´ert´eket a v´altoz´o. A unit propagation sor´an ´ert´eket kapott v´ altoz´ ok nem rendelkeznek saj´ at d¨ont´esi szinttel, hanem a legut´obbi d¨ont´es szintj´et kapj´ak meg. xi = v@d xi : az ´ert´eket kap´ o v´ altoz´ o v: a kapott ´ert´ek (1: igaz, 0: hamis) d: az aktu´ alis d¨ ont´esi szint L´ assuk az el˝ obb bevezetett jel¨ol´esek haszn´alat´at ´es a kl´oztanul´as megval´os´ıt´as´at egy konkr´et p´eld´ an kereszt¨ ul: ω1 = (x1 ∨ x2 ∨ ¬x7 ) ω2 = (¬x3 ∨ x4 ∨ x7 ) ω3 = (¬x5 ∨ ¬x6 ) ω4 = (¬x4 ∨ x5 ) ω5 = (¬x3 ∨ ¬x4 ∨ x6 ) Az eddigi d¨ ont´esek: x1 = 0@1 x3 = 1@2 A jelenlegi d¨ ont´es: x2 = 0@3 Ezek alapj´ an fel´ep´ıtj¨ uk az implik´aci´os gr´afot (2.6. ´abra), melynek cs´ ucsai a meglev˝o ´ert´ekad´ asok. Az ´elek az alapj´ an j¨ onnek l´etre, hogy melyik ´ert´ekad´asb´ol mi k¨ovetkezik; feliratuk azt jelzi, hogy melyik unit kl´ oz felelt a v´egpontn´ al szerepl˝o ´ert´ekad´as´ert. P´eld´aul x7 az´ert kapott 0 ´ert´eket, mert a ω1 kl´ ozban szerepl˝ o x1 ´es x2 liter´ alok 0 ´ert´ek´eb˝ol ad´od´oan a kl´oz unitt´a v´alt.
16
Bart´ ok D´ avid
SAT-solverek gyors´ıt´asa best-first search algoritmussal
x6 = 1@3 ω5
ω5
x3 = 1@2 ω2
x1 = 0@1
x4 = 1@3 ω2
ω1
ω4
x7 = 0@3
x5 = 1@3
ω1
ω3
x2 = 0@3
x6 = 0@3 2.6. ´abra. Az implik´aci´os gr´af
A gr´ afban felfedezhet˝ o a konfliktus: Az ´ert´ekad´asokb´ol k¨ovetkezik, hogy x6 -nak egyszerre kellene 0 ´es 1 ´ert´ekkel rendelkeznie. Ez nyilv´anval´oan nem lehets´eges, ez´ert az eddig sz¨ uletett d¨ont´esek mellett a probl´ema megoldhatatlan. Teh´at a h´arom v´altoz´o k¨oz¨ ul legal´abb az egyiknek a p´eld´ aban szerepl˝ ot˝ ol elt´er˝ o ´ert´eket kell kapnia, hogy ne jussunk ellentmond´asra. Ez alapj´an a k¨ovetkez˝o kl´ ozt tanulhatjuk meg: ωl = (x1 ∨ x2 ∨ ¬x3 ). A tanult kl´ oz teh´ at megakad´ alyozza azt, hogy k´etszer ugyanaz a konfliktus forduljon el˝ o. Ez lehet˝ ov´e teszi, hogy a konfliktus ut´an ne k¨ozvetlen¨ ul a legutols´o d¨ont´es el´e l´epj¨ unk vissza, hanem egy feljebb l´ev˝ o d¨ ont´esi szintre (non-chronological backtrack). A CDCL a kl´ oztanul´ ast a val´os´agban nem felt´etlen¨ ul az itt bemutatt m´odszer szerint v´egzi. L´eteznek kifinomultabb megold´ asok [4], amellyel a folyamatot optimaliz´alni lehet, azonban ezek ismertet´es´et˝ ol most eltekintek, hiszen a best-first search alkalmaz´as´ahoz ezekre nincsen sz¨ uks´eg. Fontos megeml´ıteni, hogy a CDCL algoritmusban nem t´aroljuk explicit m´odon az ¨osszes kl´ ozban szerepl˝ o mindegyik liter´ al ´ert´ek´et. Ennek (leegyszer˝ us´ıtve) az az oka, hogy a kl´ozban mindig csak k´et liter´ al ´ert´ek´et figyelj¨ uk, ´es ezek alapj´an k¨ovetkeztet¨ unk a kl´oz ´allapot´ara. Ez az u ´n. watched literal scheme [17]. Ez az adatstrukt´ ura jelent˝osen gyors´ıtja az algoritmust, ugyanakkor, mint k´es˝obb l´ atni fogjuk, sz´ amunkra korl´ atoz´ ast jelent a keres´es sor´an el´erhet˝o inform´aci´ok tekintet´eben. A CDCL algoritmusban el˝ oszeretettel alkalmaznak restartokat is, ak´ar a tanult kl´ozok megtart´ asa mellett. Minden egyes u ´jraind´ıt´ asn´al n˝o a limit, amit a solvernek a probl´ema megold´as´ara adunk, hiszen egy´ebk´ent el˝ o´ allhatna egy olyan helyzet, hogy soha nem jutunk eredm´enyre. Nagy m´eret˝ u probl´em´ ak eset´en a tanult kl´ ozok sz´ama hatalmas lehet, ilyenkor c´elszer˝ u a mem´oriaig´enyre val´ o tekintettel alkalmank´ent t¨ or¨ oln¨ unk ezekb˝ol. Az algoritmus f˝obb l´ep´eseit az al´abbi iterat´ıv k´odr´eszlet szeml´elteti:
17
Bart´ ok D´ avid
1 2 3 4 5 6 7 8 9 10 11 12 13
SAT-solverek gyors´ıt´asa best-first search algoritmussal
CDCL(Problem P) { Assignment A=empty; while(true) if (unitPropagation(P, A) == CONFLICT) newDecisionLevel=analyzeConflict(P, A) if(newDecisionLevel<0) return false; else backtrack(P, A, newDecisionLevel); if (allVariablesAssigned == true) return true; (Variable, Polarity)=branchingHeuristic(P, A); addDecision(A, Variable, Polarity);
14 15
} • unitPropagation(): Itt a konfliktusok kisz˝ ur´es´ere is szolg´al, ha egy v´altoz´o k´et unit kl´oz utols´ o elemek´ent is szerepel, m´eghozz´a k¨ ul¨onb¨oz˝o polarit´assal, akkor ellentmond´asra jutottunk. • analyzeConflict(): Az adott konfliktust elemezve visszaad egy d¨ont´esi szintet, ahova optim´ alis backtrackelni, valamint hozz´aad egy tanult kl´ozt a probl´em´ahoz. Ha a visszaadott d¨ ont´esi szint kisebb, mint 0, a probl´ema unsatisfiable, hiszen a kiindul´o cs´ ucsn´al feljebb nem tudunk visszal´epni a keres´esben. • backtrack(): Visszat´er a keres´esi fa egy adott szintj´ere, visszavonva az az ut´ani d¨ont´eseket. • branchingHeuristic(): Megadja, hogy mely v´altoz´onak ´es milyen ´ert´eket c´elszer˝ u adni.
2.3.4.
Kitekint´ es: Parallel SAT
A t¨ obbmagos processzorok elterjed´es´evel felmer¨ ult az ¨otlet, hogy a SAT-probl´em´ak megold´asa u ´gy is gyors´ıthat´ o, ha p´ arhuzamosan t¨obb solvert is futtatunk. Erre k´et f˝obb megold´as l´etezik [16]: Az els˝ o m´ odszer a keres´esi t´er sz´etoszt´asa: a m´odszer l´enyege, hogy a keres´esi teret diszjunkt r´eszekre osztjuk, ´es ezeken futtatjuk a solvereket. Ez a guiding paths (vezet˝o utak) m´ odszer seg´ıts´eg´evel t¨ ort´enik: itt a v´ altoz´ oknak nem csak az adott ´ert´ek´et mentj¨ uk el, hanem azt is, hogy mindk´et lehets´eges ´ert´ek¨ uk ki lett-e pr´ob´alva a keres´es sor´an. Minden egyes olyan v´altoz´o, amely m´eg csak egyf´ele ´ert´ekkel rendelkezett a keres´es sor´an, alkalmas arra, hogy a meglev˝o keres´esi teret k´et r´eszre osszuk. Ezeket a v´ altoz´ okat nyitottnak nevezz¨ uk. Kiindul´as
Kiindul´ as x0 =0
x0 =1
1. solver
2. solver
x0 =0 ...
x0 =1 UNSAT
x5 =0 ...
x5 =1 2. solver
1. solver 2.7. ´abra. A vezet˝o utak
18
Bart´ ok D´ avid
SAT-solverek gyors´ıt´asa best-first search algoritmussal
A solverek sz´ ama legt¨ obbsz¨ or adott, a 2.7. ´abr´an p´eld´aul 2. Amikor az egyik solver befejezte a saj´ at ter¨ ulet´en a keres´est (teh´ at unsatisfiable ´ert´ekkel t´ert vissza), akkor a keres´esi f´aban legfeljebb tal´ alhat´ o nyitott v´ altoz´ on´ al el´ agazik a keres´es, ´es az eddig bej´aratlan ter¨ uletet megkapja az ´eppen t´etlen solver. A tanult kl´ ozok minden konfliktus ut´an ´atad´odnak a t¨obbi solvernek, azonban a nagy mem´ oriaig´eny miatt ez csak korl´ atozott sz´amban lehets´eges. A m´ asik m´ odszer a portf´ oli´ ok haszn´alata. Itt u ´gy haszn´aljuk ki a p´arhuzamos´ıt´as adta lehet˝ os´egeket, hogy egyszerre futtatunk t¨obb solvert a probl´em´an, de k¨ ul¨onb¨oz˝o param´eterekkel. Elt´er˝ oek lehetnek t¨ obbek k¨ oz¨ ott az u ´jraind´ıt´as gyakoris´ag´aban, a kl´oztanul´as m´odszer´eben, vagy az ´ert´ekad´ asi heurisztik´ aban. Ezek a solverek r´eszben megosztj´ak egym´assal a tanult kl´ozokat, ´ıgy seg´ıtve egym´ as munk´ aj´ at. Ez elk´epzelhet˝o u ´n. master-slave fel´ep´ıt´esben is. A masterek v´egzik a t´enyleges keres´est, ´es mindegyiknek van egy saj´at slave-je, amik megkapj´ak a mastert˝ol a konfliktusok list´ aj´ at, ´es kifejezetten csak azokon a r´eszeken keresnek, amelyek k¨ozel´eben a masternek konfliktusa volt. A master ´es a hozz´a tartoz´o slave csak egym´assal osztj´ak meg a tanult kl´ozokat, ´es mivel hasonl´ o ter¨ uletet j´ arnak be, ´ıgy ezek egym´as sz´am´ara relev´ansabbak, mint v´eletlenszer˝ u bej´ ar´ asok eset´en [11]. Ezek az eredm´enyek sz´ amomra is fontosak voltak a munk´am sor´an, annak ellen´ere, hogy nem alkalmazok direkt m´ odon p´ arhuzamos´ıt´ast. A fenti m´odszerek k¨oz¨ ul ´en is alkalmazom a keres´esi t´er sz´etoszt´ as´ at, hiszen ez t¨ obb solver l´etrehoz´as´an´al l´enyeges k´erd´es. Az ´en algoritmusom azonban nem futtat egyszerre t¨ obb solvert, hanem azt pr´ob´alja meghat´arozni, hogy az egyetlen fut´o solver ´eppen melyik legyen.
19
3. fejezet
Haszn´ alt programok 3.1.
MiniSat
A MiniSat [7] egy ny´ılt forr´ ask´ od´ u, C++-ban ´ırt SAT-solver, amelyet ketten k´esz´ıtettek el 2003ban. Az els˝ o v´ altozat programk´ odja csup´an 600 soros volt, m´egis tartalmazta a CDCL solverek osszes jellegzetess´eg´et. C´elir´ ¨ anyosan arra fejlesztett´ek ki, hogy seg´ıtse a szakter¨ uleten a kutat´ asokat ´es a fejleszt´eseket. Ebb˝ ol ad´ od´ oan j´ol dokument´alt, k¨onnyen ´atl´athat´o szerkezet˝ u ´es egyszer˝ uen m´ odos´ıthat´ o. Az u ´jabb verzi´ ok m´ar hosszabb k´oddal rendelkeznek, de a solver l´enyegi r´esze m´eg mindig egy kicsivel kevesebb, mint 1 000 sorb´ol ´all. A MiniSat 2005-ben a SAT versenyen 4 kateg´ ori´ aban ´ert el els˝ o helyet, nagy f¨ol´ennyel legy˝ozve versenyt´arsait. Sz´amos kutat´as eszk¨ozek´ent bizony´ıtott m´ ar, ez´ert esett az ´en v´alaszt´asom is r´a. A MiniSat eredetileg Linux alatti haszn´alatra k´esz¨ ult, de a futtat´asa Windows alatt is megoldhat´ o, azonban ehhez n´eh´ any Linux specifikus programr´esz elt´avol´ıt´asa sz¨ uks´eges. Ezek a programk´ od-r´eszletek n´elk¨ ul¨ ozhet˝ oek a solver m˝ uk¨od´es´ehez, hiszen csak CPU ´es mem´oria er˝oforr´ askorl´ atoz´ asokra szolg´ alnak. Innent˝ ol nincs m´ as teend˝ onk, mint futtatni a MiniSatot. A program parancssori argumentumok form´ aj´ aban kapja meg a bemeneti probl´em´at cnf form´atumban ´es a kimeneti txt f´ajlt, amibe a megold´ as ker¨ ul. Az argumentumok form´atuma a k¨ovetkez˝o: minisat.exe [bemeneti f´ ajl neve] [kimeneti f´ ajl neve] [esetleges opci´ ok] A MiniSat az objektumorient´ alt elveket k¨ovetve k´esz¨ ult, teh´at egy Solver nev˝ u oszt´aly szolg´ al a probl´em´ ak megold´ as´ ara. Ebben vannak elt´arolva a cnf f´ajlb´ol beolvasott adatok, ´es a keres´es elind´ıt´ asa is egy met´ odus megh´ıv´as´aval t¨ort´enik. Ez a tulajdons´ag a kutat´asom sor´an jelent˝ os szerepet j´ atszott, hiszen ´ıgy egyszer˝ uen lehet t¨obb solvert p´arhuzamosan l´etrehozni. A program t´ amogatja az u ´gynevezett assumption¨ok haszn´alat´at. Ez azt jeleneti, hogy megadhatjuk a solvernek, hogy n´eh´ any v´altoz´o adott ´ert´ek˝ u legyen v´egig a keres´es sor´an, az pedig ezen felt´etelek mellett pr´ ob´ al megold´ast tal´alni. Fontos megjegyezni, hogy ha a solver unsatisfiable eredm´enyre jut, az csup´ an azt jelenti, hogy az adott assumption¨ok mellett nem l´etezik megold´ as. Ez a funkci´ o a keres´esi t´er sz´etoszt´as´an´al fog fontos szerepet j´atszani.
3.1.1.
A cnf form´ atum
A SAT-probl´em´ ak t´ arol´ asa legt¨ obbsz¨or az el˝oz˝o fejezetben is eml´ıtett cnf form´atumban t¨ort´enik, melynek fel´ep´ıt´ese a k¨ ovetkez˝ o:
20
Bart´ ok D´ avid
SAT-solverek gyors´ıt´asa best-first search algoritmussal
c Minta p cnf 5 3 1 −5 0 2 3 −1 0 −4 1 2 0 A c-vel kezd˝ od˝ o sorok kommentk´ent tekintend˝ok, a f´ajl feldolgoz´asa k¨ozben l´enyegi jelent˝os´eg¨ uk nincs. Az els˝ o val´ oj´ aban feldolgozand´o sor tartalma mindig adott: p cnf [v´ altoz´ ok sz´ ama] [kl´ ozok sz´ ama] Ezut´ an k¨ ovetkeznek a kl´ ozok: a v´altoz´okat sz´amokkal jel¨olj¨ uk, 1-t˝ol n-ig, ahol a probl´ema n v´ altoz´ ot tartalmaz. A neg´ alt liter´alok negat´ıv el˝ojellel szerepelnek. A liter´alokat egy-egy sz´ ok¨ oz v´ alasztja el, a kl´ oz v´eg´et pedig egy 0 karakter jelzi, ´es ´altal´aban egy sorban egy kl´oz tal´alhat´ o. Ezek ismeret´eben a fenti minta f´ajl az al´abbi probl´em´at k´odolja: (x1 ∨ ¬x5 ) ∧ (x2 ∨ x3 ∨ ¬x1 ) ∧ (¬x4 ∨ x1 ∨ x2 )
3.2.
SAT-probl´ ema gener´ atorok
A solverek tesztel´es´ehez nagy mennyis´eg˝ u SAT-probl´em´ara van sz¨ uks´eg¨ unk, ezek el˝o´all´ıt´asa azonban nem egyszer˝ u feladat. Az interneten tal´ alhat´ o cnf f´ ajlok szinte mindegyike t´ ul k¨onny˝ u (tizedm´asodpercek alatt megoldhat´ o), vagy annyira neh´ez, hogy percekig tart´o fut´as ut´an sem jut eredm´enyre a solver. Ez´ert c´elszer˝ u SAT-probl´ema gener´ atort haszn´alni, amelyt˝ol alapvet˝o elv´ar´as, hogy tudja szab´alyozni a probl´em´ ak neh´ezs´eg´et. Ugyancsak fontos, hogy tegye lehet˝ov´e k¨ ul¨on megoldhat´o, illetve nem megoldhat´ o probl´em´ ak gener´ al´ as´ at. A SAT-probl´em´ ak gener´ al´ as´ ara a legegyszer˝ ubb m´odszer, ha adott sz´am´ u v´altoz´ ob´ ol v´eletlenszer˝ uen elkezd¨ unk kl´ ozokat gy´artani. Az ´ıgy keletkez˝o p´eld´anyokr´ol azonban nem tudjuk el˝ ore, hogy megoldhat´ oak lesznek-e. Ezt a megold´ast teh´at nem alkalmazhatjuk, ha csak megoldhat´ o probl´em´ akon szeretn´enk tesztelni. Egy m´ asik m´ odszer az, hogy el˝ore kital´alunk egy megold´ast, ´es a gener´al´asn´al csak azokat a kl´ ozokat tartjuk meg, amelyeket ez a megold´as igazz´a tesz. Az ´ıgy keletkez˝o probl´em´ak mindenk´eppen megoldhat´ oak lesznek, azonban a gyakorlat azt mutatja [1], hogy ezek a p´eld´ anyok egyszer˝ ubbnek bizonyulnak a hasonl´o m´eret˝ u, de v´eletlen gener´altakkal szemben. Az lsencode [1] egy kifejezetten megoldhat´o SAT-probl´em´ak gener´al´as´ara k´esz¨ ult, C++-ban ´ır´ odott szoftver. A m˝ uk¨ od´ese legegyszer˝ ubben latin n´egyzetek seg´ıts´eg´evel szeml´eltethet˝o [10].
1 2 3 4
2 4 1 3
3 1 4 2
4 3 2 1
3.1. ´abra. Egy latin n´egyzet Ezek olyan N ×N m´eret˝ u t´ abl´ azatok, amelyek N sz´ammal vannak felt¨oltve u ´gy, hogy ugyanabban a sorban vagy oszlopban nem szerepelhet t¨obbsz¨or ugyanaz a sz´am. N -et a latin n´egyzet rendj´enek nevezz¨ uk, teh´ at p´eld´ aul a 3.1. ´ abr´an szerepl˝o t´abl´azat rendje 4. Az lsencode el˝osz¨or egy teljesen kit¨ olt¨ ott n´egyzetet gener´ al, majd ebb˝ol kit¨or¨ol n´eh´any elemet, ´ıgy lyukakat k´epezve. A feladat a szab´ alyok szerint kit¨ olteni ezeket, ak´arcsak az ismert sudoku j´at´ekban. Az ´ıgy gener´alt probl´em´ aknak mindenk´eppen lesz legal´ abb egy megold´asa: az a teljes t´abl´azat, amit ´eppen mi gener´altunk. Ahogy
21
Bart´ ok D´ avid
SAT-solverek gyors´ıt´asa best-first search algoritmussal
az 1.2-es fejezetben eml´ıtettem, nagyon sok matematikai probl´ema ´ertelmezhet˝o SAT-k´ent, p´eld´ aul a latin n´egyzetek is. Az lsencode ennek megfelel˝oen a gener´alt probl´em´akat k´epes SAT-t´a konvert´ alni. Nyilv´ anval´ o, hogy a probl´ema neh´ezs´ege a n´egyzet rendj´enek f¨ uggv´eny´eben szigor´ uan monoton n˝ o. A lyukak ar´ any´ anak a neh´ezs´eggel val´o kapcsolata azonban eg´eszen m´ask´ent alakul.
Probléma nehézsége
30%
35%
Lyukak aránya
3.2. ´ abra. A probl´ema neh´ezs´eg´enek alakul´asa A 3.2. ´ abr´ an l´ athatjuk, hogy a probl´ema akkor a legnehezebb, hogyha a lyukak ar´anya a mez˝ okh¨ oz k´epest 30% ´es 35% k¨ oz¨ ott van. Ennek az az oka, hogy ha nagyon kev´es a lyuk, akkor a megold´ as el´eg egy´ertelm˝ u, ha pedig nagyon sok az u ¨res hely, akkor sokf´ele j´o kit¨olt´es lehets´eges. Viszonylag sz˝ uk az a ter¨ ulet, ahol az igaz´ an neh´ez probl´emap´eld´anyok helyezkednek el. A program haszn´ alata parancssori argumentumok seg´ıts´eg´evel t¨ort´enik a k¨ovetkez˝o m´ odon: el˝ osz¨ or gener´ alunk egy adott m´eret˝ u, kit¨olt¨ott n´egyzetet, majd egy m´asik paranccsal lyukakat tesz¨ unk bele. Az lsencode pls form´atumban t´arolja a probl´em´akat, azonban be´ep´ıtett konverter´evel atalak´ıthatjuk ezeket cnf f´ ´ ajlokk´ a. Az ´ altalam alkalmazott m´ asik gener´ator a ToughSat [18]. Ez egy online haszn´alhat´o, vagy ak´ ar le is t¨ olthet˝ o program, ami rengeteg opci´oval rendelkezik a gener´alt p´eld´anyok tulajdons´agait illet˝ oen. T´ amogatja a m´ ar kor´ abbiakban eml´ıtett pr´ımt´enyez˝okre bont´as probl´em´ak k´esz´ıt´es´et is, amelyeket a tesztel´eskor ´en is el˝ oszeretettel haszn´altam.
3.3.
BCAT
A BCAT (Budapest Complexity Analysis Toolkit) [6] egy algoritmusok tesztel´es´ere C++-ban kifejlesztett szoftvercsomag. 4 f˝ o¨ osszetev˝ob˝ol ´all: probl´em´ak (problems), algoritmusok (algorithms), elemz˝ ok (analyzers), ´es konverterek (converters). A probl´ema b´armilyen jelleg˝ u lehet, t´amogatott a f´ ajlb˝ ol t¨ ort´en˝ o beolvas´ as ´es a generel´as is. Az algoritmusok lehetnek teljes eg´esz´eben a BCAT-be implement´ alva mint f¨ uggv´enyek, de ak´ar egy k¨ uls˝o exe f´ajlk´ent is megh´ıvhat´ok. A BCAT r¨ ogz´ıti az algoritmusok fut´ asi idej´et, ´es az ´altaluk tal´alt megold´ast is. Az elemz˝ok szint´en probl´em´ akra haszn´ alhat´ oak, de nem megoldj´ ak azokat, hanem a probl´em´ak valamilyen tulajdons´ag´ar´ol gy˝ ujtenek inform´ aci´ ot. Ez az algoritmusok hat´ekonys´ag´anak vizsg´alat´an´al hasznos lehet az ¨osszef¨ ugg´esek keres´es´ehez. A konverterek egy probl´em´at egy m´asik fajta probl´em´av´a tudnak ´atalak´ıtani, p´eld´ aul ILP-t SAT-t´ a. Ez´ altal egy adott solvert t¨obbf´ele probl´em´ara is tudunk haszn´alni. A BCAT-nek egy konfigur´ aci´ os f´ajlon kereszt¨ ul mondhatjuk meg, hogy mely probl´em´akra mely algoritmust, elemz˝ ot vagy konvertert futtassa. Ez egy, a C++-hoz nagyon hasonl´o, le´ır´o nyelven
22
Bart´ ok D´ avid
SAT-solverek gyors´ıt´asa best-first search algoritmussal
t¨ ort´enik. Fontos, hogy a gener´ alt probl´em´ak ´es az algoritmusok param´eterezhet˝ok, ´es a BCAT a param´eterek ¨ osszes lehets´eges kombin´aci´oj´ara, az ¨osszes probl´em´ara lefuttatja az algoritmust. A tesztel´es eredm´eny´et a BCAT egy csv (comma-separated values) f´ajlban t´arolja, amelyb˝ol p´eld´ aul Excel seg´ıts´eg´evel k¨ onnyed´en k´esz´ıthet˝o grafikon. A BCAT sz´ amos be´ep´ıtett probl´emat´ıpust ´es algoritmust tartalmaz, de term´eszetesen saj´ at algoritmusok tesztel´es´ere is alkalmas. Ehhez nem kell m´ast tenn¨ unk, mint az UI (user interface) seg´ıts´eg´evel hozz´ aadni a k´ıv´ ant algoritmust. Az algoritmusunknak megfelel˝oen kell kezelnie a BCAT altal sz´ ´ am´ ara ´ atadott param´etereket (a konfigur´aci´os f´ajlb´ol), ´es meg kell oldanunk a BCAT-tel val´ o kommunik´ aci´ oj´ at is.
23
4. fejezet
Az algoritmus 4.1.
Logikai szint
Ebben a fejezetben ¨ osszefoglalom a best-first search seg´ıts´eg´evel gyors´ıtott SAT-solver m˝ uk¨od´es´et ´es el˝ onyeit.
4.1.1.
Az alap¨ otlet (. . . )
(1. solver)
(2. solver)
(1)
(. . . )
(2) (. . . ) ø
(4) (3) ø
(5) ø
(. . . ) ø
(. . . ) (. . . ) ø
(6)
(. . . ) ø
(. . . ) ø
(. . . )
(7)
(. . . ) (8) ø
(. . . ) ø
(. . . )
(9) X
(. . . ) ø
(. . . ) ø
(. . . ) (. . . ) ø
(. . . ) ø
(. . . ) (. . . ) ø
4.1. ´abra. Best-first search 2 solverrel Az algoritmus a k¨ ovetkez˝ ok´eppen gyors´ıthatja fel a SAT-solver m˝ uk¨od´es´et: felbontjuk a keres´esi f´ at valah´ any r´eszre, amelyek k¨ oz¨ ul mindegyikben egy k¨ ul¨on solver v´egzi a keres´est. A 4.1. ´ abr´ an ezt 2 solverrel szeml´eltetem: az egyik elind´ıtja a keres´est, majd k´et ellentmond´asra is akad (3. ´es 5. cs´ ucs). Ezut´ an a 2. solver fog futni, majd a 9. l´ep´esben megold´ast is tal´al. Nagyobb probl´em´ ak eset´en nyilv´ anval´ oan t¨ obbsz¨ or is v´althatunk solvert. Vegy¨ uk ´eszre, hogy a p´eld´ aban az els˝o solver r´eszf´aj´aban egy´altal´an nincsen megold´as. Ak´ar az is lehets´eges, hogy egy t¨ obb ezer v´ altoz´ob´ol ´all´o probl´ema eset´en ugyanez fordul el˝o: az els˝o ´ert´ekad´ as hat´ as´ ara egy olyan r´eszf´ aba ker¨ ul¨ unk, ahol nincsen megold´as, de a fa m´asik fel´eben ak´ar t¨ obb is tal´ alhat´ o. Ebben az esetben a fa egyik fel´et teljesen feleslegesen j´arjuk be, miel˝ott ´atker¨ ul¨ unk a
24
(. . . ) X
Bart´ ok D´ avid
SAT-solverek gyors´ıt´asa best-first search algoritmussal
´ m´ asik r´eszf´ ara. Eppen emiatt tal´ alt´ak ki a restartokat: a hossz´ u eredm´enytelen keres´es arra utal, hogy a solver egy ilyen r´eszf´ an tart´ozkodik. Hogyha az u ´jraind´ıt´as ut´an az els˝o ´ert´ekad´as m´ashogy t¨ ort´enik, val´ osz´ın˝ uleg egy kedvez˝ obb r´eszf´ara ker¨ ul¨ unk, ez´altal hamarabb tal´alunk megold´ast. Ugyanerre a probl´em´ ara ny´ ujt megold´ast a best-first search is, azonban t¨obb el˝onye is van. Egyr´eszt a solverv´ alt´ as ut´ an nem vesznek el az addigi eredm´enyek, teh´at ha p´eld´aul szeretn´enk visszat´erni az 1. r´eszf´ aba, akkor nem a legelej´er˝ol kell elkezden¨ unk a keres´est. Egy nagyobb probl´ema eset´en, ahol sokszor oda-vissza v´ altogatunk a solverek k¨oz¨ott, ez sok id˝ot takar´ıthat meg. M´asr´eszt ez az algoritmus a restarttal ellent´etben garant´alja azt, hogy kiker¨ ul¨ unk az eddig vizsg´alt r´eszf´ ab´ ol, ´es teljesen m´ asik ter¨ uletet fogunk vizsg´alni. Harmadr´eszt pedig, a solverekhez rendelt heurisztikus pontsz´ am miatt mindig azon a r´eszen fogunk keresni, ahol a legnagyobb val´osz´ın˝ us´eggel tal´ alhat´ o megold´ as.
4.1.2.
A keres´ esi t´ er sz´ etoszt´ asa
A keres´esi t´er sz´etoszt´ as´ ahoz el kell ´ern¨ unk azt, hogy mindegyik solver csak a neki kijel¨olt r´eszf´ an v´egezze a keres´est. Ahogy a 3.1-es fejezetben eml´ıtettem, ezt a MiniSat ´altal biztos´ıtott assumption¨ ok seg´ıts´eg´evel oldjuk meg. Ha ez a funkci´o nem l´etezne, egy saj´at k´esz´ıt´es˝ u f¨ uggv´ennyel kellene vez´ereln¨ unk az els˝ o n´eh´ any ´ert´ekad´ast, hogy a solverek a megadott hely¨ ukre ker¨ uljenek a f´ aban. Ez esetben arra is kellene figyeln¨ unk, hogy a solver a backtrack sor´an ne ugorjon ki a neki sz´ ant r´eszf´ ab´ ol. Az assumption¨ ok k¨ onnyebb´e teszik a fa r´eszekre oszt´as´at, hiszen az eml´ıtett feladatokat elv´egzik helyett¨ unk. (. . . )
(. . . )
(. . . )
1. solver x0 =0 x1 =0 x2 =0
2. solver x0 =0 x1 =0 x2 =1
(. . . )
(. . . )
(. . . )
3. solver x0 =0 x1 =1 x2 =0
4. solver x0 =0 x1 =1 x2 =1
5. solver x0 =1 x1 =0 x2 =0
6. solver x0 =1 x1 =0 x2 =1
(. . . )
7. solver x0 =1 x1 =1 x2 =0
8. solver x0 =1 x1 =1 x2 =1
4.2. ´ abra. 8 solver megval´os´ıt´asa assumption¨okkel A 4.2. ´ abra 8 solverre mutatja be azt, hogy hogyan lehets´eges a keres´esi t´er sz´etoszt´asa assumption¨ ok haszn´ alat´ aval: vessz¨ uk k v´ altoz´o ¨osszes interpret´aci´oj´at, ami a 2.3.1-es fejezetnek megfelel˝ oen ´eppen 2k . Ezeket az interpret´ aci´ okat elk´epzelhetj¨ uk u ´gy is, hogy k d¨ont´es ut´an ennyi f´ele k¨ ul¨onb¨ oz˝ o cs´ ucson lehet¨ unk ´eppen a f´ aban. Ha ezen cs´ ucsok mindegyike egy solver sz´am´ara jelenti a kiindul´ asi pontot a keres´esben, akkor siker¨ ult a keres´esi teret 2k r´eszre osztanunk. L´athat´o, hogy ha ezt a m´ odszert haszn´ aljuk, akkor a haszn´alt solverek sz´ama (numSolvers) 2 hatv´anya kell, hogy legyen. Megoldhat´ o lenne tetsz˝ oleges sz´am´ u solver haszn´alata is, azonban ez azt jelenten´e, hogy a solverek k¨ ul¨ onb¨ oz˝ o d¨ ont´esi szintekr˝ol indulnak a keres´esben (egy adott d¨ont´esi szinten mindig 2k cs´ ucs tal´ alhat´ o). Ez nem felt´etlen¨ ul jelentene probl´em´at, azonban a heurisztik´at sz¨ uks´egtelen¨ ul bonyolultt´ a tenn´e. A keres´esi fa feldarabol´ as´ an´ al a solverek sz´ama egy´ertelm˝ uen meghat´arozza, hogy h´any v´altoz´ ot adunk az egyes solvereknek assumptionk´ent. Arr´ol azonban, hogy ezek mely v´altoz´ok legyenek, 25
Bart´ ok D´ avid
SAT-solverek gyors´ıt´asa best-first search algoritmussal
szabadon d¨ onthet¨ unk. Ez azt jelenti, hogy azt, hogy mi alapj´an osztjuk sz´et a keres´esi teret, mi d¨ ontj¨ uk el ezen v´ altoz´ ok kiv´ alaszt´as´aval. Felmer¨ ul a k´erd´es, hogy mely v´altoz´okat c´elszer˝ u erre a c´elra haszn´ alni. A legegyszer˝ ubb az, hogy 2k solver eset´en ezek legyenek x0 , x1 , . . . , xk−1 . Egy m´ asik lehet˝ os´eg, hogy a legt¨ obb kl´ ozban el˝ofordul´o v´altoz´okat haszn´aljuk. Ez az´ert lehet j´o ¨otlet, mert ´ıgy val´ osz´ın˝ uleg egym´ ast´ ol nagyon k¨ ul¨onb¨oz˝o kiindul´asi alapot kapnak a solverp´eld´anyok, ´es ´ıgy tal´ an pontosabban meg tudjuk hat´ arozni, hogy melyiket is ´erdemes futtatni. Arra, hogy ez val´oban ´ıgy van-e, a M´er´esek fejezetben fogunk v´alaszt kapni.
4.1.3.
A heurisztika
A best-first searchben fontos elem a solverek sikeress´eg´et ki´ert´ekel˝o heurisztikus f¨ uggv´eny. Ebben a fejezetben azt ismertetem, hogy milyen adatokat c´elszer˝ u haszn´alni ebben a f¨ uggv´enyben. Ehhez azt kell v´egiggondolnunk, hogy mi jelzi el˝ore azt, ha egy SAT-solver k¨ozel j´ar a megold´ashoz. Azt is figyelembe kell venn¨ unk, hogy ezen t´enyez˝ok k¨oz¨ ul n´emelyikhez esetleg olyan m´ert´ek˝ u adatgy˝ ujt´es is sz¨ uks´eges lehet, hogy a jelentkez˝o overhead miatt azok alkalmaz´asa nem ´eri meg. • Jelenleg h´ any v´ altoz´ onak van ´ert´eke? Min´el t¨obb v´altoz´o rendelkezik m´ar valamilyen ´ert´ekkel, ann´ al val´ osz´ın˝ ubb, hogy n´eh´any tov´abbi d¨ont´es ut´an megold´asra jutunk. • Mennyi az eddig el´ert maxim´alis m´elys´eg? Ha egy solver m´ar nagyon m´elyen is j´art a keres´esi f´ aban, val´ osz´ın˝ us´ıthet˝ o, hogy hamar megold´ast ad. • Mennyi az ´ atlagos m´elys´eg? A sikeress´eget szint´en jelezheti az, hogy a solver ´atlagos m´elys´ege a keres´es sor´ an nagy. • Milyen hossz´ uak a tanult kl´ozok? A r¨ovid tanult kl´ozok jobban haszn´alhat´oak, hiszen egy er˝ osebb felt´etelt fogalmaznak meg, ezzel lesz˝ uk´ıtve a keres´est. Leghasznosabbak az egy liter´ alb´ ol ´ all´ ok, hiszen egy ilyen az adott v´altoz´o ´ert´ek´et egy´ertelm˝ uen meghat´arozza. Ezen ¨ otletek alapj´ an a ki´ert´ekel˝o f¨ uggv´eny a k¨ovetkez˝ok´eppen ´ep¨ ul fel: score = f (currentDepth, maxDepth, averageDepth, averageLearntClauseLength) Term´eszetesen ez ebben a form´aban csak egy ¨otlet, aminek a helyess´eg´et a m´er´esek sor´an kell ellen˝ orizn¨ unk. Lehets´eges, hogy a fenti felt´etelez´esek k¨oz¨ ul n´emelyik nem jelzi el˝ore a megold´ as k¨ ozels´eg´et, ´es azt is meg kell vizsg´ alnunk, nem sz¨ uks´eges-e ezek valamelyik´ehez t´ ul sok adatgy˝ ujt´es. A CDCL le´ır´ as´ ar´ ol sz´ ol´ o fejezetben eml´ıtettem, hogy a fut´as sor´an nem minden adatot tudunk az egyes kl´ ozokr´ ol kinyerni a speci´alis adatszerkezet miatt. Ez azt jelenti, hogy nem tudjuk p´eld´ aul meg´ allap´ıtani, hogy egy kl´ ozon bel¨ ul h´any v´altoz´onak van ´ert´eke. Ezt teh´at nem tudjuk alkalmazni a heurisztik´ aban.
4.2.
Implement´ aci´ o
A BFS algoritmus MiniSatba val´ o implement´al´asa sor´an a k¨ovetkez˝o elveket k¨ovettem: • A m´ odos´ıt´ asokat pr´ ob´ altam a main() f¨ uggv´enyre korl´atozni, azaz a solver l´enyegi m˝ uk¨od´es´eben nem akartam jelent˝ os m´ odos´ıt´asokat l´etrehozni. • A MiniSat alapb´ ol meglev˝ o funkci´oit semmilyen m´odon nem szerettem volna korl´atozni, csup´ an a probl´em´ ak megold´ asi folyamat´at gyors´ıtani. • A v´ altoztat´ asokat u ´gy eszk¨ oz¨oltem, hogy azok a MiniSat t¨obbi r´esz´evel azonos adatszerkezeteket haszn´ aljanak.
26
Bart´ ok D´ avid
4.2.1.
SAT-solverek gyors´ıt´asa best-first search algoritmussal
Az eredeti MiniSat m˝ uk¨ od´ ese
Ebben a fejezetben r¨ oviden ismertetem a MiniSat m˝ uk¨od´es´et, hiszen ezen ismeretek fontosak ahhoz, hogy meg´erts¨ uk, miben k¨ ul¨ onb¨ ozik az eredeti MiniSatt´ol a best-first search. A MiniSat ´ altal haszn´ alt adatt´ıpusok a k¨ovetkez˝ok: vec: Template-es´ıtett, t¨ omb¨ ot megval´os´ıt´o oszt´aly. Lit: Liter´ alokat t´ arol. CRef: Kl´ ozokat t´ arol. A MiniSat main() f¨ uggv´eny´enek r´eszletes m˝ uk¨od´ese: El˝ osz¨ or be´ all´ıt´ asra ker¨ ulnek az argumentumokban kapott opci´ok, majd, ha a bemeneti f´ajl el´er´esi u ´tvonala megfelel˝ o, a MiniSat beolvassa egy Solver t´ıpus´ u objektumba a cnf f´ajlb´ol a kl´ozokat. Ezut´ an h´ıv´ odik meg a simplify() f¨ uggv´eny, amely m´eg a keres´es el˝ott elv´egez egy unit propagationt. Ha a solver ezalatt ellentmond´ asra jut, a probl´ema unsatisfiable. Egy´eb esetben elkezd˝ odik a probl´ema megold´asa. Ez a solveLimited() f¨ uggv´eny seg´ıts´eg´evel t¨ ort´enik, amelynek bemen˝ o param´etere a keres´esn´el figyelembe veend˝o assumption¨ok list´aja. Ha nem szeretn´enk assumption¨ oket haszn´ alni, egy u ¨res t¨omb¨ot kell beadnunk a f¨ uggv´eny param´eterek´ent. A solveLimited() f¨ uggv´eny csup´an annyit csin´al, hogy ´atm´asolja a param´eter´eben kapott asuggv´enyt. A sumption t¨ omb¨ ot a Solver assumptions nev˝ u v´altoz´oj´aba, ezut´an megh´ıvja a solve () f¨ fentiekb˝ ol k¨ ovetkezik, hogy a solve () megh´ıv´as´anak el˝ok¨ovetelm´enye, hogy az assumptions bels˝ o v´ altoz´ o m´ ar inicializ´ alva legyen. A solve () f¨ uggv´eny tulajdonk´eppen egy while ciklusban futtatja a search() f¨ uggv´enyt, ami a t´enyleges keres´est v´egzi. Erre az´ert van sz¨ uks´eg, mert a search() f¨ uggv´eny param´eterk´ent egy eg´esz sz´ amot kap, ´es ennyi darab konfliktus ut´an visszat´er, de megold´as n´elk¨ ul (l Undef). Eg´eszen addig maradunk a while cikluson bel¨ ul, am´ıg a search() f¨ uggv´eny vagy l Unsat (unsatisfiable) vagy l Sat (satisfiable) ´ert´ekkel nem t´er vissza. Minden egyes, eredm´enyre nem jut´o keres´es ut´an n¨ovel´esre ker¨ ul a limitk´ent adott konfliktusok sz´ama, ´es u ´jra megh´ıv´odik a search(). 1 2 3 4 5
inline lbool Solver::solveLimited (const vec
& assumps) { assumps.copyTo(assumptions); return solve (); }
6 7 8 9 10 11 12 13 14 15 16 17 18
lbool Solver::solve () { ... while (status == l Undef) { ... status=search(rest base∗restart first); ... } ... return status; } L´ athatjuk, hogy a seach() f¨ uggv´eny a megengedett konfliktusok sz´am´at egy szorzat form´aj´ aban kapja. Ezek k¨ oz¨ ul a restart first egy konstans, a rest base minden visszat´er´es ut´an n˝o, ´ıgy biztos´ıtva azt, hogy a f¨ uggv´eny egyre nagyobb limittel rendelkezzen. Az alapbe´all´ıt´as szerint a rest base exponenci´ alisan n¨ ovekszik, de ezt a felhaszn´al´o m´odos´ıthatja. A keres´es befejez´ese ut´an t¨ort´enik a megold´ as output f´ ajlba ´ır´ asa, a lefoglalt mem´oriater¨ ulet felszabad´ıt´asa, majd a kil´ep´es.
27
Bart´ ok D´ avid
4.2.2.
SAT-solverek gyors´ıt´asa best-first search algoritmussal
Inicializ´ al´ as
A BFS implement´ aci´ oj´ ahoz az els˝ o l´ep´es az, hogy t¨obb solver legyen jelen egyszerre, ´es ezek mindegyik´enek legyen egy pontsz´ ama, ami alapj´an meg tudjuk mondani, mennyire ´allnak k¨ozel a probl´ema megold´ as´ ahoz. Ezt a k¨ ovetkez˝ o strukt´ ura seg´ıts´eg´evel val´os´ıtottam meg: 1 2 3 4 5
struct BestFirst { Solver∗ Slv; double score; }; A BestFirst strukt´ ura elemei teh´at: egy Solver t´ıpus´ u pointer, ´es a solverhez tartoz´o aktu´ alis pontsz´ am. A programban haszn´ alt solvereket egy BestFirst t´ıpus´ u pointerekb˝ol ´all´o vektorban t´ arolom:
1
vec S; A SAT-probl´ema f´ ajlb´ ol t¨ ort´en˝ o beolvas´asa egy for ciklusban t¨ort´enik, m´eghozz´a annyiszor, ah´ any solvert szeretn´enk haszn´ alni. Ezen term´eszetesen lehetne gyors´ıtani: a Solver objektumhoz aj´anlatos k´esz´ıteni egy m´ asol´ o konstruktort. A kutat´asom sor´an ett˝ol eltekintettem, mert a m´er´eseim azt mutatt´ ak, hogy a probl´ema beolvas´ asa nagys´agrendekkel kevesebb id˝ot vesz ig´enybe, mint a megold´ as t´enyleges keres´ese.
1 2 3 4 5 6 7 8
for(int ii=0; iiscore=INFINITE; //initialise score S[ii]−>Slv=new Solver; ... } Maga a beolvas´ as teljesen anal´og az eredeti MiniSat megold´asaival, annyi a k¨ ul¨onbs´eg, hogy az S[ii] strukt´ ura Slv tagv´ altoz´ oj´ aba kell bet¨olten¨ unk az adatokat. Az INFINITE egy predefini´alt konstans, ´ert´eke a score v´ altoz´ oban t´ arolhat´o legnagyobb ´ert´ek kell, hogy legyen. A solverek pontsz´ am´ at az´ert erre az ´ert´ekre inicializ´ aljuk, hogy a k¨ovetkez˝o solver kiv´alaszt´asn´al prefer´alva legyenek a m´eg nem haszn´ alt solverek azokkal szemben, amelyek m´ar a heurisztika alapj´an pontsz´ammal rendelkeznek. Ennek megfelel˝ oen csak akkor v´alasztunk solvert a heurisztika alapj´an, ha m´ar mindegyikr˝ ol rendelkez¨ unk val´ odi adatokkal (amiket a fut´as sor´an gy˝ ujt¨ott¨ unk). Annak kiv´ alaszt´ as´ ar´ ol, hogy mely v´altoz´okat adjuk meg assumpti¨onk´ent, a k´es˝obbiekben lesz sz´ o. Egyel˝ ore tegy¨ uk fel, hogy egy occurdata nev˝ u strukt´ urat¨omb els˝o log2 numSolvers hely´en all´ ´ o v´ altoz´ ok adj´ ak meg az assumption¨oket, az index nev˝ u tagv´altoz´ojukban, a k¨ovetkez˝ok´eppen: occurdata[0].index, occurdata[1].index stb. Az assumption¨ok l´etrehoz´as´at a k¨ovetkez˝o k´odr´eszlet szeml´elteti:
28
Bart´ ok D´ avid
SAT-solverek gyors´ıt´asa best-first search algoritmussal
0 = 000 ⇒ x0 ∧ x1 ∧ x2 1 = 001 ⇒ x0 ∧ x1 ∧ ¬x2 2 = 010 ⇒ x0 ∧ ¬x1 ∧ x2 3 = 011 ⇒ x0 ∧ ¬x1 ∧ ¬x2 4 = 100 ⇒ ¬x0 ∧ x1 ∧ x2 5 = 101 ⇒ ¬x0 ∧ x1 ∧ ¬x2 6 = 110 ⇒ ¬x0 ∧ ¬x1 ∧ x2 7 = 111 ⇒ ¬x0 ∧ ¬x1 ∧ ¬x2 4.3. ´ abra. A solver sz´ama ´es a hozz´a tartoz´o assumption-t¨omb
1 2 3 4 5 6 7 8 9 10 11 12 13 14
int binary; Lit L; int cntr; for(int ii=0; ii1; jj/=2) //assumption list for a solver { L=mkLit(occurdata[cntr++].index, binary%2); //making of a literal S[ii]−>Slv−>assumptions.push(L); //add the literal binary/=2; //next position } } A k´ odr´eszlet n´emi magyar´ azatot ig´enyel. K´epzelj¨ uk el, hogy numSolvers darab solvert szeretn´enk futtatni a keres´esi f´ an. Tudjuk, hogy az assumption¨ok sz´ama log2 numSolvers, ´es hogy mindegyiknek k¨ ul¨ onb¨ oz˝ onek kell lennie. Az assumption¨ok tulajdonk´eppen log2 numSolvers hossz´ u bitsorozatok, amelyek megadj´ak az egyes v´altoz´ok polarit´as´at. Ezekb˝ol k¨ovetkezik, hogy a solver sorsz´ ama egy´ertelm˝ uen hozz´arendel egy adott assumption-t¨omb¨ot, hogyha a sorsz´ amot log2 numSolvers jegy˝ u, kettes sz´ amrendszerbeli sz´amk´ent tekintj¨ uk. Ez l´athat´o a 4.3. ´abr´an. A k¨ uls˝ o for ciklusban a solvereken iter´alunk v´egig. Minden iter´aci´o elej´en inicializ´aljuk a cntr v´ altoz´ ot, ami azt mutatja meg, hogy hanyadik assumptiont adjuk be az adott solvernek; tov´abb´ aa binary v´ altoz´ oban t´ arolt assumption-k´odot. A bels˝o ciklusban t¨ort´enik maga az assumptions t¨ omb fel´ep´ıt´ese. Ezzel a viszonylag egyszer˝ u, r¨ovid k´odr´eszlettel t¨ort´enik teh´at a keres´esi fa sz´etoszt´ asa.
4.2.3.
Az assumption¨ okben szerepl˝ o v´ altoz´ ok meghat´ aroz´ asa
Ebben a fejezetben r¨ oviden ismertetem, hogyan lehet egy cnf f´ajlb´ol kinyerni azt, hogy melyik v´ altoz´ o h´ anyszor szerepel benne. Erre a 4.1.2-es fejezetben eml´ıtettek miatt van sz¨ uks´eg: meg szeretn´enk vizsg´ alni, hogy ´erdemes-e a leggyakrabban el˝ofordul´o v´altoz´okat haszn´alni az assumption¨okben. A MiniSat cnf f´ ajlb´ ol t¨ ort´en˝ o beolvas´asi folyamat´at u ´gy m´odos´ıtottam, hogy elmentse azt, hogy az egyes v´ altoz´ ok h´ anyszor szerepelnek a kifejez´esben ¨osszesen. A k´odban a sz¨ urk´evel kiemelt r´eszek az ´en m´ odos´ıt´ asaim ennek a m´er´es´ere. A megval´ os´ıt´ asra a k¨ ovetkez˝ o strukt´ ura szolg´alt:
29
Bart´ ok D´ avid
1 2 3 4 5
SAT-solverek gyors´ıt´asa best-first search algoritmussal
struct var occur { int count; //how many times the variable occured int index; //index of the variable };
6 7
1 2 3 4 5 6 7 8
var occur∗ occurdata; parse DIMACS main(InputStream in, Solver S) { vec lits; while(in != EOF) { if(in == ’p’) { vars=parseInt(in); occurdata=new var occur[vars]; for(int ii=0; ii
9 10 11 12
occurdata[ii].count=0;
13
occurdata[ii].index=ii; } clauses=parseInt(in);
14 15
} else if (in == ’c’ || in == ’p’) skipLine(in); else { readClause(in, S, lits); S.addClause (lits); }
16 17 18 19 20 21 22 23
}
24 25
}
26 27 28 29 30 31 32 33
static void readClause(InputStream in, Solver S, vec lits) { while (true) { parsed lit=parseInt(in); if (parsed lit == 0) break; increaseCount(occurdata, var); addLiteral(lits, parsed lit);
34 35
}
36 37
} • parseInt(): Beolvas egy eg´esz sz´amot egy f´ajlb´ol. ´ • skipLine(): Atugorja a kommentk´ent szolg´al´o sort. 30
Bart´ ok D´ avid
SAT-solverek gyors´ıt´asa best-first search algoritmussal
• addClause(): Hozz´ aad egy liter´alt¨omb¨ot a m´ar meglev˝o kl´ozok list´aj´ahoz. • addLiteral(): Hozz´ aad egy liter´alt a param´eterk´ent kapott liter´alt¨ombh¨oz. oveli eggyel az adott v´altoz´o el˝ofordul´as´anak sz´am´at a nyilv´antart´ asra • increaseCount(): megn¨ szolg´ al´ o t¨ ombben Miut´ an rendelkez´es¨ unkre ´ allnak a sz¨ uks´eges adatok, az occurdata t¨omb¨ot egyszer˝ uen count szerint n¨ ovekv˝ o sorrendbe kell rendezn¨ unk, a t¨omb elej´en ´ıgy a leggyakoribb v´altoz´ok lesznek (az index tagv´ altoz´ okban).
4.2.4.
A keres´ es
A solverek ´es assumption¨ ok inicializ´al´asa ut´an megkezd˝odhet maga a best-first search. Ez egy ciklusban fut, ahol minden iter´ aci´ o elej´en n¨ovelj¨ uk az adott solverp´eld´anynak adott konfliktuslimitet. Ezut´ an a megadott sz´ am´ u konfliktus el´er´es´eig keres¨ unk az aktu´alis solverrel, ´es a visszat´er´esi ´ert´eknek megfelel˝ oen halad tov´ abb a program. Ez az ´ert´ek h´aromf´ele lehet: SAT: a solver egy megold´ ast tal´ alt UNSAT: a solver befejezte a keres´est, a hozz´a rendelt r´eszf´aban nincs megold´as UNRESOLVED: a solver r´eszf´ aj´ aban lehet megold´as, de m´eg nem tal´altuk meg azt Ha egy solver SAT-tal t´er vissza, akkor kil´ephet¨ unk a ciklusb´ol, a probl´ema satisfiable. UNSAT ´ert´ek eset´eben k´et eset lehets´eges, att´ol f¨ ugg˝oen, hogy van-e m´eg m˝ uk¨od˝ok´epes solver. Amennyiben nincs, akkor a probl´ema unsatisfiable. Ha van m´eg akt´ıv solver, akkor kiv´alasztjuk, hogy melyik folytatja a keres´est. Ha pedig UNRESOLVED a visszat´er´esi ´ert´ek, akkor a feladatunk pontsz´ amot rendelni az aktu´ alis solverhez ´es kiv´alasztani a k¨ovetkez˝ok´ent futtat´asra ker¨ ul˝o p´eld´anyt. A MiniSatba implement´ alt best-first search algoritmus pszeudok´odja ennek megfelel˝oen a k¨ovetkez˝ok´eppen alakul:
31
Bart´ ok D´ avid
1 2 3 4 5 6
SAT-solverek gyors´ıt´asa best-first search algoritmussal
BFS(SolverList L) { Solver currentSolver; boolean satisfied=false; // true, if a solver has returned SAT boolean exists active solver=true; // true, if we have an active solver while(NOT(satisfied) AND exists active solver)
7
currentSolver=findMaxHeuristic(L); limit=increaseLimit();
8 9 10
retCurr=solve(currentSolver, limit);
11 12
if(retCurr == UNRESOLVED) setHeuristic(currentSolver);
13 14 15
else if(retCurr == SAT) gatherStats(currentSolver); satisfied=true;
16 17 18 19
else if(retCurr == UNSAT) gatherStats(currentSolver); deAllocate(currentSolver); exists active solver=activeCheck(L);
20 21 22 23 24
printStats(); if(satisfied) return true; if(NOT(exists active solver)) return false;
25 26 27 28 29 30
} • Solver currentSolver: Az ´eppen futtatott solver. • increaseLimit(): Minden futtat´as el˝ott megn¨oveli a solvernek adott konfliktuslimitet. • solve(): Keres a f´ aban, visszat´er ha eredm´enyre (SAT vagy UNSAT) jutott, illetve ha el´eri a param´eterben megadott konfliktussz´amot (UNRESOLVED). • setHeuristic(): Egy pontsz´ amot rendel a solverhez, a fut´asi adatok alapj´an • findMaxHeuristic(): Egy egyszer˝ u maximumkeres´essel (pontsz´am alapj´an) kiv´alaszatja a k¨ ovetkez˝ ok´ent futtat´ asra ker¨ ul˝o solvert. • gatherStats(): Elmenti a solver adatait a fut´as befejez´ese ut´ani statisztika k´esz´ıt´es´ehez. • deAllocate(): Felszabad´ıtja a solver ´altal haszn´alt mem´oriater¨ uletet. • activeCheck(): Igaz ´ert´eket ad vissza, ha van m´eg m˝ uk¨od˝o solver¨ unk. • printStats(): A fut´ as v´eg´en ki´ırja a solverekkel kapcsolatos statisztikai adatokat.
32
5. fejezet
M´ er´ esek MiniSat without restarts MiniSat with restarts numSolvers:8,heuristic:3,limit:1000,increase:150,assump_vars:1 numSolvers:8,heuristic:3,limit:1000,increase:150,assump_vars:0 numSolvers:8,heuristic:3,limit:1000,increase:110,assump_vars:1 numSolvers:8,heuristic:3,limit:1000,increase:110,assump_vars:0 numSolvers:8,heuristic:2,limit:1000,increase:150,assump_vars:1 numSolvers:8,heuristic:2,limit:1000,increase:150,assump_vars:0 numSolvers:8,heuristic:2,limit:1000,increase:110,assump_vars:1 numSolvers:8,heuristic:2,limit:1000,increase:110,assump_vars:0
numSolvers:8,heuristic:1,limit:1000,increase:150,assump_vars:1 numSolvers:8,heuristic:1,limit:1000,increase:150,assump_vars:0 numSolvers:8,heuristic:1,limit:1000,increase:110,assump_vars:1
numSolvers:8,heuristic:1,limit:1000,increase:110,assump_vars:0 0
2
4
6
8
10
12
14
16
Futásidő (s)
5.1. ´ abra. A best-first search v´altozatok eredm´enyei Az els˝ o grafikonon (5.1. ´ abra) 14 k¨ ul¨onb¨oz˝o solver v´altozat fut´asi idej´enek ¨osszehasonl´ıt´ asa l´ athat´ o. A solverek k¨ oz¨ ott szerepel az eredeti MiniSat restarttal ´es an´elk¨ ul, valamint 12 best-first search v´ altozat is. Mindegyik solvert ugyanazon a 20 probl´em´an futtattam, ´es a fut´asid˝ok ´atlag´ at abr´ ´ azoltam a grafikonon. A tesztel´esre haszn´alt probl´emap´eld´anyokat az lsencode seg´ıts´eg´evel gener´ altam, ebb˝ ol k¨ ovetkezik, hogy ezek mind megoldhat´oak. A p´eld´anyok mindegyike egy 35 × 35 m´eret˝ u, 44% lyukat tartalmaz´ o v´eletlenszer˝ u latin n´egyzet SAT-probl´emak´ent val´o megfogalmaz´ asa. Az lsencode-r´ ol sz´ ol´ o fejezetben l´ athattuk, hogy a lyukak sz´ama drasztikusan befoly´asolja a probl´ema neh´ezs´eg´et. Ennek megfelel˝ oen ´en viszonylag nagy lyukar´anyt haszn´alok, ´es a neh´ezs´eget ink´ abb a t´ ablam´erettel szab´ alyozom. A gener´alt cnf f´ajlok kb. 4 000 v´altoz´ot ´es 40 000 kl´ozt tartalmaznak. Az el˝ ozetes vizsg´ alatok sor´ an sz´amos heurisztik´at kipr´ob´altam, ezek k¨oz¨ ul csak a 3 legsikeresebb vett r´eszt a v´egs˝ o tesztel´esekben. A best-first search¨ ot alkalmaz´ o solverek param´eterei a k¨ovetkez˝ok: • numSolvers: a solverp´eld´ anyok sz´ama • heuristic: a heurisztika kisz´ am´ıt´as´anak m´odja 1: score = averageDepth/averageLearntClauseLength 2: score = currentDepth + maxDepth 3: score = currentDepth ∗ averageDepth/averageLearntClauseLength 33
Bart´ ok D´ avid
SAT-solverek gyors´ıt´asa best-first search algoritmussal
• limit: a solverek el˝ osz¨ or h´ any konfliktusig futnak • increase: a limitet mindig ilyen m´ert´ekben v´altoztatjuk sz´azal´ekban ´ertve, pl.: 110 eset´en mindig 1,1-szeres lesz a n¨ oveked´es • assump vars: mely v´ altoz´ ok szerint kapj´ak a solverek az assumption¨oket 0: els˝ o k v´ altoz´ o 1: leggyakoribb v´ altoz´ ok Ez a teszt t¨ obb szempontb´ ol is rendk´ıv¨ ul tanuls´agos. A best-first search ¨osszes v´altozata gyorsabb, mint a restart n´elk¨ uli MiniSat, de az u ´jraind´ıt´asokat haszn´al´o v´altozatot nem igaz´an siker¨ ult fel¨ ulm´ ulni. Nyilv´ anval´ o lett az is, hogy a leggyakrabban szerepl˝o v´altoz´okat c´elszer˝ u az assumption¨ okben haszn´ alni, ´es hogy a 3-as heurisztika nem megfelel˝o. L´ athatjuk teh´ at, hogy a best-first search¨ot valahogyan kombin´alni kellene az eredeti MiniSat u ´jraind´ıt´ asaival. A tov´ abbi tesztekben a best-first search egy ´atalak´ıtott v´altozat´at haszn´ alom, ahol a heurisztika kisz´ am´ıt´ asa ut´ an mindig u ´jraind´ıtom az adott solvert. ´Igy val´osz´ın˝ uleg mindig a leg´ıg´eretesebb solvert fogjuk futtatni, azonban a restartokat is alkalmazzuk az algoritmus tov´ abbi gyors´ıt´ as´ ara.
MiniSat without restarts MiniSat with restarts numSolvers:16,heuristic:2,limit:100,increase:150,assump_vars:1
numSolvers:16,heuristic:2,limit:100,increase:110,assump_vars:1 numSolvers:16,heuristic:1,limit:100,increase:150,assump_vars:1 numSolvers:16,heuristic:1,limit:100,increase:110,assump_vars:1 numSolvers:8,heuristic:2,limit:100,increase:150,assump_vars:1 numSolvers:8,heuristic:2,limit:100,increase:110,assump_vars:1 numSolvers:8,heuristic:1,limit:100,increase:150,assump_vars:1 numSolvers:8,heuristic:1,limit:100,increase:110,assump_vars:1 numSolvers:4,heuristic:2,limit:100,increase:150,assump_vars:1 numSolvers:4,heuristic:2,limit:100,increase:110,assump_vars:1 numSolvers:4,heuristic:1,limit:100,increase:150,assump_vars:1 numSolvers:4,heuristic:1,limit:100,increase:110,assump_vars:1
0
1
2
3
4
5
6
7
8
9
10
Futásidő (s)
5.2. ´ abra. Az u ´jraind´ıt´asokkal gyors´ıtott BFS A m´ asodik grafikon (5.2. ´ abra) az el˝oz˝ovel azonos k¨or¨ ulm´enyek k¨oz¨ott hasonl´ıtja ¨ossze a m´ odos´ıtott best-first search¨ ot az eredeti MiniSattal. Itt az el˝oz˝oekben legsikeresebb 1. ´es 2. heurisztik´ akat haszn´ alom, valamint csak a leggyakoribb v´altoz´okat adom assumptionk´ent. A tesztben azonban az el˝ oz˝ ot˝ ol elt´er˝ oen t¨ obbf´ele solversz´amot is kipr´ob´alok. Itt m´ ar a restartot alkalmaz´o MiniSat is alulmarad a legt¨obb BFS v´altozattal szemben, k¨ osz¨ onhet˝ oen annak, hogy azokba is bele´ep´ıtettem az u ´jraind´ıt´ast. A harmadik grafikon (5.3. ´ abra) a legsikeresebb best-first search konfigur´aci´o teljes´ıtm´eny´et mutatja be 100 k¨ ul¨ onb¨ oz˝ o probl´em´ an. Ennek param´eterei: • numSolvers=4 • heuristic=2 (score = currentDepth + maxDepth) • limit=100 34
Bart´ ok D´ avid
SAT-solverek gyors´ıt´asa best-first search algoritmussal
45
Előfordulások száma (db)
40 35 30 25
BFS
20
MiniSat 15 10 5 0
0-3
4-15
16-63
64-255
Futásidő (s)
5.3. ´ abra. A BFS ´es a MiniSat sz´or´as´anak ¨osszehasonl´ıt´asa • increase=110 • assump vars=1 A tesztel´esre haszn´ alt probl´emap´eld´anyok imm´ar nehezebbek: 39 × 39 m´eret˝ u latin n´egyzetek, 44% lyukkal, szint´en lsencode ´ altal gener´alva. A gener´alt cnf f´ajlok ´ıgy nagyj´ab´ol 5 000 v´altoz´ ot ´es 60 000 kl´ ozt tartalmaznak. Ez a grafikon m´as fel´ep´ıt´es˝ u, mint az el˝oz˝oek; azt mutatja be, hogy melyik solver h´ anyszor ny´ ujtott egy adott id˝ointervallumon bel¨ uli fut´asid˝ot. A jobb ¨osszehasonl´ıthat´ os´ ag ´erdek´eben a v´ızszintes tengelyen logaritmikus sk´al´at haszn´alok, ez azt jelenti, hogy az orig´ ot´ ol t´ avolodva az ´ abr´ azolt intervallumok nagys´aga exponenci´alisan n˝o. Az ´abr´an j´ol l´athat´o, hogy a best-first search fut´ asi ideje l´enyegesen jobb az eredeti MiniSat restartokat haszn´al´o v´altozat´ an´ al. A BFS 39-szer futott 16 m´ asodpercen bel¨ ul, m´ıg az eredeti MiniSat csup´an 27-szer. A grafikonr´ ol ugyan nem olvashat´ o le, de meggy˝ oz˝o adat az ´atlagos fut´asid˝o is: a BFS eset´eben ez 46, 6 m´asodperc, m´ıg a MiniSatn´ al 59, 9. A negyedik grafikonon (5.4. ´abra) egy u ´jabb, 30 probl´em´an t¨ort´en˝o tesztel´es eredm´enyeit l´ athatjuk. Itt m´ ar nem lsencode ´altal gener´alt p´eld´anyokat haszn´altam, hanem nagy sz´ amok pr´ımt´enyez˝ okre bont´ as´ anak SAT-probl´em´av´a konvert´alt form´aj´at. A felbontand´o sz´amok mindegyike k´et, 1 400 000 k¨ or¨ uli pr´ımsz´am szorzatak´ent ´allt el˝o. Ennek az az oka, hogy az ´ıgy gener´ alt probl´em´ ak neh´ezs´ege a tesztekhez ´eppen megfelel˝o. Ezek a cnf f´ajlok kb. 1 500 v´altoz´ot ´es 7 500 kl´ ozt tartalmaznak. A haszn´ alt BFS algoritmus teljesen megegyezik az el˝oz˝o tesztben szerepl˝ ovel. Ezen az ´ abr´ an m´eg jobban l´ atszik, hogy a BFS seg´ıts´eg´evel jelent˝osen cs¨okkenthet˝o a sz´or´ as. Az eredeti MiniSatn´ al 8-szor ny´ ult 64 m´asodperc f¨ol´e a fut´asid˝o, m´ıg a BFS-n´el ez csak 3-szor fordult el˝ o. A best-first search 30 futtat´ asb´ol 23-szor 4 ´es 63 m´asodperc k¨oz¨ott v´egzett. Az ´atlagos fut´ asid˝ ok enn´el a tesztn´el a k¨ ovetkez˝ ok´eppen alakultak: a MiniSat eset´eben 43, 3 m´asodperc, a BFS-n´el pedig 24, 9. A pr´ımt´enyez˝ ore bont´ as ´es az lsencode ´altal gener´alt probl´em´ak egym´ast´ol teljesen k¨ ul¨onb¨ oz˝ oek, m´egis ugyanaz a BFS konfigur´ aci´o mindk´et esetben nagyon j´o eredm´enyt ad. A m´odszer ilyen szempontb´ ol teh´ at el´eg robusztusnak tekinthet˝o.
35
Bart´ ok D´ avid
SAT-solverek gyors´ıt´asa best-first search algoritmussal
16
Előfordulások száma (db)
14
12 10
8
BFS MiniSat
6 4
2 0
0-3
4-15
16-63
64-255
Futásidő (s)
5.4. ´ abra. Sz´ or´ asok alakul´asa pr´ımt´enyez˝ore bont´as-probl´em´akon
36
6. fejezet
Befejez´ es 6.1.
Eredm´ enyek
A TDK-dolgozatomban bemutattam a best-first search algoritmus alkalmaz´as´at SAT-probl´em´ akra. Ehhez el˝ osz¨ or sz¨ uks´eges volt a t´em´ahoz kapcsol´od´o elm´eleti h´att´er k¨or¨ ulj´ar´as´ara. Az alapfogalmak ismertet´ese ut´ an kit´ertem mind az ´altal´anos, mind a SAT-probl´em´ahoz haszn´alt speci´alis keres˝ o algoritmusok (DPLL ´es CDCL) fel´ep´ıt´es´ere is. Ezut´an k¨ovetkezett a haszn´alt programok bemutat´ asa: a MiniSat az implement´ aci´ohoz volt elengedhetetlen; az lsencode, a ToughSat ´es a BCAT pedig a tesztel´esben seg´ıtett. A kutat´omunka le´ır´asa k´et szinten t¨ort´ent: egy absztrakt, logikai szinten, ´es a gyakorlati szinten. Ezen fejezet els˝o r´esz´eben kital´alt ¨otleteket teh´at a m´asodik r´eszben implement´ altuk a MiniSatba. Az ¨ otletek sokas´ag´ab´ol ki kellett azonban v´alasztani, hogy mik azok, amelyek val´ oban gyors´ıtj´ ak az algoritmus m˝ uk¨od´es´et. Ennek menet´et a m´er´esekr˝ol sz´ol´o fejezetben ismertettem, valamint a BFS hat´ekonys´ag´at grafikonokkal t´amasztottam al´a. Az adatgy˝ ujt´es nagy sz´ am´ u futtatt´ as sor´ an, k¨ ul¨ onb¨ oz˝ o t´ıpus´ u ´es neh´ezs´eg˝ u p´eld´anyokon val´o tesztel´essel t¨ort´ent, ´ıgy val´ os k´epet adva a hat´ekonys´ agr´ ol. A dolgozatb´ ol kider¨ ult, hogy a MiniSat t´enyleg k¨onnyen m´odos´ıthat´o, ak´ar az alapfel´ep´ıt´es´et˝ ol l´enyegesen elt´er˝ o algoritmusok megval´os´ıt´as´ara is k´epes. Ennek az oka, hogy objektumorient´ altan, egym´ ast´ ol j´ ol elk¨ ul¨ on¨ ul˝ o r´eszek seg´ıts´eg´evel dolgozik. F´eny der¨ ult tov´abb´a arra is, hogy b´ ar a MiniSat egy nagyon hat´ekony solver, best-first search alkalmaz´as´aval a m˝ uk¨od´ese tov´abb gyors´ıthat´ o, m´eghozz´ a jelent˝ os m´ert´ekben. Ehhez t¨obbf´ele param´eter kipr´ob´al´as´ara volt sz¨ uks´eg, a legnagyobb att¨ ´ or´est azonban az hozta, hogy a best-first search¨ot kombin´altuk a restarttal: ennek hat´as´ ara az atlagos fut´ ´ asid˝ o mintegy 36%-kal cs¨okkent. Ezt az ¨otletet a tesztek sor´an a MiniSat u ´jraind´ıt´ asokat haszn´ al´ o v´ altozat´ anak eredm´enyess´ege adta. A siker oka val´osz´ın˝ uleg abban is keresend˝o, hogy a MiniSat eredetileg is gyakori u ´jraind´ıt´asokra lett tervezve, ´es mivel az u ´jraind´ıt´as sor´an megtartjuk a tanult kl´ ozok egy r´esz´et, a keres´es r´eszeredm´enyei sem vesznek teljesen el.
6.2.
Egy´ eb o ¨tletek
Az ´ altalam vizsg´ alt t´ema annyira szerte´agaz´o, hogy a munk´am sor´an nem volt id˝om ´es lehet˝os´egem ´ minden egyes felmer¨ ult ¨ otletet kipr´ob´alni. Erdekes k´erd´es lehet az, hogy a probl´em´ak t´ıpus´ anak ´es m´eret´enek f¨ uggv´eny´eben hogyan c´elszer˝ u megadni a best-first search param´etereit. Lehet, hogy p´eld´ aul nagyobb m´eret˝ u probl´em´ ak eset´en ´erdemes a limit n¨oveked´es´et m´ashogyan be´all´ıtani. Egy m´ asik lehets´eges ir´ any az algoritmus fejleszt´es´ere a tanult kl´ozok k¨oz¨oss´e t´etele. Ez a MiniSatban ´eppen a szigor´ uan elk¨ ul¨ on¨ ul˝o solver objektumok miatt neh´ezkes. Lehets´eges azonban, hogy ez a funkci´ o nagyban gyors´ıtan´ a a BFS m˝ uk¨od´es´et. Szerencs´es esetben egy 1 liter´alb´ol ´all´o tanult kl´ oz ak´ ar a haszn´ alt solverek fel´enek munk´aj´at feleslegess´e tenn´e, ha ez a liter´al ´eppen szerepelt az
37
Bart´ ok D´ avid
SAT-solverek gyors´ıt´asa best-first search algoritmussal
assumption¨ okben. Az el˝ obbieken k´ıv¨ ul ´erdemes lehet m´eg megvizsg´alni az el´ert eredm´enyek hardverf¨ ugg´es´et is. Lehet, hogy az u ´jraind´ıt´ as ´es a best-first search kombin´aci´oja az´ert sikeres, mert a solverv´alt´askor a cache tartalm´ at egy´ebk´ent is ki kell u ¨r´ıten¨ unk. Emiatt, ha ezzel egyid˝oben egy restartot is elv´egz¨ unk, nem n¨ ovelj¨ uk jelent˝ osen az overheadet. Az itt felmer¨ ult k´erd´esekkel a j¨ov˝oben behat´obban is k´ıv´anok foglalkozni, rem´elhet˝oleg a BFS tov´ abbi gyors´ıt´ as´ at el´erve.
38
Irodalomjegyz´ ek [1] Dimitris Achlioptas, Carla P. Gomes, Henry A. Kautz, and Bart Selman. Generating satisfiable problem instances. In Henry A. Kautz and Bruce W. Porter, editors, AAAI/IAAI, pages 256– 261. AAAI Press / The MIT Press, 2000. [2] Nina Amla, Xiaoqun Du, Andreas Kuehlmann, Robert P. Kurshan, and Kenneth L. McMillan. An analysis of SAT-based model checking techniques in an industrial environment. In Dominique Borrione and Wolfgang Paul, editors, Correct Hardware Design and Verification Methods, volume 3725 of Lecture Notes in Computer Science, pages 254–268. Springer Berlin Heidelberg, 2005. [3] Gilles Audemard and Lakhdar Sais. Circuit based encoding of CNF formula. In Jo˜ao MarquesSilva and Karem A. Sakallah, editors, Theory and Applications of Satisfiability Testing – SAT 2007, volume 4501 of Lecture Notes in Computer Science, pages 16–21. Springer Berlin Heidelberg, 2007. [4] Armin Biere, Marijn J. H. Heule, Hans van Maaren, and Toby Walsh, editors. Handbook of Satisfiability, volume 185 of Frontiers in Artificial Intelligence and Applications. IOS Press, February 2009. ´ am Mann and Tam´ [5] Zolt´ an Ad´ as Sz´ep. Accelerating backtrack search through a best-first-search strategy. Information Sciences, submitted. ´ am Mann and Tam´as Sz´ep. BCAT: A framework for analyzing the complexity of [6] Zolt´ an Ad´ algorithms. In Proceedings of the 8th IEEE International Symposium on Intelligent Systems and Informatics, pages 297–302, 2010. [7] Niklas E´en and Niklas S¨ orensson. An extensible SAT-solver. In Enrico Giunchiglia and Armando Tacchella, editors, SAT, volume 2919 of Lecture Notes in Computer Science, pages 502–518. Springer, 2003. ´ [8] Sz´ adeczky-Kardoss Ibolya Eva. szamitaselmelet.doc.
Sz´am´ıt´aselm´elet.
http://napszel.com/creations/szke_
[9] Carla P. Gomes, Bart Selman, and Henry A. Kautz. Boosting Combinatorial Search Through Randomization. In National Conference on Artificial Intelligence, pages 431–437, 1998. [10] Carla P. Gomes and David Shmoys. Completing quasigroups or latin squares: A structured graph coloring problem. In Proceedings of Computational Symposium on Graph Coloring and Generalizations, 2002. [11] Long Guo, Youssef Hamadi, Said Jabbour, and Lakhdar Sais. Diversification and intensification in parallel SAT solving. In David Cohen, editor, Principles and Practice of Constraint Programming – CP 2010, volume 6308 of Lecture Notes in Computer Science, pages 252–265. Springer Berlin Heidelberg, 2010. 39
Bart´ ok D´ avid
SAT-solverek gyors´ıt´asa best-first search algoritmussal
[12] Katona Gyula, Recski Andr´ as, and Szab´o Csaba. A sz´ am´ıt´ astudom´ any alapjai. Typotex, 2002. [13] Henry Kautz, Eric Horvitz, Yongshao Ruan, Carla Gomes, and Bart Selman. Dynamic restart policies. In Eighteenth national conference on Artificial intelligence, pages 674–681, Menlo Park, CA, USA, 2002. American Association for Artificial Intelligence. [14] Inˆes Lynce and Jo˜ ao Marques-Silva. Efficient haplotype inference with boolean satisfiability. In Proceedings of the 21st national conference on Artificial intelligence - Volume 1, AAAI’06, pages 104–109. AAAI Press, 2006. [15] Jo˜ ao Marques-Silva. Practical applications of boolean satisfiability. In WODES 2008 : 9th International Workshop on Discrete Event Systems, pages 74–80, 2008. [16] Ruben Martins, Vasco Manquinho, and Inˆes Lynce. An overview of parallel SAT solving. Constraints, 17(3):304–347, 2012. [17] Matthew W. Moskewicz, Conor F. Madigan, Ying Zhao, Lintao Zhang, and Sharad Malik. Chaff: engineering an efficient SAT solver. In Proceedings of the 38th annual Design Automation Conference, DAC ’01, pages 530–535, New York, NY, USA, 2001. ACM. [18] Henry Yuen and Joseph Bebel. Tough SAT project. http://toughsat.appspot.com/.
40