All Projects → mishun → minisat-rust

mishun / minisat-rust

Licence: other
Experimental minisat SAT solver reimplementation in Rust

Programming Languages

rust
11053 projects

Projects that are alternatives of or similar to minisat-rust

batsat
A (parametrized) Rust SAT solver originally based on MiniSat
Stars: ✭ 26 (-61.76%)
Mutual labels:  sat-solver, minisat
slime-sat-solver
A Free World Class High Performance SAT Solver
Stars: ✭ 15 (-77.94%)
Mutual labels:  cnf, sat-solver
togasat
A Header-Only CDCL SAT Solver for Programming Contest
Stars: ✭ 51 (-25%)
Mutual labels:  sat-solver, minisat
mSAT
A modular sat/smt solver with proof output.
Stars: ✭ 91 (+33.82%)
Mutual labels:  sat-solver
pigosat
Go (golang) bindings for Picosat, the satisfiability solver
Stars: ✭ 15 (-77.94%)
Mutual labels:  np-complete
optapy
OptaPy is an AI constraint solver for Python to optimize planning and scheduling problems.
Stars: ✭ 167 (+145.59%)
Mutual labels:  np-complete
AntColonyOptimization-TSP
An Ant Colony Optimization algorithm for the Traveling Salesman Problem
Stars: ✭ 29 (-57.35%)
Mutual labels:  np-complete
upf-epc
4G/5G Mobile Core User Plane
Stars: ✭ 97 (+42.65%)
Mutual labels:  cnf
chomsky-normal-form
Convert a Context Free Grammar (CFG) to Chomsky Normal Form (CNF)
Stars: ✭ 17 (-75%)
Mutual labels:  cnf
fauton
An ecosystem of packages to work with automaton and parsers (dfa/nfa/e-nfa/regex/cfg/pda)
Stars: ✭ 36 (-47.06%)
Mutual labels:  cnf
bosphorus
Bosphorus, ANF simplifier and solver, and ANF-to-CNF converter
Stars: ✭ 45 (-33.82%)
Mutual labels:  cnf
mios
A SAT solver written in Haskell.
Stars: ✭ 33 (-51.47%)
Mutual labels:  sat-solver
haskell-picosat
Haskell bindings for PicoSAT solver
Stars: ✭ 15 (-77.94%)
Mutual labels:  sat-solver
discrete-math-python-scripts
Python code snippets from Discrete Mathematics for Computer Science specialization at Coursera
Stars: ✭ 98 (+44.12%)
Mutual labels:  sat-solver
gapt
GAPT: General Architecture for Proof Theory
Stars: ✭ 83 (+22.06%)
Mutual labels:  sat-solver
gini
A fast SAT solver
Stars: ✭ 139 (+104.41%)
Mutual labels:  sat-solver
minizinc-python
Access to all MiniZinc functionality directly from Python
Stars: ✭ 92 (+35.29%)
Mutual labels:  sat-solver
SAT-Solver-DPLL
A simple SAT solver that implements the DPLL algorithm with unit resolution
Stars: ✭ 37 (-45.59%)
Mutual labels:  sat-solver
PyMiniSolvers
A Python API for the MiniSat and MiniCard constraint solvers.
Stars: ✭ 18 (-73.53%)
Mutual labels:  minisat

minisat-rust Build Status

Note that this is reimplementation, not bindings.

Original minisat links:

Using

Pretty much identical to original minisat. The only difference is using pair of dashes before each argument instead of just one. So, instead of something like:

$ minisat -verb=2 -rsync input.cnf

we have:

$ minisat-rust --verb=2 --rsync input.cnf

This is because I am too lazy to reimplement minisat's custom argument parsing and used existing library instead :)

Building

Just use Cargo. You should have minisat in your path if you want to run big test that solves bunch of cnf files and compares output to minisat.

What is not working yet?

  • Reading (gzipped) CNF from stdin.
  • Proper allocation/reallocation of clauses (GC log messages are fake to test output against minisat). Probably need to wait Rust allocation features stabilization before implementing it.
  • Proper Ctrl-C handling.
  • Writing DIMACS when solving is interrupted.

Why?

There are a few reasons for reimplementing instead of just writing bindings:

  • Evaluate how Rust is suitable for relatively big projects
  • Estimate performance degradation (~1.5 -- 2 times for now; maybe I am just bad at Rust).
  • Minisat code is quite complicated having big structure randomly mutated by bunch of methods. Rust encourages splitting it into smaller more tractable parts that could help understanding how minisat actually works and verify it with Rust type system.
  • Maybe find some minisat bugs as a result of previous point. Indeed at least one was found: Issue 26.
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].