Ausarbeitung

Werbung
Recursive Learning
und GRASP
SAT-Engines-Seminar
WS 2000/01
Stefan Disch
Die Papers
1994:
Recursive Learning: A New Implication Technique for Efficient
Solutions to CAD Problems – Test, Verfifications, and
Optimization
Wolfgang Kunz, Dhiraj K. Pradhan
1996:
GRASP - A New Search Algorithm for Satisfiability
João P. Marques-Silva, Karem A. Sakallah
1998:
Improving Satisfiability Algorithms by using Recursive
Learning João P. Marques-Silva
1999:
Combinational Equivalence Checking Using Satisfiability and
Recursive Learning
João P. Marques-Silva, Thomas Glass
Recursive Learning und GRASP
Inhalt
Recursive Learning
GRASP
GRASP und Recursive Learning
Combinational Equivalence Checking und SAT
Recursive Learning
Lösung von Entscheidungsproblemen
Ursprünglich für kombinatorische Schaltkreise
Bei GRASP Teil der Preprocessing Engine oder der
Deduction Engine
Recursive Learning
Begriffe / Definitionen (1)
Gegeben sei ein Gatter G, welches mindestens ein Eingangs- oder Ausgangsignal spezifiziert
hat: Gatter G wird als unjustified bezeichnet, wenn es ein oder mehrere nicht spezifizierte
Eingangs- oder Ausgangssignale gibt, die bei geeigneter Belegung zu einem Konflikt führen
können. Sonst ist das Gatter G justified.
a
a=1
a
c=1
c
b=1
b=0
unjustified
b
d=0
c=0
justified
Recursive Learning
justified
Begriffe / Definitionen (2)
Es wird folgendes logische Alphabet verwendet:
B3  0,1, X 
Ein Signal gilt als spezifiziert, wenn es einen der Werte 0,1 hat.
Ein Signal gilt als nicht spezifiziert, wenn es den Wert X hat.
Sei f ein willkürliches, nicht spezifiziertes Signal und V ein logischer Wert.
Wenn alle konsistenten Kombinationen von Wertzuweisungen, für die kein
„unjustified“ Gatter im Schaltkreis übrigbleibt, die Zuweisung f = V enthalten,
wird f = V als notwendig bezeichnet.
Implikationen werden als vollständig oder präzise bezeichnet, wenn sie alle
notwendigen Zuweisungen bestimmen.
Recursive Learning
Begriffe / Definitionen (3)
Direkte Implikationen sind Implikationen, die durch einfaches Auswerten der Wahrheits-
tafel eines bestimmten Gatters mit den gegebenen Zuweisungen und durch Propagieren
der gewonnenen Signale gewonnen werden können.
Recursive Learning
Beispiel:
Lernen:
v=1
u=1
x=1
s=0
w=0
v=1
t=0
y=1
z=0
x =x1
r=0
p=0
q=0
Recursive Learning
u=1
Beispiel:
0. Learning level
1. Learning level
z = 0 unjustified
unjust. line z = 0 :
1. just. v = 1:
2. just. u = 1
3. just. y = 1
w = 0 (unjust.)
 p = 0 (unjust.)
v = 1, x = 1
u = 1, x = 1
v = 1, u = 1, x = 1
2. Learning level
unjust. line w = 0:
1. just. s = 0
v=1
x = 1
2. just. t = 0
v = 1
x = 1

unjust. line p = 0:
...


