Verifikation reaktiver Systeme - Universität Kaiserslautern
Verifikation reaktiver Systeme - Universität Kaiserslautern
Verifikation reaktiver Systeme - Universität Kaiserslautern
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
131<br />
Head/Tail-Zeiger Zur Beschleunigung von Resolution und Subsumption werden<br />
Head- und Tail-Zeiger verwendet. In jeder Klausel werden zwei Literale (Head<br />
und Tail) beobachtet, auf die jeweils ein Zeiger verweist. Für die Head- und Tail-<br />
Literale gilt als Invariante, dass außerhalb von ihnen (vor Head und nach Tail)<br />
alle Literale den Wert 0 haben. Wird einem Head- oder Tail-Literal der Wert<br />
0 zugewiesen, wird der entsprechende Zeiger nach innen auf die nächste freie<br />
Variable verschoben. Zeigen beide Zeiger auf das gleiche Literal, ist die Klausel<br />
unit und für die letzte freie Variable wird die notwendige Belegung vorgenommen.<br />
Hat ein Literal in der Klausel den Wert 1, wird die Klausel nicht weiter<br />
beachtet, weil sie nicht unit werden kann. Werden in einem Backtrackingschritt<br />
Variablen freigesetzt, müssen die Head- und Tail-Zeiger neu berechnet werden.<br />
Head<br />
Tail<br />
Head<br />
Tail<br />
0<br />
0 0 0<br />
0<br />
Als Speicherstruktur schlagen die Autoren vor, zu jeder Variablen vier Listen<br />
von Klauseln zu führen. In jeder Liste sind die Klauseln aufgeführt, indem<br />
die Variable in positiver bzw. negativer Form als Head- bzw. Tail-Variable vorkommt.<br />
Bewertung In dem in [22] aufgeführten Vergleichstest wurden die SATO-Versionen<br />
2.2 und 3.0 gegenüber weiteren exakten SAT-Solvern (u. a. GRASP) verglichen.<br />
Als Grundlage wurde eine Auswahl von 15 Instanzen aus dem zweiten DI-<br />
MACS-Wettbewerb [23] verwendet. Während SATO 2.2 vergleichsweise schlecht<br />
abschnitt, erreichte SATO 3.0 gut bis sehr gute Zeitwerte.<br />
B.3 Chaff<br />
Chaff ist ein SAT-Solver, entwickelt von Moskewicz, Madigan, Zhao, Lhang und<br />
Malik [13]. Der Algorithmus ist ähnlich strukturiert wie GRASP, unterscheidet<br />
sich aber von diesem hauptsächlich in seinem BCP-Algorithmus und der Belegungsheuristik.<br />
Basierend auf der Erkenntnis, dass der größte Teil der Rechenzeit eines SAT-<br />
Solvers in der BCP-Funktion verbraucht wird, haben die Autoren ihre Implementierung<br />
in diesem Bereich besonders auf Geschwindigkeit ausgerichtet. Dies<br />
wird einerseits durch eine effiziente Programmierung, andererseits durch geeignete<br />
Datenstrukturen und deren Caching erreicht.<br />
BCP Chaff verwendet das Konzept von beobachteten Literalen (watched literals).<br />
Eine Klausel ist nur dann unit und somit für BCP relevant, wenn weniger als zwei<br />
Literale darin frei bzw. gleich 1 sind. Eine solche Klausel, die für BCP relevant ist,<br />
wird implizit genannt. Um den Wechseln einer Klausel von nicht-implizit nach<br />
implizit effizient zu überwachen, werden in jeder Klausel zwei Literale überwacht.<br />
Wird eines der beiden ausgewählten Literale mit 0 belegt, muss die Klausel