410 likes | 432 Views
State-of-the-art in SAT solvers. Vibhav Gogate. SAT formulas. A set of propositional variables and clauses involving variables (x1+x2’+x3) and (x2+x1’+x4) x1,x2, x3 and x4 are variables (True or false) Literals: Variable and its negation x1 and x1’
E N D
State-of-the-art in SAT solvers Vibhav Gogate
SAT formulas • A set of propositional variables and clauses involving variables • (x1+x2’+x3) and (x2+x1’+x4) • x1,x2, x3 and x4 are variables (True or false) • Literals: Variable and its negation • x1 and x1’ • A clause is satisfied if one of the literals is true • x1=true satisfies clause 1 • x1=false satisfies clause 2 • Solution: An assignment that satisfies all clauses
SAT solvers • Given 10 minutes of time • Started with DPLL (1962) • Able to solve 10-15 variable problems • Satz (Chu Min Li, 1995) • Able to solve some 1000 variable problems • Chaff (Malik et al., 2001) • Intelligently hacked DPLL , Won the 2004 competition • Able to solve some 10000 variable problems • Current state-of-the-art • Minisat and SATELITEGTI (Chalmer’s university, 2004-2006) • Jerusat and Haifasat (Intel Haifa, 2002) • Ace (UCLA, 2004-2006)
DPLL Example {p,r},{p,q,r},{p,r} p=T p=F {T,r},{T,q,r},{T,r} {F,r},{F,q,r},{F,r} SIMPLIFY SIMPLIFY {q,r} {r},{r} SIMPLIFY {}
DPLL Algorithm as seen by SAT solver While (1) { if (decide_next_branch()) { //1. Branching while (deduce()==conflict) { //2. Deducing blevel=analyze_conflicts() // 3. Learning if (blevel < 0) return UNSAT else backtrack(blevel) // 4. Backtracking } else RETURN UNSAT; }
Chaff implementation While (1) { if (decide_next_branch()) { //1. Branching while (deduce()==conflict) { //2. Deducing blevel=analyze_conflicts() // 3. Learning if (blevel < 0) return UNSAT else backtrack(blevel) // 4. Backtracking } else RETURN UNSAT; } Use conflict-directed backjumping + Learning
Learning • Adding information about the instance into the solution process without changing the satisfiability of the problem. • In CNF representation it is accomplished by adding clauses into the clause database • Knowledge of failure may help search in other spaces • Learning is very effective in pruning the search space for structured problems • It is of limited use for random instances • Why? Still an open question
Chaff implementation While (1) { if (decide_next_branch()) { //1. Branching while (deduce()==conflict) { //2. Deducing blevel=analyze_conflicts() // 3. Learning if (blevel < 0) return UNSAT else backtrack(blevel) // 4. Backtracking } else RETURN UNSAT; } Boolean constraint propagation: Main factor
Naive Implementation of Deduce or Unit propagation • Check every clause after an assignment is made and reduce it if possible • Repeat if a unit clause is generated (implication) • After backtrack, revert all clauses to their original form as they were before. • Very slow. • A solver would spend 85-90% of the time doing unit propagation • Why not speed it up?
Chaff implementation While (1) { if (decide_next_branch()) { //1. Branching while (deduce()==conflict) { //2. Deducing blevel=analyze_conflicts() // 3. Learning if (blevel < 0) return UNSAT else backtrack(blevel) // 4. Backtracking } else RETURN UNSAT; } Variable ordering heuristics
Other issues Clause Deletion • Learned clauses slows down the bcp and eat up memory • Delete clauses periodically • Various heuristics for this purpose • Winner of SAT competition 2004.
But Chaff no longer State of the Art • More hacking • Minisat (2006, winner of SAT RACE 2006) • Based on chaff but a better faster implementation • Some new things like conflict analysis and minimization but basically same as chaff
Benchmarks • Random • Crafted • Industrial