Recursive Learning
Der naive Algorithmus
demo_recursive_learning() {
for each unsatisfied line {
for each input: justification {
- assign controlling value (e.g. 0 for AND)
- make implications and set up new list of
resulting unjustified lines
- if consistent: demo_recursive_learning() }
if there are one or several signals f in the circuit, such
that f assumes the same logic value V for all consistent
justifications:
then learn f = V, make implications for all learned signal
values
if all justifications are inconsistent: learn that the
current situation of value assignments is inconsistent.}
}
Recursive Learning
Problem: unvollst. Implikationen
ee=1
e
a
1b
b=0
y=0
1
c
d
1
x=0
Aus x = 0 folgt y = 0, da aus b = 0 d = 1 folgt, bzw. aus b = 1 folgt e = 1 und somit immer y = 0.
demo_recursive_learning würde hier scheitern und die Implikation x = 0 y = 0 nicht finden.
demo_recursive_learning wertet nur direkte Implikationen aus.
Recursive Learning
Notationen
r
Tiefe der Rekursion
rmax
max. Tiefe der Rekursion
U  G1 , G2 , G3 ,... ist die Menge der „unjustified“ Gatter im aktuellen
0
Stand des Algorithmus
Gx
J r   f1  V1 , f 2  V2 ,... ist die Menge der Zuweisungen, die eine
„justification“ eines Gatters Gx zur Rekursionstiefe r repräsentiert.
Gx
C r  J1 , J 2 , J 3 ,... ist die vollständige Menge von „justifications“
eines Gatters Gx .
Jx
U r  G1 , G2 , G3 ,...
ist die Menge der „unjustified“ Gatter einer
gegebenen „justification“ J x in der Rekursionstiefe r.
Recursive Learning
Bsp. vollst. Implikation (1)
a
0
c
b
0
d
1
e
f
G1
G2
1
k
0
0
g
l
G3
i
j
X
0
n
G4
G6
r
m
h
p=1
G5
0
Recursive Learning
0
q
0
Bsp. vollst. Implikation (2)
0. Learning level
1. Learning level
2. Learning level
p=1 (unjust.)
(Gate G6 unjust.)
unjust. Gate G6:
1. justification: q = 0, r = 0
k = 0 (G1 unjust.)
 l = 0 (G2 unjust.)
