Algorytm wspinaczkowy dla zadania k-sat

Podobne dokumenty
Elementy logiki. Wojciech Buszkowski Wydział Matematyki i Informatyki UAM Zakład Teorii Obliczeń

Andrzej Wiśniewski Logika I Materiały do wykładu dla studentów kognitywistyki. Wykład 9. Koniunkcyjne postacie normalne i rezolucja w KRZ

Np. Olsztyn leży nad Łyną - zdanie prawdziwe, wartość logiczna 1 4 jest większe od 5 - zdanie fałszywe, wartość logiczna 0

LOGIKA Klasyczny Rachunek Zdań

Matematyka ETId Elementy logiki

Logika Stosowana. Wykład 1 - Logika zdaniowa. Marcin Szczuka. Instytut Informatyki UW. Wykład monograficzny, semestr letni 2016/2017

METODY DOWODZENIA TWIERDZEŃ I AUTOMATYZACJA ROZUMOWAŃ

Elementy logiki matematycznej

Schematy Piramid Logicznych

Metoda tabel semantycznych. Dedukcja drogi Watsonie, dedukcja... Definicja logicznej konsekwencji. Logika obliczeniowa.

Logika pragmatyczna. Logika pragmatyczna. Kontakt: Zaliczenie:

Adam Meissner SZTUCZNA INTELIGENCJA Problem spełnialności (SAT)

LOGIKA I TEORIA ZBIORÓW

RACHUNEK ZDAŃ 7. Dla każdej tautologii w formie implikacji, której poprzednik również jest tautologią, następnik także jest tautologią.

1 Wprowadzenie do algorytmiki

Metoda Karnaugh. B A BC A

Paradygmaty dowodzenia

Adam Meissner.

Przykłady zdań w matematyce. Jeśli a 2 + b 2 = c 2, to trójkąt o bokach długości a, b, c jest prostokątny (a, b, c oznaczają dane liczby dodatnie),

Metody Programowania

Metody dowodzenia twierdzeń i automatyzacja rozumowań Tabele syntetyczne: definicje i twierdzenia

Elementy logiki i teorii mnogości

Tautologia (wyrażenie uniwersalnie prawdziwe - prawo logiczne)

Tabu Search (Poszukiwanie z zakazami)

Spacery losowe generowanie realizacji procesu losowego

Logika pragmatyczna dla inżynierów

Pętle. Dodał Administrator niedziela, 14 marzec :27

Podstawowe Pojęcia. Semantyczne KRZ

5. OKREŚLANIE WARTOŚCI LOGICZNEJ ZDAŃ ZŁOŻONYCH

Kultura logiczna Klasyczny rachunek zdań 2/2

Andrzej Wiśniewski Logika I Materiały do wykładu dla studentów kognitywistyki. Wykład 10. Twierdzenie o pełności systemu aksjomatycznego KRZ

Inteligencja obliczeniowa Laboratorium 2: Algorytmy genetyczne

Temat: Algorytmy zachłanne

Wstęp do logiki. Klasyczny Rachunek Zdań II

MATEMATYKA DYSKRETNA, PODSTAWY LOGIKI I TEORII MNOGOŚCI

Wstęp do Techniki Cyfrowej... Algebra Boole a

Logika Matematyczna (10)

Automatyczne planowanie oparte na sprawdzaniu spełnialności

Metoda Tablic Semantycznych

Obliczenia iteracyjne

Algorytm poprawny jednoznaczny szczegółowy uniwersalny skończoność efektywność (sprawność) zmiennych liniowy warunkowy iteracyjny

Politechnika Gdańska Wydział Elektrotechniki i Automatyki Katedra Inżynierii Systemów Sterowania

ROZDZIAŁ 1. Rachunek funkcyjny

Statystyka i opracowanie danych Podstawy wnioskowania statystycznego. Prawo wielkich liczb. Centralne twierdzenie graniczne. Estymacja i estymatory

0.1. Logika podstawowe pojęcia: zdania i funktory, reguły wnioskowania, zmienne zdaniowe, rachunek zdań.

Wykład 6. Reguły inferencyjne systemu aksjomatycznego Klasycznego Rachunku Zdań

Języki programowania zasady ich tworzenia

Arytmetyka liczb binarnych

ALHE. prof. Jarosław Arabas semestr 15Z

