Konfliktgesteuerte Klausel Lernen der Klärung von Backtracking

9

Auf der Wikipedia-Seite hier wird der CDCL-Algorithmus ziemlich gut beschrieben (und es scheint, dass die Bilder von Folien stammen, die von Sharad Malik in Princeton erstellt wurden). Bei der Beschreibung des Zurückverfolgens heißt es jedoch nur "zum richtigen Punkt". MiniSAT verwendet auch eine Variante des CDCL-Algorithmus, daher habe ich dieses Dokument gelesen. Was sie zu sagen scheinen, ist, dass Sie zurückgehen sollten, bis die gelernte Klausel eine Einheitsklausel ist. Das ist sicherlich eine Klarstellung, aber für mich macht es keinen Sinn. Die letzte Zuweisung wird definitiv Teil der gelernten Konfliktklausel sein, soweit ich das beurteilen kann (vielleicht irre ich mich hier?). Wenn Sie also einen Schritt zurückverfolgen, werden Sie sofort die gelernte Klauseleinheit erstellen, der zuletzt zugewiesene Wert wird umgedreht. und der Algorithmus wird genau wie DPLL ablaufen, ohne jemals ausreichend weit zurückzuverfolgen. Außerdem folgt die Wikipedia-Seite nicht dieser Regel, sondern geht viel weiter zurück, als es wünschenswert erscheint.

Wie weit soll man zurückgehen?

Jake
quelle

Antworten:

7

Hier ist der relevante Absatz aus dem MiniSAT-Papier:

Die Entscheidungsphase wird fortgesetzt, bis entweder alle Variablen zugewiesen wurden. In diesem Fall haben wir ein Modell oder es ist ein Konflikt aufgetreten. Bei Konflikten wird die Lernprozedur aufgerufen und eine Konfliktklausel erstellt. Der Pfad wird verwendet, um Entscheidungen stufenweise rückgängig zu machen, bis genau eines der Literale der gelernten Klausel ungebunden ist (sie sind alle im Konfliktpunkt ). Konstruktionsbedingt kann die Konfliktklausel nicht direkt von einem Konflikt zu einer Klausel mit zwei oder mehr ungebundenen Literalen übergehen. Wenn die Klausel für mehrere Entscheidungsebenen einheitlich bleibt, ist es vorteilhaft, die niedrigste Ebene zu wählen (als Backjumping oder nicht chronologisches Backtracking bezeichnet ).F.einlse

Ein Punkt, den Sie anscheinend übersehen haben, ist, dass der Löser hier nicht aufhört, sobald die gelernte Klausel aufgrund rückgängig gemachter Zuweisungen (Backtracking) zur Einheit wird. Es könnte andere Aufgaben vor dieser geben, die keinen Einfluss auf den aktuellen Konflikt haben, und experimentell hat sich gezeigt, dass es besser ist, diese nicht zusammenhängenden Aufgaben auch rückgängig zu machen. Der Solver macht also weiterhin Zuweisungen rückgängig, bis das nächste Rückgängigmachen die gelernte Klausel nicht mehr einheitlich macht, dh mehr als eine nicht zugewiesene Variable enthält. Der Solver stoppt hier, führt die Einheitenausbreitung aus, um die Einheitsklausel zu erfüllen, und setzt dann die Suche fort, wobei Variablen normal zugewiesen werden.

Beachten Sie auch, dass die aktuelle Entscheidungsvariable möglicherweise nicht in der gelernten Klausel vorhanden ist. Eine übliche Strategie für einen CDCL-Löser besteht darin, den ersten eindeutigen Implikationspunkt zu finden und diese Variable in der gelernten Klausel zu verwenden. In einigen Fällen ist die erste UIP die Entscheidungsvariable, häufig jedoch nicht.

Kyle Jones
quelle