m = 0 (G3 unjust.)
n = 0 (G4 unjust.)
unjust. Gate G1:
1. justification c=0
e = 1
f = 0 (since l = 0)
i = 1
j = 0 (since n = 0)
inconsistency at b
2. justification d=0
g = 1
h = 0 (since m = 0)
j = 1
i = 0 (since n = 0)
inconsistency at a
1. justification inconsistent
current situation of value
assignments inconsistent
8
Recursive Learning
Alg. für vollständige Implikation
initially: r=0
make_all_implications(r,r_max) {
make all direct implications and set up a List U_r of
resulting unjustified gates
if r < r_max: learning {
for each gate G_x, x=1,2,... in U_r: justifications {
set up a list of justifications C_r for gate G_x
for each justification J_i  C_r: {
-make the assignments contained in J_i
-make_all_implications(r+1,r_max)
}
if there is one or several signals f in the
circuit, which assume the same logic value V for
all consistent justifications J_i  C_r then learn:
f = V is uniquely determined in level r, make
direct implications for all learned values in level r
if all justifications are inconsistent, then learn:
given situation of value assignments in level r is
inconsistent
}
}
}
Recursive Learning
Maximale Rekursionstiefe
Der Prozeß terminiert auch im Falle von rmax   , da nach einer diskreten
Anzahl von Schritten die Eingänge oder Ausgänge des Schaltkreises erreicht
werden.
Die tatsächliche Wahl von
werden.
rmax muss durch eine geeignete Heuristik bestimmt
Recursive Learning
Experimentelle Ergebnisse
rmax  5
Recursive Learning
Inhalt
Recursive Learning
GRASP
GRASP und Recursive Learning
Combinational Equivalence Checking und SAT
GRASP
GRASP: generic search algorithm for the satisfiability problem
•Integration von „search-pruning-techniques“
•Verwendung von Konflikt-Analyse-Tools
•Zentrale Idee: non-chronological backtracking
=> Der Suchraum wird kleiner
GRASP
Definitionen und Notationen
assigned: Einer Variablen wurde während des Suchprozesses ein Wert 0 oder 1
zugewiesen. Ist dies nicht der Fall spricht man von unassigned .
truth assignment A ist eine Menge von „assigned“ Variablen und ihren Werten. Man
spricht von einem vollständigen „assignment“, wenn A  n gilt.
Bsp.:
A  x1  0, x5  1, x16  0
satisfying assignment:
j A 1
unsatisfying assignment:
j A 0
j: Formel in CNF
Die Klauseln eines Ausdrucks j werden durch ein assignment in drei Partitionen
aufgeteilt: erfüllte Klauseln, unerfüllte Klauseln und nicht gelöste Klauseln. Die
unassigned Literale einer Klausel werden als freie Literale bezeichnet. Klauseln mit nur
einem freien Literal werden als unit clause bezeichnet.
GRASP
Die Suche (Prinzip)
Es wird mit einem leeren truth assignment begonnen. Ein Backtracking-Such-Algorithmus
traversiert den Suchraum in Form eines Entscheidungsbaumes. Jeder Knoten des Baumes
repräsentiert eine Zuweisung einer Variable. Die Zuweisungen werden als decision
assignments, die Tiefe im Baum als decision level bezeichnet.
Der Suchprozeß durchläuft folgende Schritte iterativ:
1.
Im aktuellen decision level wird ein decision assignment gewählt und das truth
assignment erweitert (im Falle einer unassigned Variable). Der Prozeß terminiert
erfolgreich, wenn alle Klauseln erfüllt sind. Er terminiert nicht erfolgreich, wenn nicht
alle Klauseln erfüllt sind, aber alle möglichen decision assignments gemacht wurden.
2.
Durch Implikation wird das truth assignment erweitert. Bei diesem Schritt kann es
auch zu unerfüllten Klauseln kommen. Dies wird als Konflikt bezeichnet. Das truth
assignment wird zum unsatisfying assignment.
3.
Der letzte Schritt (2.) wird rückgängig gemacht, wenn ein Konflikt aufgetreten ist.
(Backtracking Schritt)
GRASP
Konflikt-Management
conflict-based equivalence (CBE)
Neue Implikanten, die nicht in der Klausel-Menge vorkommen und durch einen Konflikt
gefunden wurden, werden zur Klausel-Menge hinzugefügt. Dadurch kann man den gleichen
Fehler an anderer Stelle vermeiden.
failure-driven assertion (FDA)
Wenn ein decision assignment im aktuellen decision-level zum Konflikt führte, wird die
inverse Zuweisung (falls noch nicht versucht) benutzt.
conflict-directed backtracking (CDB)
Wenn der Konflikt aus einem früheren decision-level stammt, wird die Suche an diese
Stelle zurückspringen. Diese Technik ist eine Form des nonchronological backtracking.
Mit ihr kann man den Suchprozeß signifikant reduzieren.
GRASP
Struktur des Suchprozesses (1)
Der zugrundeliegende Mechanismus, um Implikationen aus einer Klausel-Menge zu
erhalten, ist die boolean constraint propagation (BCP). Dies ist nichts anderes als die
iterierte Anwendung der unit clause rule (M. Davis, D. Putnam).
Gegeben sei eine Klausel   l1  ...  lk  . Diese impliziert eine Zuweisung für die
Variable x (vgl. unit clause rule). Das antecedent assignment A(x) ist eine Menge von
assignments für die gilt: A(x) enthält Variablen und ihre Zuweisungen aus 
x  A(x )
Beispiel:
  ( x  y  z )
