Difference between revisions of "Solvers"
(Created page with "=SAT Solvers= SAT Solvers are programs that can solve SAT (Satisfiability), an NPcomplete program. SAT solvers typically take their input in the DIMACS format. That's hard to...") 
(No difference)

Revision as of 14:36, 4 December 2019
SAT Solvers
SAT Solvers are programs that can solve SAT (Satisfiability), an NPcomplete program. SAT solvers typically take their input in the DIMACS format. That's hard to work with, so there are preprocessors that will convert a problem into DIMACS, give it to a SAT solver, and then convert the solution back to a specific problem domain. Such conversions are in P.
I've used the following SAT solvers successfully:
 picosat  easy to get working, but not very fast. Has the advantage that it can produce a list of all possible solutions outofthebox.
 glucose  like picosat, but fast. Does not have the ability to produce all possible solutions.
 Z3  Can process DIMACS files.
SMT Solvers
SMT solvers can work with higher level "theories" in math or logic. Because they can operate on logic directly, rather than converting everything into SAT, their models can be much more compact. More compact models may solve faster or slower, depending on the heuristics of the particular solver.
Most SMT solvers will take an input file in the SMTLIB file format.
Optimizers
Optimizers are special kinds of solvers that can optimize an objective function. Convex linear optimizers that can work with floating point numbers are relatively fast, as linear programming is in P, but requiring an integer solution makes finding some problems tricky and creates an NPhard problem. [1]