Hi Boning,
My experience has been that SAT solvers are fast because they are built to answer yes/no existential queries
(does there exist a solution?). If one actually needs to represent the full set of solutions, often
binary decision diagrams are a better choice, but they can blow up in space whereas a SAT solver will never need exponential space, and so they have been replaced by SAT solvers over time as people have figured out how to attack problems by not needing all solutions but rather using existential queries.
That said, here are some thoughts that might help.
- model counting is not the same thing as knowing all solutions and SAT based techniques are good.
- for CNF random solution generation,
this paper may be of interest.
- Also
here are some slides on a more recent counting paper
- If you have a circuit like gini/logic.C which isn't too hard to satisfy, then plain old simulation (see methods Eval and Eval64) can sample solutions very quickly. Note that AIG/non-CNF structure can confuse the CNF based methods above because of the distinction between inputs (actual variables) vs and-nodes/gates (variables in CNF but which are functions of the inputs).
Scott