Ziemia obraca się wokół Księżyca, bo posiadając odpowiednią wiedzę można stwierdzić, czy są prawdziwe, czy fałszywe. Zdaniami nie są wypowiedzi:

Wykład z Technologii Informacyjnych. Piotr Mika

Wykład z równań różnicowych

W. Guzicki Próbna matura, grudzień 2014 r. poziom rozszerzony 1

Logika Stosowana. Wykład 7 - Zbiory i logiki rozmyte Część 3 Prawdziwościowa logika rozmyta. Marcin Szczuka. Instytut Informatyki UW

OSTASZEWSKI Paweł (55566) PAWLICKI Piotr (55567) Algorytmy i Struktury Danych PIŁA

Wyszukiwanie binarne

Opis efektów kształcenia dla programu kształcenia (kierunkowe efekty kształcenia) WIEDZA. rozumie cywilizacyjne znaczenie matematyki i jej zastosowań

Klasyczny rachunek zdań 1/2

SYSTEMY UCZĄCE SIĘ WYKŁAD 4. DRZEWA REGRESYJNE, INDUKCJA REGUŁ. Dr hab. inż. Grzegorz Dudek Wydział Elektryczny Politechnika Częstochowska

Jak wnioskują maszyny?

Programowanie celowe #1

III rok kognitywistyki UAM,

Wprowadzenie do logiki Zdania, cz. III Język Klasycznego Rachunku Predykatów

Metody numeryczne I Równania nieliniowe

Złożoność obliczeniowa

Elementy logiki. Algebra Boole a. Analiza i synteza układów logicznych

Kultura logiczna Klasyczny rachunek zdań 1/2

Luty 2001 Algorytmy (7) 2000/2001

W rachunku prawdopodobieństwa wyróżniamy dwie zasadnicze grupy rozkładów zmiennych losowych:

Uwagi wprowadzajace do reguł wnioskowania w systemie tabel analitycznych logiki pierwszego rzędu

Za pierwszy niebanalny algorytm uważa się algorytm Euklidesa wyszukiwanie NWD dwóch liczb (400 a 300 rok przed narodzeniem Chrystusa).

Pętla for. Matematyka dla ciekawych świata -19- Scilab. for i=1:10... end. for k=4:-1:1... end. k=3 k=4. k=1. k=2

Lista 1 (elementy logiki)

Heurystyczne metody przeszukiwania

Rachunek logiczny. 1. Język rachunku logicznego.

ROZWIĄZYWANIE RÓWNAŃ NIELINIOWYCH

Systemy liczbowe. 1. Przedstawić w postaci sumy wag poszczególnych cyfr liczbę rzeczywistą R = (10).

Rozdział 1 PROGRAMOWANIE LINIOWE

Opis: Instrukcja warunkowa Składnia: IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek].

... (środowisko) minut

5. Rozwiązywanie układów równań liniowych

Algebrę L = (L, Neg, Alt, Kon, Imp) nazywamy algebrą języka logiki zdań. Jest to algebra o typie

Notatki do tematu Metody poszukiwania rozwiązań jednokryterialnych problemów decyzyjnych metody dla zagadnień liniowego programowania matematycznego

Logika Matematyczna. Zadania Egzaminacyjne, 2007

Aproksymacja funkcji a regresja symboliczna

Znaleźć wzór ogólny i zbadać istnienie granicy ciągu określonego rekurencyjnie:

Metody numeryczne Wykład 4

Wstęp do informatyki- wykład 7

vf(c) =, vf(ft 1... t n )=vf(t 1 )... vf(t n ).

W przeciwnym wypadku wykonaj instrukcję z bloku drugiego. Ćwiczenie 1 utworzyć program dzielący przez siebie dwie liczby

Logika formalna wprowadzenie. Ponieważ punkty 10.i 12. nie były omawiane na zajęciach, dlatego można je przeczytać fakultatywnie.

Elementy logiki Klasyczny rachunek zdań. Wojciech Buszkowski Zakład Teorii Obliczeń Wydział Matematyki i Informatyki Uniwersytet im.

Sortowanie topologiczne skierowanych grafów acyklicznych

ZADANIE 1. Ważenie (14 pkt)

Symulacja w przedsiębiorstwie

Hurtownie danych. Przetwarzanie zapytań. ZAPYTANIA NA ZAPLECZU

Logika intuicjonistyczna

METODA SYMPLEKS. Maciej Patan. Instytut Sterowania i Systemów Informatycznych Uniwersytet Zielonogórski