A( x)  { y  0, z  1}
A( y )  {x  0, z  1}
A( z )  {x  0, y  0}
GRASP
Struktur des Suchprozesses (2)
Wenn die Variable x assigned ist, gibt v(x) den zugewiesenen boolschen Wert zurück.
Eine Sequenz von durch BCP generierten Implikationen wird durch einen gerichteten
implication graph I abgebildet:
1.
2.
3.
Jeder Knoten in I repräsentiert eine Zuweisung x = v(x)
Die Vorgänger des Knotens x = v(x) sind in A(x) und der entsprechenden unit clause 
enthalten. Die gerichteten Kanten von den Knoten in A(x) nach x = v(x) werden mit 
beschriftet. Knoten ohne Vorgänger sind decision assignments.
Spezielle Konflikt-Knoten K werden in I benutzt um Konflikte anzuzeigen. Die
Vorgänger entsprechen A(K) und die Kanten werden wieder mit der entsprechenden
Klausel beschriftet.
Der decision level wird wie folgt definiert:
 ( x)  max  ( y)  y, v( y) A( x)
GRASP
Algorithmus (1)
Der Algorithmus besteht aus folgenden Grundkomponenten:
Decide(), hier wird ein decision assignment gewählt. In der Regel werden Heuristiken
verwendet. Im folgendem Beispiel wird diese greedy Heuristik verwendet:
An jedem Knoten im decision tree wird die Anzahl der direkt
erfüllten Klauseln ermittelt. Dies wird für jede Variable und
Zuweisung gemacht. Es wird die Variable und Zuweisung gewählt,
die am meisten Klauseln erfüllt.
Deduce(), hier wird BCP angewandt und der entsprechende implication graph erstellt.
Diagnose(), hier werden die Konflikte identifiziert und die clause database mit
Implikanten erweitert.
Erase(), diese Prozedur löscht die assignments im aktuellen decision level.
GRASP
Beispiel für Deduce()
Assignment:x9  0 @1, x10  0 @ 3, x11  0 @ 3, x12  1@ 2, x13  1@ 2,...
Decision Assignment:
x1  1@ 6
x10  0 @ 3
4
Klauselmenge:
1  x1  x2 
 2  x1  x3  x9 
 3  x2  x3  x4 
 4  x4  x5  x10 
 5  x4  x6  x11 
 6  x5  x6 
 7  x1  x7  x12 
 8  x1  x8 
 9  x7  x8  x13 
x2  1@ 6
1
3
x5  1@ 6
4
6
x4  1@ 6
x1  1@ 6
3
2
5
5
x9  0 @1
x11  0 @ 3
Implication Graph
GRASP
6
x6  1@ 6
x3  1@ 6
2
K
Die Diagnose() Prozedur
Conflict_Induced_Clause()
Hier wird eine Klausel omega_C_K wie folgt generiert:
 ( x)   y, v( y )   A( x)  ( y )   ( x)
( x)   y, v( y )   A( x)  ( y )   ( x)
x, v( x) 



AC ( x)
( x)    AC ( y )
 y ,v ( y )  ( x ) 

C ( K ) 
x


v( x)
 x ,v ( x ) AC ( K )
Partition von A(x) nach decision level
wenn A( x)  
sonst
wobei gilt : x 0  x und x1  x
GRASP
Die Diagnose() Prozedur
Im Beispiel würde dies zu folgendem Ergebnis führen:
AC ( K )  x1  1, x9  0, x10  0, x11  0
 C ( K )  x1  x9  x10  x11 
GRASP
Beispiel 2
Assignment:x9  0 @1, x10  0 @ 3, x11  0 @ 3, x12  1@ 2, x13  1@ 2,...
Decision Assignment:
x1  0 @ 6
Klauselmenge:
1  x1  x2 
 2  x1  x3  x9 
 3  x2  x3  x4 
 4  x4  x5  x10 
 5  x4  x6  x11 
 6  x5  x6 
 7  x1  x7  x12 
 8  x1  x8 
 9  x7  x8  x13 
x8  1@ 6
8
9
K´
x1  0 @ 6
7
9
x7  1@ 6
x12  1@ 2
 C ( K )  x1  x9  x10  x11 
7
Implication Graph
GRASP
9
x13  1@ 2
Beispiel 2 / CDB
Hier führt FDA zu einem erneuten Konflikt:
AC ( K´)  x9  0, x10  0, x11  0, x12  1, x13  1
 C ( K´)  x9  x10  x11  x12  x12 
