Once built via cargo build --release the solver can be executed the following:
./target/release/sat [MODE] [FILEPATH] [FILEPATH] --heuristic [HEURISTIC] [FLAGS]
- dpll
- cdcl
Supported heuristics are:
- arbitrary
- dlis
- dlcs
- mom
- boehm
- jeroslaw_wang
- vsids
- custom
| short | long | description |
|---|---|---|
| -H | --heuristic | Specify the heuristic to use [default: arbitrary] |
| -d | --depth | Shows the depth of the search tree |
| -k | --k | Argument for k-bounded learning [default: 10] |
| -m | --m | Argument for m-size relevance based learning [default: 10] |
| -s | --subsumed_clauses | Eliminates subsumed clauses |
| -f | --flamegraph | Specify whether to create a flamegraph |
| -r | --restarts_threshold | Specify the conflict threshold for a restart |
| -l | --luby | Use luby sequence for restarts |
| -F | --restart_factor | Specify the factor for restarts |
| -D | --DRUP | Output in DRUP format |
| -h | --help | Print help |
| -V | --version | Print version |
To measure the CPU time for each .cnf file in src/inputs, run the cputime binary:
cargo run --bin cputime -- --time-limit [TIME-LIMIT] --heuristic [HEURISTIC]
Time-Limit arguments:
- true: 60sec execution time frame (default value)
- false: measures the duration of the execution without timeout
To create the plots for the existing .csv files in src/cputime, run the plot binary:
cargo run --bin plot
When cloning make sure to also sync the submodule which includes testfiles:
git submodule update --init --recursive
Run the tests using cargo:
cargo test --package sat_solver --lib -- cdcl --nocapture
We were able to solve 202 cnfs from exercise 2 correctly (same var assignment as minisat) and 199 finished with a timout of 60 seconds while the remaining three took just over a minute.
Average time for all 202 problems: 1.4s with vsids, without restarts. (gruppe-m-2/src/cputime/60sec_vsids.csv)
Average time for all 202 problems: 12.17s without vsids, without restarts. (gruppe-m-2/src/cputime/60sec_arbitrary.csv)
The problems from 2006th sat competition we tried to solve took no longer than 15mins.
Noel:
- Fix issue with Conflict analysis
- Subsumed Clauses
- Restarts
- Drup logging
Laura:
- Implication Graph
- Conflict analysis
Flo:
- 2-Watched Literals
- Fix/Update impl. graph while setting vars
- Fix/Rewrite Conflict analysis
- Non-chron backtracking
- Test + Debug non-chronological backtracking
- Check whether unit clauses can occur in conflict analysis
- Check impl for set_var in respect to unit clauses
- Pure literal elimination as preprocessing
- Output valid DIMACS solution
- VSIDS performance