O ISTOTNYCH OGRANICZENIACH METODY

Drzewa Semantyczne w KRZ

Transkrypt:

Algorytm wspinaczkowy dla zadania k-sat 1 Problem k-spełnialności Niech L 0 oznacza język rachunku zdań. Do jego formalizacji konieczne są zmienne zdaniowe (nazywane formułami atomowymi, lub krótko atomami) oraz funktory zdaniotwórcze, czyli spójniki zdaniowe: (negacja), (alternatywa), (koniunkcja), (implikacja) i (równoważność). Owe spójniki traktowane są w logice jako funktory w funkcjach prawdziwościowych, to jest w takich funkcjach, których wartościami są stałe logiczne PRAWDA lub FAŁSZ oznaczane zwykle symbolami 1 i 0. Zbiór formuł języka L 0 (nazywanych formułami boolowskimi) określa się następująco (a) atom jest formułą, (b) jeżeli p jest formułą to p jest formułą, (c) jeżeli p, q są formułami są także (p q), (p q), (p q), (p q), (d) innych formuł nie ma. O formule boolowskiej mówimy, że jest w koniunkcyjnej postaci normalnej jeżeli można przedstawić ją w postaci koniunkcji klauzul, gdzie pod pojęciem klauzuli rozumie się alternatywę literałów. Literałem nazywamy zmienną zdaniową lub jej negację. Przykład 1.1. Formuła w koniunkcyjnej postaci normalnej literał {}}{ ( p q r) (q s) (r s q) }{{} klauzula Taka reprezentacja pozwala traktować formułę ϕ jako zbiór klauzul C = C 1,..., C M. Skoro każda klauzula jest alternatywą pewnej liczby literałów, często symbol alternatywy zamienia się przecinkiem. W ten sposób formułę z powyższego przykładu reprezentuje zbiór C = {C 1, C 2, C 3 } gdzie C 1 = ( p, q, r), C 2 = (q, s), C 3 = (r, s, q). Jeżeli każda klauzula wchodząca w skład danej formuły boolowskiej ϕ zawiera co najwyżej k literałów to mówimy, że ϕ jest w k-koniunkcyjnej postaci normalnej. Formułę boolowską ϕ nazywamy spełnialną, jeżeli istnieje wartościowanie występujących w niej zmiennych w zbiorze wartości logicznych {0, 1} takie, które spełnia tę formułę, tzn. nadaje jej wartość 1. Problem spełnialności polega na rozstrzygnięciu, czy dana formuła boolowska w koniunkcyjnej postaci normalnej jest spełnialna. Podobnie problem k-spełnialności polega na sprawdzeniu, czy dana formuła w k-koniunkcyjnej postaci normalnej jest spełnialna. W literaturze problemy te oznaczane są odpowiednio skrótami SAT i k-sat. Zainteresowanie problemem spełnialności 1

wynika z faktu, że wiele rzeczywistych problemów, jak chociażby rozważane na gruncie sztucznej inteligencji zadania planowania, spełnialności ograniczeń, diagnozy czy interpretacji obrazów cyfrowych koduje się w naturalny sposób w formie problemu k-sat 1. Przegląd zagadnień związanych z tym problemem zawiera praca [?]. Jeżeli dla formuły zadanej zbiorem klauzul C poszukujemy takiego wartościowania, które maksymalizuje liczbę spełnionych klauzul z C, to mówimy o zadaniu MAX-SAT. Dodatkowo każdej klauzuli ze zbioru C można przypisać (całkowitoliczbową) wagę i poszukiwać wartościowania maksymalizującego łączną wagę spełnionych klauzul. Mamy wówczas do czynienia z ważonym problemem MAX-SAT. Przegląd zastosowań omawianych tu problemów, algorytmy wykorzystywane do ich rozwiązywania jak również szereg zadań testowych można znaleźć w pracach, [?], [?], [?], [?]. Kody źródłowe implementujące wiele spośród algorytmów przeznaczonych do rozwiązywania i badania problemów spełnialności można znaleźć na stronie http://www.cs.ubc.ca/~hoos/satlib/ index-ubc.html. Pokazuje się, [?], że zarówno problem spełnialności jak i k-spełnialności, k 3, są problemami NP-zupełnymi 2. Natomiast problem MAX-SAT i ważony MAX-SAT są problemami NP-trudnymi. Algorytmy stosowane do rozwiązywania problemów spełnialności można podzielić na zachłanne (kompletne) i przybliżone, [?]. Algorytmy pierwszej grupy przeszukują całą przestrzeń możliwych rozwiązań, natomiast algorytmy drugiej grupy wykorzystują heurystyki, np. stochastyczne algorytmy przeszukiwania lokalnego. W przypadku stosowania algorytmów przybliżonych brak rozwiązania nie oznacza, że konkretny problem nie ma takiego rozwiązania. Przeszukiwanie przestrzeni rozwiązań stosowane w pierwszej grupie algorytmów, nie oznacza testowania wszystkich możliwych wartościowań. Korzysta się tu raczej z technik powracania (backtracking) stosowanych w systemach sztucznej inteligencji. Jedną z takich technik jest procedura Davisa- Putnama-Logemanna-Lovelanda (DPLL), [?], stosowana w automatycznym dowodzeniu twierdzeń. Polega ona na przydzielaniu kolejnym zmiennym zdaniowym wartości logicznych i usuwaniu klauzul, które przy danym przypisaniu są prawdziwe, ewentualnie usuwaniu z klauzul tych literałów, które przyjmują wartość 0. Jeśli w trakcie tych operacji jedna z klauzul stała się pusta, tzn. usunięto z niej wszystkie zmienne, wówczas algorytm wraca do ostatniego podstawienia i wypróbowuje jego inny wariant. Inny interesujący pomysł na rozwiązanie problemu k-sat przedstawiono w [?]. Wykorzystuje on wariant algorytmu stosowanego w propagacji przekonań w sieciach bay- 1 Por. np. H.A. Kautz, B. Selman. Planning as satisfiability. In: Proceedings of the 10th ECAI, 1992, pp. 359-363 oraz R. Reiter, A. Mackworth. A logical framework for depicition and image interpretation. Artificial Intelligence 41,1992, 123-155. Zbiory testowych zadań k-sat zawiera praca [?]. 2 Dla k = 1 lub 2 istnieją wielomianowe algorytmy deterministyczne sprawdzające, czy formuła w k-koniunkcyjnej postaci normalnej jest spełnialna, [?]. 2

esowskich. Rysunek 1: Prawdopodobieństwo znalezienia satysfakcjonującego podstawienia w zadaniu 3-SAT w zależności od stosunku r = M/N liczby klauzul (M) do liczby zmiennych N. Różne kroje linii odpowiadają różnym wartościom N. Prace teoretyczne dotyczące własności zadania k-sat pokazują, że szanse jego rozwiązania zależą istotnie od stosunku r liczby klauzul, M, do liczby zmiennych, N, występujących w tym zadaniu. Na użytek tych badań formułuje się losowy wariant zadania k-sat, w którym zmienne wchodzące w skład klauzuli wybierane są losowo z ustalonego zbioru V i każda z wybranych zmiennych jest negowana z prawdopodobieństwem 1. W przypadku gdy 2 k = 3 zaobserwowano, że dla wartości r 4.3 zachodzi zjawisko przypominające przejście fazowe obserwowane w układach fizycznych por. rys. 1. Mianowicie, dla małych wartości parametru r problem jest słabo uwarunkowany i bardzo łatwo można znaleźć jego rozwiązanie; w przypadku dużych wartości r na zbiór zmiennych nałożono zbyt wiele ograniczeń i znalezienie satysfakcjonującego podstawienia jest bardzo trudne. Okazuje się, że fenomen przejść fazowych odgrywa witalną rolę w probabilistycznej analizie zadań optymalizacji kombinatorycznej. Problem ten omówiono szczegółowo w [?]. 2 Algorytm GSAT GSAT [?] to randomizowany zachłanny algorytm losowego przeszukiwania przeznaczony do rozwiązywania zadań spełnialności formuł, które omówiono w punkcie 1. Nakierowany jest on na wyszukiwanie takiego wartościowania W zmiennych występujących w formule reprezentowanej przez zbiór klauzul K, które spełnia tę formułę. Innymi słowy, algorytm GSAT poszukuje modelu dla danej formuły. Działanie algorytmu przedstawionego w postaci pseudokodu 1 polega na modyfikacjach losowo zainicjowanego rozwiązania (tzn. wartościowania), poprzez zmianę wartości występujących w nim zmiennych w taki sposób, aby 3

każdej zmianie towarzyszył wzrost liczby spełnionych klauzul. Jeżeli do budowy formuły użyto N zmiennych, to wartościowanie ma postać łańcucha W o długości N, którego i-ty element, W[i] {0, 1}. W takim przypadku zmianę wartości i-tej zmiennej można przedstawić w postaci W[i] := 1 - W[i]. Jakość testowanej zmiany DIFF[i] obliczamy w oparciu o równanie DIFF[i] = MAKE[i] - BREAK[i] gdzie MAKE[i] oznacza liczbę klauzul niespełnionych przez wartościowanie W, które zostaną spełnione jeśli wartość i-tej zmiennej zostanie zmieniona na przeciwną, natomiast BREAK[i] to liczba klauzul spełnionych przez wartościowanie W, które będą niespełnione jeżeli wartość i-tej zmiennej będzie zamieniona na przeciwną. Jeżeli DIFF[i] > 0, to całkowita liczba niespełnionych klauzul maleje; jest to tzw. ruch w dół. Jeżeli DIFF[i] = 0, to całkowita liczba spełnionych klauzul pozostaje bez zmian; jest to tzw. ruch poboczny. Wreszcie, jeżeli DIFF[i] < 0, to mamy do czynienia z ruchem w górę. Każde wykonanie wewnętrznej pętli jest nazywane zamianą ; maksymalną liczbę możliwych do wykonania zmian wartości zmiennych zdaniowych określa parametr MAX-FLIPS. Każde wykonanie zewnętrznej pętli nazywamy próbą; maksymalną liczbę prób wyznacza parametr MAX-TRIES. Jeżeli w ciągu, zadanej parametrami MAX-FLIPS i MAX-FLIPS liczbie prób nie znaleziono rozwiązania, zwracany jest komunikat o niemożności jego znalezienia. Może to oznaczać zarówno konieczność modyfikacji parametrów jak też i fakt, że dana formuła nie jest spełnialna. Oznacza to, że GSAT jako typowy algorytm przeszukiwania lokalnego jest algorytmem niekompletnym: komunikat o niemożności znalezienia rozwiązania równie dobrze świadczyć o nieistnieniu takiego rozwiązania jak też o ewentualnej konieczności modyfikacji parametrów sterujących. Zauważmy, że wartość wskaźnika DIFF[i] musi być wyznaczona dla wszystkich zmiennych tylko raz, gdy wygenerowano nowe wartościowanie. W kolejnych przebiegach wartość tego wskaźnika wyznacza się tylko dla zmiennych zależnych od ostatnio modyfikowanej zmiennej p, tzn. zmiennych występujących w tych samych klauzulach, w których występuje zmienna p. Istotnie, niech p C oznacza, że zmienna p występuje w klauzuli C. Wówczas C zal (F, x) = {C F : x C} jest zbiorem klauzul reprezentujących formułę F zależnych od zmiennej x. Jeżeli więc x / C zal (F, x) to wartość wskaźnika DIFF nie ulega zmianie. Jeżeli formuła F składa się z M klauzul zbudowanych z N zmiennych zdaniowych, a każda klauzula zawiera co najwyżej k zmiennych to złożoność wyznaczenie wartości wskaźnika DIFF dla wszystkich zmiennych jest procesem o złożoności O(kM), natomiast zakładając dodatkowo, że liczba klauzul zależnych od dowolnej zmiennej nie przekracza wartości z, znajdujemy, że aktualizacja tego wskaźnika w kolejnych krokach jest procesem o złożoności O(kz). Przykład 2.1. Rozważmy dla przykładu formułę F złożoną z czterech klauzul: 4

Algorithm 1 Algorytm GSAT [?] WE: zbiór klauzul K zbudowanych z N zmiennych, oraz liczby: MAX-TRIES - maksymalna liczba prób, MAX-FLIPS - maksymalna liczba zmian wartości zmiennych. WY: wartościowanie w spełniające zbiór K, o ile takie istnieje. begin for i = 1 to MAX-TRIES w losowo wygenerowane wartościowanie; for j = 1 to MAX-FLIPS if (w spełnia zbiór klauzul K) zwrócić w stop for k = 1 to N obliczyć wartość DIFF[k] wskazującą o ile wzrośnie liczba spełnionych klauzul po zmianie wartości zmiennej k; end for WIN-LIST lista zmiennych o najwyższej wartości DIFF p losowo wybrana pozycja z listy WIN-LIST w wartościowanie, w którym w[p] = 1 w[p] end for end for zwrócić nie znaleziono satysfakcjonującego wartościowania ; end F = ( x 1 x 2 x 3 ) (x 2 x 4 x 5 ) (x 3 x 4 x 2 ) (x 3 x 5 x 6 ) Jest to formuła w koniunkcyjnej postaci normalnej, której czynniki nazywamy klauzulami. Mamy w tym przypadku M = 4, N = 6, k = 3, z = 3. W pierwszej klauzuli ( x 1 x 2 x 3 ) zmienna zdaniowa x 1 występuje wspólnie ze zmiennymi x 2, x 3. Zatem zmienne te są zależne. Podobnie zmienna x 2 występuje zarówno w tej klauzuli jak i w dwóch kolejnych klauzulach: (x 2 x 4 x 5 ) oraz (x 3 x 4 x 2 ). Chociaż w chwili jego publikacji (tzn. 1992 r.) GSAT skutecznie rywalizował z dostępnymi wówczas algorytmami systematycznego przeszukiwania, jego jakość pozostawia wiele do życzenia w porównaniu z aktualnymi modyfikacjami. Szczegółowa analiza algorytmu GSAT 3 wskazuje, że ani zachłanność ani losowość nie wpływają w istotny sposób na jego zachowanie; wspinanie się odgrywa natomiast ważną rolę jedynie w początkowej fazie przeszukiwania przestrzeni rozwiązań. Aby doświadczalnie przekonać się o tym ostatnim fakcie, przeanalizowano zachowanie algorytmu RSAT różniącego się od poprzedniego jedynie tym, że jako nowe rozwiązanie przyjmowany jest losowo wybrany 3 Wyniki tej analizy przedstawiono w pracy I.P. Gent, T. Walsh. The enigma of SAT hill-climbing procedures, citeseer.ist.psu.edu/gent92enigma.html. 5

sąsiad aktualnego rozwiązania. Okazało się, że RSAT znajduje poprawne rozwiązania, wymaga to jednak znacznie więcej czasu. Inny interesujący pomysł polegał na tym, aby zamiast koncentrować się na tych zmiennych, których zmiana zapewnia największą wartość wskaźnika DIFF, procedura odpowiedzialna za przeszukiwanie sąsiedztwa zwracała te zmienne, które zapewniają przyrost funkcji celu (ewentualnie, jeśli takich zmiennych nie ma, te zmienne, które nie pogarszają wartości funkcji celu, a jeśli i takich zmiennych nie ma wszystkie zmienne). Konkretne rozwiązanie wybierane jest ostatecznie w sposób losowy z uzyskanego zbioru. Okazuje się, że taki algorytm, nazwany CSAT (litera C pochodzi od słowa Cautious), zachowuje się tylko nieznacznie gorzej od GSAT. Jedną ze zdecydowanych wad algorytmu GSAT jest wielokrotne badanie identycznych rozwiązań. Skoro tak, to rozsądną modyfikacją wydaje się wyposażenie algorytmu w pamięć. Eksperymenty numeryczne wskazują, że redukcję iteracji uzyskuje się pozwalając, aby algorytm pamiętał ostatnią modyfikację i nie powtarzał jej w kolejnej iteracji. Pamiętanie bardziej odległych modyfikacji nie poprawia znacząco zachowania algorytmu. Jest to algorytm z przeszukiwaniem tabu. Przed omówieniem modyfikacji algorytmu GSAT zastanówmy się chwilę nad jego implementacją. Można tu skorzystać albo z gotowej implementacji 4 albo z rozwiązania Spears a [?], który do reprezentacji konkretnego problemu zaproponował użycie dwóch list: listy klauzul, c-list oraz listy zmiennych, v-list. i-ta pozycja listy c-list zawiera informacje o i-tej klauzuli zapisane także w postaci listy złożonej z następujących pól: pierwszy element listy odpowiadającej i-tej klauzuli (oznaczmy go c-list[i][0]) zawiera liczbę literałów, które sa prawdziwe w danym wartościowaniu, a pozostałe elementy tej listy zawierają zmienne występujące w tej klauzuli. Podobnie i-ty element listy v-list, oznaczmy go v-list[i], zawiera zapisane w postaci listy informacje o i-tej zmiennej: element v-list[i][0] przedstawia liczbe klauzul, w których ta zmienna występuje, a pozostałe elementy informują, czy w konkretnej klauzuli zmienna jest negowana czy nie. Przyjęto tu konwencję, że negacji zmiennej odpowiada znak minus w odpowiedniej reprezentacji. Przykład 2.2. Rozważmy ponownie formułę F z przykładu 2.1. Mamy tam cztery klauzule i sześć zmiennych. Początkowo obie listy (ich zawartość przedstawiamy dla wygody w postaci tablic) wyglądają następująco: Przykładowo, pierwsza klauzula zawiera trzy zmienne, przy czym pierwsza zmienna jest zanegowana, a zmienne o numerach 2 i 3 są literałami pozytywnymi. Dlatego w ostatniej pozycji pierwszego wiersza w tablicy 1 mamy listę {-1, 2, 3}. Zmienna x 1 występuje jako literał negatywny tylko w pierwszej klauzuli, dlatego ostatni element pierwszego wiersza w tablicy 2 jest równy {-1}. Jeżeli teraz wybierzemy wartościowanie W = 010000 to zmianie ulegnie druga kolumna tablicy 2. Pokazuje ona, że w pierwszej klauzuli dwa literały przyjęły wartość (prawda), w drugiej i trzeciej klauzuli tylko jeden literał jest prawdziwy, a w trzeciej żaden. Reprezentacja ta jest szczególnie użyteczna 4 Dostępnej pod adresem http://www.cs.ubc.ca/~hoos/satlib/index-ubc.html. 6

Klauzula l-ba prawdziwych zmienne literałów w klauzuli klauzula 1 0 {-1, 2, 3} klauzula 2 0 {2, 4, 5} klauzula 3 0 {-2, 3, 4} klauzula 4 0 {3, -5, 6} Tabela 1: Lista klauzul dla pustego wartościowania zmienna liczba klauzul klauzule zawierających zawierające zmienną zmienną x 1 1 {-1} x 2 3 {1, 2, -3} x 3 3 {1, 3, 4} x 4 2 {2, 3} x 5 2 {2, -4} x 6 1 {4} Tabela 2: Lista zmiennych do szybkiego obliczania wartości wskaźnika DIFF omówionego na stronie 4. Prostym i zarazem skutecznym przykładem modyfikacji omawianego tu algorytmu jest algorytm GWSAT, czyli algorytm GSAT wzbogacony o mechanizm przypadkowego błądzenia. Celem tego mechanizmu jest rozstrzyganie konfliktów polegające na tym, że ze zbioru niespełnionych klauzul wybiera się losowo pewną klauzulę c, a następnie modyfikuje się losowo wybraną zmienną zdaniową x należącą do tej klauzuli wymuszając wymuszając tym samym spełnialność klauzuli c. Algorytm GWSAT działa w ten sposób, że w każdej iteracji podejmuje się ze stałym prawdopodobieństwem wp 5 decyzję, czy wykonać standardowe przeszukiwanie (polegające na wyborze zmiennej o maksymalnej wartości wskaźnika DIFF) czy też błądzenie przypadkowe. Dla dowolnej dodatniej wartości wp algorytm pozwala na dowolnie długie sekwencje błądzenia; prawdopodobieństwo realizacji sekwencji o długości r jest równe wp r. Oznacza to, że prawdopodobieństwo tego, że GWSAT zwróci model dla spełnialnej formuły K dąży do jedności, gdy czas jego działania dąży do nieskończoności. Jest to więc algorytm PAC-zupełny. W algorytmie HSAT wybierając pozycję, uwzględnia się dodatkowo czas jej ostatniej modyfikacji, a więc jej wiek. Wiek każdej zmiennej wzrasta wraz z iteracją, natomiast zmodyfikowanej zmiennej przypisuje sie wiek równy zeru. Chodzi o to, że wybierając zmienne z listy WIN LIST stosowanej w 5 Skrót ten pochodzi od zwrotu walk probability. Czasami używa się też terminu noise setting. 7

Klauzula l-ba prawdziwych zmienne literałów w klauzuli klauzula 1 2 {-1, 2, 3} klauzula 2 1 {2, 4, 5} klauzula 3 0 {-2, 3, 4} klauzula 4 1 {3, -5, 6} Tabela 3: Zmodyfikowana lista klauzul dla wartościowania W = 010000 algorytmie 1, może się zdarzyć, że pewne zmienne nie będą nigdy wybrane, co może powodować przedwczesną zbieżność algorytmu. Dlatego z listy WIN LIST wybiera się najstarszą zmienną, Strategia taka nie chroni jednak przed przedwczesną zbieżnością. Znacznie lepszym okazuje się połączenie strategii HSAT z błądzeniem przypadkowym, co skutkuje algorytmem HWSAT [?]. Jeszcze inny pomysł zaproponowano w pracy [?]. Wskaźnik jakości DIFF zastąpiono tu nowym wskaźnikiem score b określającym liczbę klauzul, które będąc spełnione przy danym wartościowaniu będą niespełnione po jego modyfikacji. Niech c będzie klauzulą niespełnioną dla danego wartościowania W i niech v będzie zmienną zdaniową należącą do tej klauzuli. Schemat postępowania jest teraz następujący: Jeżeli v jest taką zmienną, dla której score b (v) = 0, a więc zamiana (negacja) jej aktualnej wartości nie jest destrukcyjna, to ta zmienna jest negowana. Jeżeli w c istnieje kilka zmiennych, dla których score b (v) = 0, to do negacji wybiera się losowo jedną z nich. Jeżeli score b (v) > 0 dla każdej zmiennej z c, to z prawdopodobieństwem 1 p wybieramy zmienną z minimalną wartością score b. W przypadku przeciwnym (tzn. z prawdopodobieństwem p) realizuje się błądzenie przypadkowe, tzn. wybiera się losowo jedną ze zmiennych wchodzących w skład klauzuli c. Chociaż powyższy algorytm, nazywany WalkSAT/SKC, przypomina algorytm GWSAT, to jednak oba algorytmy wykazują zdecydowanie różne zachowanie [?]; WalkSAT/SKC przewyższa znacznie algorytm GWSAT, gdyż jest znacznie mniej zachłanny. Wynika to przede wszystkim z faktu, że o ile w tym pierwszym błądzenie przypadkowe realizowane jest tylko wówczas, gdy każdej zmiennej należącej do losowo wybranej niespełnionej klauzuli c przypisano dodatnią wartość wskaźnika score b, o tyle w przypadku algorytmu GWSAT szansa zainicjowania błądzenia zależy wyłącznie od prawdopodobieństwa wp. Zatem WalkSAT/SKC wybiera zmienną ze znacznie mniejszego zbioru sąsiadów. Z drugiej jednak strony, z uwagi na stosowanie różnych funkcji oceniających, negowana w algorytmie GWSAT zmienna może psuć pewne klauzule, ale liczba zepsutych klauzul może być zredukowana przez spowodowanie spełnialności innych klauzul. W przypadku Walk/SKC wybór zmiennej może 8

popsuć mniejszą liczbę klauzul, ale z pewnością popsuje kilka klauzul spełnionych przez aktualne wartościowanie. Ogólnie twierdzi się [?], że chociaż WalkSAT/SKC dominuje probabilistycznie GWSAT (w sensie liczby negacji wymaganych do znalezienia modelu danej formuły), to jego zachowanie nie przewyższa algorytmu HWSAT. Wariantem algorytmu WalkSAT/SKC jest Novelty, w którym do wyboru zmiennej wykorzystuje się jej wiek, ale jako funkcję oceny przyjmuje się wskaźnik DIFF. Podobnie jak poprzednio wybiera się niespełniona przez aktualne wartościowanie klauzulę c i poszukuje się zmiennej v o najwyższej wartości wskaźnika DIFF i drugiej, co do wartości tego wskaźnika, zmiennej v. Jeżeli v nie jest najmłodszą zmienną, to jest ona zawsze negowana; w przypadku przeciwnym neguje się ją z prawdopodobieństwem 1 p, a z prawdopodobieństwem p modyfikacji ulega wartość zmiennej v. Sortując zmienne ze względu na wartości wskaźnika DIF F, w przypadku zmiennych o identycznych wartościach wskaźnika jako pierwszą wybieramy tę zmienną, która jest pierwsza w klauzuli c. Własności tego algorytmu można znacznie poprawić stosując nakierowaną na rozwiązywanie konfliktów procedurę błądzenia przypadkowego wprowadzoną w algorytmie GWSAT. W uzyskanym w ten sposób algorytmie Novelty+ wybrana zgodnie ze strategią Novelty zmienną podlega modyfikacji z prawdopodobieństwem 1 wp, a z prawdopodobieństwem wp realizuje się krok losowy typowy dla GW SAT. 9