Nun muss ein Backtrack-Schritt zum backtrack level b(CDB) erfolgen:
b  max  ( x) x, v( x) AC ( K´)
Im Beispiel würde b = 3 sein. Dies würde zu einem FDA in Level 3 führen.
Die Klausel  C (K´) wird der clause database hinzugefügt.
=> conflict-induced necessary assignments
GRASP
Algorithmus (2)
// Global variables:
clause database phi
//
variable assignment A
// Return value:
FAILURE or SUCCESS
// Auxiliary variables:
backtracking level beta
//
GRASP()
{
return (Search (0,beta) != SUCCESS) ?
FAILURE:SUCCESS;
}
GRASP
Algorithmus (3)
// input argument:
current decision level d
// output argument:
backtracking level beta
// return value:
CONFLICT or SUCCESS
//
Search (d, &beta)
{
if (Decide (d) == SUCCESS) return SUCCESS;
while (true) {
if (Deduce (d) != CONFLICT) {
if (Search (d + 1, beta) == SUCCESS)
return SUCCESS;
else if (beta != d) {
Erase(); return CONFLICT;
}
}
if (Diagnose (d, beta) == CONFLICT) {
Erase(); return CONFLICT;
}
Erase();
}
}
GRASP
Algorithmus (4)
Diagnose (d, &beta)
{
omega_C_K = Conflict_Induced_Clause();
Update_Clause_Database (omega_C_K);
beta = Compute_Max_Level();
if (beta != d) {
add new conflict vertex K to I;
record A(K);
return CONFLICT;
}
return SUCCESS;
}
GRASP
Experimentelle Ergebnisse
#M: Anzahl Class members
#S: Anzahl Class members, für die
der Algorithmus terminiert
Inhalt
Recursive Learning
GRASP
GRASP und Recursive Learning
Combinational Equivalence Checking und SAT
GRASP und Recursive Learning
Recursive Learning kann in GRASP als Teil der Preprocessing Engine oder in
der Deduction Engine eingesetzt werden.
Idee:
Es wird in beiden Fällen versucht mittels RL die notwendigen assignments zu
finden.
Diese werden der clause database als unit clause hinzugefügt.
Innerhalb der Deduction Engine wird BCP durch RL ersetzt.
GRASP und Recursive Learning
Beispiel:
Assignments:
Klauseln (CNF):
{z  1, u  0}
1  (u  x  w)
 2  ( x  y )
 3  ( w  y  z )
Es folgt:
( z  1)  (u  0)  ( x  1)
neue Klausel:
4  (z  u  x) (Lernschritt)
GRASP und Recursive Learning
Problem
Der Umfang der clause database wird schnell zu groß!
Strategie 1: Relevance-Based Learning
Wenn eine größere Anzahl an Literalen einer gelernten Klausel unassigned
werden, wird sie gelöscht.
Strategie 2: k-bounded Learning
Nur Klauseln mit max. k Literalen werden aufgezeichnet.
GRASP und Recursive Learning
Experimentelle Ergebnisse
k-bounded learning: k = 6
relevance-based learning: Anzahl der unassigned Literale = 3
rmax  2
GRASP und Recursive Learning
Inhalt
Recursive Learning
GRASP
GRASP und Recursive Learning
Combinational Equivalence Checking und SAT
Combinational Equivalence Checking
und SAT
Das CEC-Problem wird auf das SAT-Problem übertragen.
Combinational Equivalence
Checking und SAT
Prinzip
1.
Es wird ein miter erzeugt.
2.
Der erhaltene Schaltkreis wird in CNF überführt.
3.
Ist der CNF-Ausdruck erfüllbar, sind die Schaltkreise nicht äquvivalent.
miter:
A
SK 1
B
C
SK 2
Combinational Equivalence
Checking und SAT
Experimentelle Ergebnisse
Herunterladen