NAIL094Decision procedures and verification

Petr Kučera, KTIML MFF UK

CDCL Algorithm [10 points]

Add clause learning and restarts to your DPLL solver.

Clause learning

When learning a clause, you can use several approaches

I recommend to stop at the first UIP, but you can compare this approach with the other ones to see which one is the most effective.

You can also use a heruistic minimization of the learned clause, e.g. by using subsuming resolution.

Clause deletion

Add a heuristic for regularly deleting some of the learned clauses. There is a bunch of possibilities how you can do that and these can be combined.

There are also several possibilities on how to determine when the clauses should be deleted, for instance

Restarts

Add periodic restarts to your solver, you can use either geometric or Luby sequences to determine when the search should be restarted.

Solver evaluation

To evaluate your solver, use some of the SATLIB Benchmark Problems. By now the algorithm you have implemented has a lot of parameters and possible choices. Your solver should be easily configurable to use a particular set of parameters and heuristics, try to check how the choice of parameters affects the solver performance. What parameters are best for your solver? Write a report summarizing the evaluation of your solver.