grasp sat solver
DESCRIPTION
GRASP SAT solver. J. Marques-Silva and K. Sakallah. Presented by Constantinos Bartzis Slides borrowed from Pankaj Chauhan. What is SAT?. Given a propositional formula in CNF, find an assignment to boolean variables that makes the formula true E.g. 1 = (x 2 x 3 ) - PowerPoint PPT PresentationTRANSCRIPT
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}
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}
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 space
2. 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 )
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 )
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 )
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)}
DPLL Algorithm
Deduction
Decision
Backtrack
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 search template
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)
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 Deduction Process
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
BacktrackingFailure 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)
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)
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(’)}
Procedure Diagnose()
What’s next? Reduce overhead for constraint
propagation Better decision heuristics Better learning, problem specific Better engineering
Chaff