View
214
Download
0
Embed Size (px)
Citation preview
GRASP SAT solver
Presented by Constantinos BartzisSlides borrowed from Pankaj Chauhan
J. Marques-Silva and K. Sakallah
What is SAT? Given a propositional formula in CNF, find
an assignment to boolean variables that makes the formula true
E.g.1 = (x2 x3)
2 = (x1 x4)
3 = (x2 x4)
A = {x1=0, x2=1, x3=0, x4=1}
1 = (x2 x3)
2 = (x1 x4)
3 = (x2 x4)
A = {x1=0, x2=1, x3=0, x4=1}
SATisfying assignment!
Why is SAT important?
Fundamental problem from theoretical point of view
Numerous applications CAD, VLSI Optimization Model Checking and other kinds of
formal verification AI, planning, automated deduction
Terminology CNF formula
x1,…, xn: n variables 1,…, m: m clauses
Assignment A Set of (x,v(x)) pairs |A| < n partial assignment {(x1,0), (x2,1), (x4,1)} |A| = n complete assignment {(x1,0), (x2,1), (x3,0), (x4,1)} |A= 0 unsatisfying assignment {(x1,1), (x4,1)} |A= 1 satisfying assignment {(x1,0), (x2,1), (x4,1)} |A= X unresolved {(x1,0), (x2,0), (x4,1)}
1 = (x2 x3)
2 = (x1 x4)
3 = (x2 x4)
A = {x1=0, x2=1, x3=0, x4=1}
1 = (x2 x3)
2 = (x1 x4)
3 = (x2 x4)
A = {x1=0, x2=1, x3=0, x4=1}
Terminology
An assignment partitions the clause database into three classes Satisfied Unsatisfied Unresolved
Free literals: unassigned literals of a clause Unit clause: unresolved with only one free
literal
Basic Backtracking Search
Organize the search in the form of a decision tree
Each node is an assignment, called decision assignment
Depth of the node in the decision tree decision level (x)
x=v@d x is assigned to v at decision level d
Basic Backtracking Search
Iteration:1. Make new decision assignments to
explore new regions of search space2. Infer implied assignments by a
deduction process. May lead to unsatisfied clauses, conflict.
The assignment is called conflicting assignment.
3. If there is a conflict backtrack
DPLL in action
1 = (x1 x2 x3 x4)
2 = (x1 x3 x4)
3 = (x1 x2 x3)
4 = (x3 x4)
5 = (x4 x1 x3)
6 = (x2 x4)
7 = (x2 x4 )
1 = (x1 x2 x3 x4)
2 = (x1 x3 x4)
3 = (x1 x2 x3)
4 = (x3 x4)
5 = (x4 x1 x3)
6 = (x2 x4)
7 = (x2 x4 )
x1
x2
UU
x3 = 1@2
x1 = 0@1
//
//
//
x2 = 0@2
x4 = 1@2
conflict
UU
////
//
DPLL in action
1 = (x1 x2 x3 x4)
2 = (x1 x3 x4)
3 = (x1 x2 x3)
4 = (x3 x4)
5 = (x4 x1 x3)
6 = (x2 x4)
7 = (x2 x4 )
1 = (x1 x2 x3 x4)
2 = (x1 x3 x4)
3 = (x1 x2 x3)
4 = (x3 x4)
5 = (x4 x1 x3)
6 = (x2 x4)
7 = (x2 x4 )
x1
x2
x3 = 1@2
x1 = 0@1
//
//
//
x2 = 0@2
x4 = 1@2
conflict
UU//
//
x2 = 1@2
x4 = 1@2
conflict
DPLL in action
1 = (x1 x2 x3 x4)
2 = (x1 x3 x4)
3 = (x1 x2 x3)
4 = (x3 x4)
5 = (x4 x1 x3)
6 = (x2 x4)
7 = (x2 x4 )
1 = (x1 x2 x3 x4)
2 = (x1 x3 x4)
3 = (x1 x2 x3)
4 = (x3 x4)
5 = (x4 x1 x3)
6 = (x2 x4)
7 = (x2 x4 )
x1
x2
x3 = 1@2
x1 = 0@1//
//
x2 = 0@2
x4 = 1@2
conflict
//
x2 = 1@2
x4 = 1@2
conflict
x2
x1 = 1@1
x2 = 0@2
x4
x4 = 1@2
{(x1,1), (x2,0), (x4,1)}
GRASP
GRASP stands for Generalized seaRch Algorithm for the Satisfiability Problem (Silva, Sakallah, ’96)
Features: Implication graphs for BCP and conflict
analysis Learning of new clauses Non-chronological backtracking
GRASP Decision Heuristics
Procedure decide() Which variable to split on What value to assign
Default heuristic in GRASP:
Choose the variable and assignment that directly satisfies the largest number of clauses
Other possibilities exist
GRASP Deduction
Boolean Constraint Propagation using implication graphsE.g. for the clause = (x y), if y=1, then we must have x=1
For a variable x occuring in a clause, assignment 0 to all other literals is called antecedent assignment A(x)
E.g. for = (x y z),
A(x) = {(y,0), (z,1)}, A(y) = {(x,0),(z,1)}, A(z) = {(x,0), (y,0)}
Variables directly responsible for forcing the value of x Antecedent assignment of a decision variable is empty
Implication Graphs Nodes are variable assignments x=v(x)
(decision or implied) Predecessors of x are antecedent assignments
A(x) No predecessors for decision assignments!
Special conflict vertices have A() = assignments to variables in the unsatisfied clause
Decision level for an implied assignment is(x) = max{(y)|(y,v(y))A(x)}
Example Implication Graph
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)
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)
Current truth assignment: {x9=0@1 ,x10=0@3, x11=0@3, x12=1@2, x13=1@2}
Current decision assignment: {x1=1@6}
6
6
conflict
x9=0@1
x1=1@6
x10=0@3
x11=0@3
x5=1@64
4
5
5 x6=1@62
2
x3=1@6
1
x2=1@6
3
3
x4=1@6
GRASP Conflict Analysis
After a conflict arises, analyze the implication graph at current decision level
Add new clauses that would prevent the occurrence of the same conflict in the future Learning
Determine decision level to backtrack to, might not be the immediate one Non-chronological backtracking
Learning
Determine the assignment that caused conflict Backward traversal of the IG, find the roots of
the IG in the transitive fanin of This assignment is necessary condition for
Negation of this assignment is called conflict induced clause C()
Adding C() to the clause database will
prevent the occurrence of again
Learning
6
6
conflict
x9=0@1
x1=1@6
x10=0@3
x11=0@3
x5=1@64
4
5
5 x6=1@62
2
x3=1@6
1
x2=1@6
3
3
x4=1@6
C() = (x1 x9 x10 x11)
For any node of an IG x, partition A(x) into
(x) = {(y,v(y)) A(x)|(y)<(x)}
(x) = {(y,v(y)) A(x)|(y)=(x)}
Conflicting assignment AC() = causesof(), where
Learning
(x,v(x)) if A(x) =
(x) [ causesof(y) ]o/w(y,v(y)) (x)
causesof(x) =
Learning
Learning of new clauses increases clause database size
Increase may be exponential Heuristically delete clauses based
on a user provided parameter If size of learned clause > parameter,
don’t include it
Backtracking
Failure driven assertions (FDA): If C() involves current decision
variable, a different assignment for the current variable is immediately tried.
In our IG, after erasing the assignment at level 6, C() becomes a unit clause x1
This immediately implies x1=0
Example Implication Graph
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)
C()=(x1 x9 x10 x11)
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)
C()=(x1 x9 x10 x11)
Current truth assignment: {x9=0@1 ,x10=0@3, x11=0@3, x12=1@2, x13=1@2}
Current decision assignment: {x1=1@6}
6
6
conflict
x9=0@1
x1=1@6
x10=0@3
x11=0@3
x5=1@64
4
5
5 x6=1@62
2
x3=1@6
1
x2=1@6
3
3
x4=1@6
Example Implication Graph
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)
C() = (x1 x9 x10 x11)
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)
C() = (x1 x9 x10 x11)
Current truth assignment: {x9=0@1 ,x10=0@3, x11=0@3, x12=1@2, x13=1@2}
Current decision assignment: {x1=0@6}
x11=0@3
x10=0@3
x9=0@1
C() C()
C()
x1=0@6
Non-chronological backtracking
9
9
’
x12=1@2
x7=1@6
x8=1@6
x1=0@6
x11=0@3
x10=0@3
x9=0@1
7
7
8
C() C()
C() x13=1@2
9
AC(’) = {x9 =0@1, x10 = 0@3, x11 = 0@3, x12=1@2, x13=1@2}
C() = (x9 x10 x11 x12 x13)
Decision level
4
5
x1
6
'
3
Backtrack level is given by
= d-1 chronological backtrack < d-1 non-chronological backtrack
Backtracking
= max{(x)|(x,v(x))AC(’)} = max{(x)|(x,v(x))AC(’)}