300 likes | 414 Views
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 )
E N D
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 = (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 unsatisfyingassignment {(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 databaseinto three classes • Satisfied • Unsatisfied • Unresolved • Free literals: unassigned literals of a clause • Unitclause: 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 xis assigned tovat decision leveld
Basic Backtracking Search • Iteration: • Make new decision assignments to explore new regions of search space • Infer implied assignments by a deduction process. • May lead to unsatisfied clauses, conflict. The assignment is called conflicting assignment. • If there is a conflict backtrack
x1 x2 DPLL in action x1 = 0@1 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 ) U / / U / x2 = 0@2 / / / x3 = 1@2 x4 = 1@2 conflict
x1 x2 DPLL in action x1 = 0@1 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 ) / x2 = 0@2 / x2 = 1@2 / U x3 = 1@2 x4 = 1@2 / / x4 = 1@2 conflict conflict
x1 x4 x2 x2 DPLL in action x1 = 0@1 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 = 1@1 / x2 = 0@2 x2 = 0@2 x2 = 1@2 x3 = 1@2 x4 = 1@2 x4 = 1@2 x4 = 1@2 conflict conflict {(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 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 graphs E.g. for the clause = (x y), ify=1, then we must havex=1 • For a variable xoccuring in a clause, assignment 0 to all other literals is calledantecedent assignmentA(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 ofx • 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)}
4 x2=1@6 x5=1@6 1 4 3 6 x4=1@6 conflict 6 3 2 5 2 5 x6=1@6 x3=1@6 Example Implication Graph Current truth assignment: {x9=0@1 ,x10=0@3, x11=0@3, x12=1@2, x13=1@2} Current decision assignment: {x1=1@6} 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) x10=0@3 x1=1@6 x9=0@1 x11=0@3
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 occurrenceof again
4 x2=1@6 x5=1@6 1 4 3 6 x4=1@6 conflict 6 3 2 5 2 5 x6=1@6 x3=1@6 Learning x10=0@3 x1=1@6 x9=0@1 x11=0@3 C() = (x1 x9 x10 x11)
(x,v(x)) if A(x) = causesof(x) = (x) [ causesof(y)]o/w (y,v(y)) (x) Learning • 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 • 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
4 x2=1@6 x5=1@6 1 4 3 6 x4=1@6 conflict 6 3 2 5 2 5 x6=1@6 x3=1@6 Example Implication Graph Current truth assignment: {x9=0@1 ,x10=0@3, x11=0@3, x12=1@2, x13=1@2} Current decision assignment: {x1=1@6} 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) x10=0@3 x1=1@6 x9=0@1 x11=0@3
Example Implication Graph Current truth assignment: {x9=0@1 ,x10=0@3, x11=0@3, x12=1@2, x13=1@2} Current decision assignment: {x1=0@6} 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) x9=0@1 C() x10=0@3 x1=0@6 C() C() x11=0@3
Decision level 3 4 5 x1 6 ' Non-chronological backtracking x8=1@6 x9=0@1 C() 8 9 x10=0@3 ’ x13=1@2 x1=0@6 C() 9 9 C() 7 x11=0@3 x7=1@6 7 x12=1@2 AC(’) = {x9 =0@1, x10 = 0@3, x11 = 0@3, x12=1@2, x13=1@2} C() = (x9 x10 x11 x12 x13)
Backtracking • Backtrack level is given by • = d-1chronological backtrack • < d-1non-chronological backtrack = max{(x)|(x,v(x))AC(’)}
What’s next? • Reduce overhead for constraint propagation • Better decision heuristics • Better learning, problem specific • Better engineering Chaff