WikiDer > DPLL-Algorithmus
Es DPLL-Algorithmus (Davis-Putnam-Logemann-Loveland-Algorithmus) ist ein Algorithmus für die die Erfüllung untersuchen von a Vorschlag im Konjunktive Normalform (Dieses Problem wird auch als CNF-SAT bezeichnet). Der Algorithmus wurde 1962 von . veröffentlicht Martin Davis, Hilary Putnam, George Logemann und Donald W. Loveland als Verbesserung gegenüber einem früheren Davis- und Putnam-Algorithmus von 1960. Der Algorithmus verwendet maakt zurückverfolgen Wenn erforderlich.
Es gibt viele verbesserte Varianten des DPLL-Algorithmus, wie z Spreu, GRIFF und BirkeMin.
Operation
Der DPLL-Algorithmus untersucht die Erfüllbarkeit einer logischen Formel durch wiederholtes Verwenden von a Wahrheitswert a zuordnen wörtlich in der Formel. Danach wird die Formel vereinfacht und dann wird geprüft, ob die vereinfachte Formel erfüllt werden kann. Wenn dies möglich ist, ist die Originalformel erfüllbar und ansonsten nicht.
Der Algorithmus verwendet drei Regeln:
- Eine wörtliche Regel (OLR): als a Klausel mit 1 Literal auftritt, kann man diese Klausel erfüllen, indem man das Literal wahr macht und dann die anderen Klauseln entfernt, in denen dieses Literal ebenfalls vorkommt. Die Negation des betreffenden Literals kann aus den anderen Klauseln entfernt werden, da sie nicht mehr zur Erfüllung dieser Klauseln beiträgt.
- Reine wörtliche Regel (PLR, Kontrolle an reine wörtliche): nur wörtlich positiv (z.B p) oder Negativ (zum Beispiel ¬p) auftritt, kann man dieses Literal wahr machen und alle Klauseln entfernen, in denen es vorkommt (diese Klauseln sind jetzt erfüllt).
- Split-Regel: Wenn die obigen Regeln nicht mehr angewendet werden können, kann man ein Literal auswählen und dann auf zwei Arten vorgehen: man betrachtet die aktuellen Klauseln zusammen mit dem Fall, dass das ausgewählte Literal wahr ist, und dem Fall, dass das ausgewählte Literal falsch ist . Angenommen, man möchte prüfen, ob ist erfüllbar, dann ist es möglich, die Aufteilungsregel anzuwenden auf und dann prüfen ob oder ist erfüllbar. Der Algorithmus prüft nun beide Alternativen, und wenn eine unbefriedigend ist, wird der Algorithmus zurückverfolgen und fahren Sie fort, die Erfüllbarkeit des anderen zu prüfen.
Es ist auch möglich, mehr Regeln zu verwenden, um einen Satz von Klauseln zu vereinfachen, z wird entfernt, wenn eine Klausel vorhanden ist gilt ; die Klausel ist bereits erfüllt, wenn ist damit erfüllt ist für die Formelerfüllung nicht relevant. Eine weitere Regel basiert auf Tautologien: Eine Klausel kann fallengelassen werden, wenn sie ergänzende Literale weil eine solche Klausel immer erfüllt werden kann.
Erfüllbarkeitsprüfung
Eine Formel in normaler Konjunktivform kann erfüllt werden, wenn alle Klauseln erfüllt sind. Dies ist auch dann der Fall, wenn die Formel in konjunktiver Normalform keine Klauseln hat: Eine Formel in konjunktiver Normalform ist eine Konjunktion und eine Konjunktion ist auch dann erfüllt, wenn keine Konjunkte vorhanden sind. Wenn es dem DPLL-Algorithmus gelingt, alle Klauseln zu entfernen und die leere Formel zu belassen, ist die Formel erfüllbar. Es ist auch möglich, eine Formel in konjunktiver Normalform mit Kollektionen zu beachten: so wird als der folgende Satz von Klauseln notiert: . Wenn einer leere Sammlung Klauseln dann ist die Formel auch erfüllbar (dies ist die gleiche wie die vorherige Bedingung, da man nur die Darstellung der Formel geändert hat).
Wenn der Algorithmus die leere Klausel (eine Klausel ohne Literale) ableiten kann, ist die Formel unbefriedigend. Der Grund dafür ist, dass jede der Klauseln erfüllt sein muss und die leere Klausel nicht erfüllt werden kann: Eine Klausel ist eine Disjunktion von Literalen und eine Disjunktion ist nur erfüllt, wenn mindestens 1 der Literale wahr ist. Bei Verwendung von Sammlungen eine Sammlung von Klauseln unerfüllbar, wenn es gilt enthält die leere Menge.
Pseudocode
Drunter ist Pseudocode mit welcher DPLL rekursiv kann implementiert werden.[1] Die Eingabe des Algorithmus ist eine Formel F in normaler konjunktiver Form und die Ausgabe ist "erfüllbar" oder "unerfüllbar".
DPLL(F): F vereinfachen mit Vereinfachungsregeln wenn F ist leer: Rückkehr "erfüllbar" wenn F enthält leere Klausel: Rückkehr "unerfüllbar" wähle eine atomare Formel v Wähle einen Wahrheitswert truth b (richtig oder falsch) wenn DPLL(F mit v = b) ist "erfüllbar": Rückkehr "erfüllbar" wenn DPLL(F mit v = b) ist "erfüllbar": Rückkehr "erfüllbar" Rückkehr "unerfüllbar"
Bei den rekursiven Aufrufen wird die Formel F übergeben, nachdem sie aufgrund der gewählten Zuordnung von wahr oder falsch zur atomaren Formel vereinfacht wurde v. Jede Klausel, die durch diese Zuweisung erfüllt wird, wird entfernt, und die Negation des fraglichen Literals, falls vorhanden, wird aus den verbleibenden Klauseln entfernt.
Man könnte auch wahre oder falsche Zuordnungen zu atomaren Formeln nachverfolgen, damit anschließend die Model es ist bekannt, wie die Formel erfüllt wird (wenn sich die Formel als erfüllbar herausstellt).
Eigenschaften
Der DPLL-Algorithmus ist gesund, völlig und der beendet immer. Für jede der Regeln des DPLL-Algorithmus gilt: Wenn der ursprüngliche Satz von Klauseln (un)erfüllbar ist, dann sind es auch die resultierenden Sätze von Klauseln und umgekehrt. Mit der Split-Regel bleibt die (Un-)Zufriedenheit in mindestens einem der beiden Zweige erhalten.
Beispiele
Unerfüllbare Formel
Angenommen, man möchte untersuchen, ob ist erfüllbar.
Der Algorithmus geht so:
- Es gibt eine Klausel mit 1 Literal (), sodass die Ein-Literal-Regel angewendet werden kann: muss wahr sein, um diese Klausel zu erfüllen, also ist falsch.
- Die Ein-Literal-Regel kann wieder angewendet werden, diesmal am (q = falsch).
- Die Ein-Literal-Regel kann nun auf beide angewendet werden wenn . Wir wenden die Regel an auf .
Die leere Klausel wird nun abgeleitet, weil r = wahr und wird weggenommen; so bleibt die leere Klausel. Die Ableitung der leeren Klausel zeigt an, dass die Formel nicht erfüllbar war: Eine Klausel kann nur erfüllt werden, wenn mindestens 1 der Literale erfüllt ist und bei einer leeren Klausel keine, sodass die leere Klausel nicht erfüllt werden kann. Dies bedeutet, dass ist unbefriedigend: Es gibt keine Zuordnung von wahr oder falsch zu den atomaren Formeln, so dass die Formel wahr ist.
Unten ist das obige, aber dann mit vermerkt Kollektionen:
- (OLR, p = falsch)
- (OLR, q = falsch)
- (OLR, r = wahr)
Erfüllbare Formel
Die Formel lautet .
Der Algorithmus geht so:
- Wörtlich tritt nur positiv auf, daher kann die Formel mit u = true vereinfacht werden
- Beide Vereinfachungsregeln können nicht angewendet werden, aber die Aufteilungsregel kann angewendet werden. Wir haben uns getrennt und
- und
- Die Ein-Literal-Regel kann jetzt angewendet werden auf (s = wahr).
- Diese Formel kann mit t = false erfüllt werden. Dieser Zweig nach der Aufteilung ist somit befüllbar. Dies bedeutet, dass die ursprüngliche Formel erfüllbar ist und dass die Erfüllbarkeit von braucht nicht untersucht zu werden (ein Weg zur Erfüllung der Formel wurde bereits gefunden). Die ursprüngliche Formel kann mit u = wahr, s = wahr und t = falsch erfüllt werden. Diese Wahrheitswerte wurden während der Ausführung des DPLL-Algorithmus ermittelt.
Das oben erwähnte bei Sammlungen:
- (PLR, u = wahr)
- (aufgeteilt nach und )
- und
- (OLR an , s = wahr)
- (OLR an , t = falsch)
- Der Satz von Klauseln in diesem Zweig nach der Aufteilung ist leer, sodass die ursprüngliche Formel erfüllbar ist.
Siehe auch
Quellen, Anmerkungen und/oder Verweise
|