https://github.com/sunset1995/ya-sat
Yet Another SAT Solver. Term project of PACA.
https://github.com/sunset1995/ya-sat
Last synced: about 1 month ago
JSON representation
Yet Another SAT Solver. Term project of PACA.
- Host: GitHub
- URL: https://github.com/sunset1995/ya-sat
- Owner: sunset1995
- License: mit
- Created: 2016-11-13T09:43:09.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2017-01-23T10:15:53.000Z (over 9 years ago)
- Last Synced: 2025-02-26T05:41:33.187Z (over 1 year ago)
- Language: C++
- Size: 121 KB
- Stars: 1
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# YA-SAT
Yet Another SAT Solver. Term project of PACA.
## Tasks
### TODO
- Iterative BCP
- Marked Learnt Clause
- Memory usage
- More preprocess
### DONE
- 2 Literal Watching
- Iterative DPLL
- Conflict Clause Learning
- Nonchronological Backtracking
- Learnt Clause Minimization
- Split independent subproblems
- Decision BCP result cache
- Circular list watcher check list
- VSIDS
- Phase saving
- ANRFA
## How to
- To build `./build.sh`
- To run `./yasat [options] benchmark.cnf`
- `-statistic` print statitic result to stderr
- `-stdout ` print result to stdout instead of file
- `-nomom ` disable init var score by MOM
- `-noruby ` disable ruby sequence to restart
- `-stupid ` restart rapidly stupidly
- `-novsids ` disable Variable State Independent Decaying Sum heuristic
- `-nophase ` disable phase saving
- `-noanrfa ` disable Average Number Recently Flipped Assignments
- `-multi ` enable multi-thread running all method concurrently
- `-rand ` add random factor in VSISD
- `-pos ` pick positive phase while tie
- To run all benchmarks in *.cnf under directory `python3 test.py path-to-directory`
- To validate the sat result `python3 validator.py benchmark.cnf benchmark.sat`
- To run all SAT benchmarks
1. put all SAT benchmarks under `benchmarks/SAT/`
2. run `python3 testsat.py`
- To run all UNSAT benchmarks
1. put all UNSAT benchmarks under `benchmarks/UNSAT/`
2. run `python3 testunsat.py`
## Result
Run-times obtained on Intel Pentium CPU N3540 @ 2.16GHz × 4 and recored in second.
TLE(time limit exceed) is set to 1200 seconds.
### Benchmark from course PACA
For those whose correct answer is SAT, the answer is checked by my validator.
| M2 testcase | M2 | 5e3 | 704 | 416 |
| ------------------------ | ------: | -----: | -----: | ----: |
| aim-50-1_6-no-2.cnf | 0.000 | 0.000 | 0.000 | 0.000 |
| aim-50-1_6-no-3.cnf | 0.000 | 0.000 | 0.000 | 0.000 |
| aim-50-1_6-no-4.cnf | 0.000 | 0.000 | 0.000 | 0.000 |
| aim-50-1_6-yes1-1.cnf | 0.000 | 0.000 | 0.000 | 0.000 |
| aim-50-1_6-yes1-2.cnf | 0.000 | 0.000 | 0.000 | 0.000 |
| aim-50-1_6-yes1-3.cnf | 0.000 | 0.000 | 0.000 | 0.000 |
| aim-50-1_6-yes1-4.cnf | 0.000 | 0.000 | 0.000 | 0.000 |
| dubois26.cnf | 0.005 | 0.007 | 0.006 | 0.022 |
| dubois27.cnf | 0.002 | 0.003 | 0.003 | 0.015 |
| dubois28.cnf | 0.002 | 0.005 | 0.008 | 0.015 |
| dubois29.cnf | 0.003 | 0.005 | 0.003 | 0.007 |
| hole6.cnf | 0.019 | 0.013 | 0.015 | 0.012 |
| hole7.cnf | 0.208 | 0.130 | 0.134 | 0.105 |
| hole8.cnf | 5.229 | 3.191 | 1.370 | 0.822 |
| hole9.cnf | 200.973 | 76.687 | 15.186 | 9.996 |
| ii8a1.cnf | 0.000 | 0.000 | 0.000 | 0.000 |
| ii8a2.cnf | 0.000 | 0.000 | 0.000 | 0.000 |
| ii8a3.cnf | 0.001 | 0.001 | 0.001 | 0.001 |
| ii8a4.cnf | 0.001 | 0.001 | 0.002 | 0.001 |
| par8-1-c.cnf | 0.000 | 0.000 | 0.000 | 0.000 |
| par8-2-c.cnf | 0.000 | 0.000 | 0.000 | 0.000 |
| par8-3-c.cnf | 0.000 | 0.000 | 0.001 | 0.001 |
| par8-4-c.cnf | 0.000 | 0.000 | 0.000 | 0.000 |
| aim-100-1_6-no-1.cnf | 0.001 | 0.000 | 0.000 | 0.000 |
| aim-100-1_6-no-2.cnf | 0.001 | 0.000 | 0.001 | 0.001 |
| aim-100-1_6-no-3.cnf | 0.001 | 0.001 | 0.001 | 0.001 |
| aim-100-1_6-no-4.cnf | 0.001 | 0.001 | 0.001 | 0.000 |
| aim-100-1_6-yes1-1.cnf | 0.000 | 0.000 | 0.000 | 0.000 |
| aim-100-1_6-yes1-2.cnf | 0.000 | 0.000 | 0.001 | 0.001 |
| aim-100-1_6-yes1-3.cnf | 0.001 | 0.000 | 0.001 | 0.001 |
| aim-100-1_6-yes1-4.cnf | 0.001 | 0.000 | 0.000 | 0.000 |
| aim-200-1_6-no-1.cnf | 0.001 | 0.001 | 0.001 | 0.001 |
| aim-200-1_6-no-2.cnf | 0.001 | 0.001 | 0.001 | 0.001 |
| aim-200-1_6-no-3.cnf | 0.002 | 0.001 | 0.002 | 0.001 |
| aim-200-1_6-no-4.cnf | 0.001 | 0.001 | 0.001 | 0.000 |
| aim-200-1_6-yes1-1.cnf | 0.001 | 0.001 | 0.001 | 0.001 |
| aim-200-1_6-yes1-2.cnf | 0.003 | 0.002 | 0.002 | 0.002 |
| aim-200-1_6-yes1-3.cnf | 0.001 | 0.001 | 0.001 | 0.001 |
| aim-200-1_6-yes1-4.cnf | 0.002 | 0.001 | 0.001 | 0.001 |
| jnh201.cnf | 0.001 | 0.001 | 0.001 | 0.001 |
| jnh210.cnf | 0.000 | 0.001 | 0.001 | 0.001 |
| jnh301.cnf | 0.004 | 0.003 | 0.003 | 0.004 |
| jnh310.cnf | 0.000 | 0.000 | 0.000 | 0.000 |
| ii16a1.cnf | 0.010 | 0.144 | 0.029 | 0.042 |
| ii16a2.cnf | 0.010 | 0.292 | 2.187 | 0.730 |
| ii16b1.cnf | 0.026 | 1.662 | 1.987 | 0.211 |
| ii16b2.cnf | 0.043 | 0.030 | 0.016 | 0.066 |
| ii32b1.cnf | 0.001 | 0.001 | 0.001 | 0.001 |
| ii32b2.cnf | 0.008 | 0.013 | 0.023 | 0.028 |
| ii32b3.cnf | 0.011 | 0.033 | 0.183 | 0.035 |
| ii32b4.cnf | 0.021 | 0.106 | 0.387 | 0.096 |
| par16-1-c.cnf | 0.054 | 0.178 | 0.087 | 0.094 |
| par16-2-c.cnf | 0.274 | 0.203 | 0.347 | 0.235 |
| par16-3-c.cnf | 0.538 | 0.402 | 0.671 | 1.068 |
| par16-4-c.cnf | 0.042 | 0.162 | 0.181 | 0.150 |
Beside testcases provied by PACA, I also test online benchmarks from [SATLIB](http://www.cs.ubc.ca/~hoos/SATLIB/benchm.html).
`sat-100-430` means 100 variables and 430 clauses all satisfiable. Result record in `avg/max` format.
| Scale | 5e3 | 704 | 416 |
| -------------- | ----------: | -----------: | -----------: |
| sat-20-91 | 0.00/0.00 | 0.00/0.00 | 0.00/0.00 |
| sat-50-218 | 0.00/0.00 | 0.00/0.00 | 0.00/0.00 |
| sat-75-325 | 0.00/0.01 | 0.00/0.01 | 0.00/0.01 |
| sat-100-430 | 0.00/0.02 | 0.00/0.02 | 0.00/0.02 |
| sat-125-538 | 0.01/0.06 | 0.01/0.05 | 0.01/0.04 |
| sat-150-645 | 0.03/0.14 | 0.03/0.16 | 0.03/0.15 |
| sat-250-1065 | 3.89/43.49 | 4.47/24.05 | 5.70/33.84 |
| unsat-50-218 | 0.00/0.00 | 0.00/0.00 | 0.00/0.00 |
| unsat-75-325 | 0.00/0.01 | 0.00/0.01 | 0.00/0.01 |
| unsat-100-430 | 0.01/0.02 | 0.01/0.03 | 0.01/0.02 |
| unsat-125-538 | 0.03/0.06 | 0.03/0.06 | 0.03/0.06 |
| unsat-150-645 | 0.08/0.17 | 0.08/0.17 | 0.08/0.21 |
| unsat-250-1065 | 23.02/79.67 | 19.95/114.28 | 29.16/111.99 |
Also I run SAT competition 2006’s benchmark_1 and compare the result with those competitor.
| instance | ans | compsat | HaifaSat | Jerusat1_2_c | minisat_stat | sat4j | SatELiteGTI | zchaff-2004 | yasat |
| ------------------------- | ----- | ------: | -------: | -----------: | -----------: | ----: | ----------: | ----------: | -------: |
| een-tipb-sr06-par1.cnf | UNSAT | 15.1 | 35.7 | 11.0 | 1.6 | 6.5 | 2.9 | 2.2 | 1.201 |
| een-tipb-sr06-tc6b.cnf | UNSAT | 2.4 | 52.8 | 2.0 | 0.3 | 1.7 | 1.0 | 0.5 | 0.509 |
| goldb-heqc-desmul.cnf | UNSAT | 372.6 | 124.6 | X | 78.8 | 217.6 | 77.0 | 157.3 | 162.977 |
| goldb-heqc-rotmul.cnf | UNSAT | X | 306.3 | X | 165.0 | X | 257.3 | 136.9 | 456.686 |
| grieu-vmpc-s05-24s.cnf | SAT | X | 371.6 | 210.7 | 13.8 | 341.3 | 13.9 | X | 81.745 |
| grieu-vmpc-s05-27r.cnf | SAT | X | X | 17.6 | 701.1 | X | 691.8 | 462.9 | X |
| hoons-vbmc-s04-05.cnf | UNSAT | X | 106.3 | X | 251.1 | 128.0 | 20.5 | 316.4 | 238.522 |
| hoons-vbmc-s04-07.cnf | UNSAT | X | X | 597.0 | 194.9 | X | 53.3 | X | 277.209 |
| manol-pipe-c10b.cnf | UNSAT | X | X | X | 438.4 | X | 618.2 | 618.4 | 375.224 |
| manol-pipe-c10ni_s.cnf | UNSAT | 130.6 | 124.7 | 40.8 | 19.6 | 70.4 | 8.5 | X | 439.861 |
| manol-pipe-c6id.cnf | UNSAT | X | 205.4 | X | 156.1 | 364.7 | 68.4 | 480.1 | 36.683 |
| manol-pipe-c6n.cnf | UNSAT | 362.4 | 124.4 | X | 53.7 | 230.0 | 34.6 | 110.2 | 82.242 |
| manol-pipe-c6nid_s.cnf | UNSAT | 125.2 | 31.5 | X | 96.5 | 66.8 | 57.6 | 663.0 | X |
| manol-pipe-c7_i.cnf | UNSAT | 243.5 | 43.8 | X | 17.7 | 62.8 | 9.4 | 7.1 | 120.825 |
| manol-pipe-c7idw.cnf | UNSAT | X | 357.6 | X | 483.7 | 713.0 | 566.5 | 865.0 | 1123.455 |
| manol-pipe-c8_i.cnf | UNSAT | 279.4 | 45.6 | X | 18.1 | 84.3 | 35.6 | 8.8 | X |
| manol-pipe-c8b_i.cnf | UNSAT | X | 544.2 | X | 146.1 | 591.0 | 94.6 | 227.3 | X |
| manol-pipe-c8n.cnf | UNSAT | X | 638.1 | X | 153.9 | 777.6 | 72.8 | 353.7 | 61.918 |
| manol-pipe-f6b.cnf | UNSAT | 25.0 | 30.7 | 111.5 | 4.1 | 25.9 | 2.8 | 5.8 | 29.550 |
| manol-pipe-f6n.cnf | UNSAT | 28.8 | 33.5 | 168.4 | 8.8 | 20.3 | 3.0 | 6.9 | 24.757 |
| manol-pipe-g10idw.cnf | UNSAT | X | 237.4 | X | 244.0 | X | 482.7 | 541.6 | 15.363 |
| manol-pipe-g7n.cnf | UNSAT | 70.7 | 31.9 | 685.9 | 4.2 | 20.8 | 2.1 | 10.0 | 19.465 |
| manol-pipe-g6bid.cnf | UNSAT | 29.8 | 15.0 | 715.5 | 7.7 | 17.4 | 2.5 | 16.6 | X |
| narai-vpn-10s.cnf | UNSAT | X | X | X | 681.2 | X | 866.7 | 605.4 | 412.016 |
| schup-l2s-s04-abp4.cnf | UNSAT | X | 181.4 | X | 170.9 | X | 122.7 | X | 708.045 |
| simon-mixed-s02bis-01.cnf | SAT | X | X | X | 215.2 | 186.2 | 607.0 | X | 1042.069 |
| simon-mixed-s02bis-03.cnf | SAT | X | 30.5 | X | 236.4 | X | 164.2 | X | 193.690 |
| simon-mixed-s02bis-05.cnf | SAT | X | X | X | X | X | 577.9 | X | X |
| stric-bmc-ibm-10.cnf | SAT | 32.1 | 25.0 | 3.6 | 2.9 | 9.7 | 2.3 | 11.1 | 7.140 |
| stric-bmc-ibm-12.cnf | SAT | 43.3 | 70.0 | 51.5 | 8.8 | 19.6 | 6.3 | 29.5 | 51.332 |
| vange-color-inc-54.cnf | SAT | 89.2 | 151.2 | 80.5 | 28.5 | 72.6 | 8.1 | X | 14.600 |
| velev-eng-uns-1.0-04.cnf | UNSAT | 31.6 | 19.7 | 76.3 | 10.0 | 24.5 | 8.7 | 30.1 | 50.747 |
| velev-eng-uns-1.0-04a.cnf | UNSAT | 215.9 | 171.6 | 358.2 | 55.1 | 119.9 | 49.1 | 549.1 | 133.157 |
| velev-fvp-sat-3.0-07.cnf | SAT | 396.2 | 114.8 | 57.3 | X | 346.0 | X | 890.7 | 30.603 |
| velev-fvp-sat-3.0-12.cnf | SAT | 71.0 | 50.2 | 57.0 | 6.3 | 25.4 | 3.8 | 3.0 | 25.085 |
| velev-live-sat-1.0-03.cnf | SAT | 131.0 | X | X | 10.2 | 55.8 | 124.7 | X | 345.989 |
| velev-live-sat-1.0-01.cnf | SAT | 191.9 | 209.7 | X | 13.4 | 28.8 | 23.8 | 626.6 | 443.933 |
| velev-npe-1.0-02.cnf | UNSAT | X | 24.5 | 346.3 | 16.2 | 164.9 | 11.8 | 59.0 | 137.459 |
| velev-npe-1.0-03.cnf | SAT | 220.3 | 77.3 | X | 5.9 | 359.4 | 35.6 | 327.0 | 149.678 |
| velev-pipe-1.0-08.cnf | SAT | 12.9 | 67.6 | 221.7 | X | 43.2 | X | 66.6 | 760.339 |
| velev-pipe-1.0-09.cnf | SAT | 683.4 | 288.3 | X | 7.1 | 706.3 | 145.7 | X | X |
| velev-pipe-1.1-03.cnf | SAT | 789.5 | 404.3 | X | 7.1 | X | 29.7 | X | X |
| velev-pipe-1.1-05.cnf | SAT | 356.2 | 418.6 | X | 4.9 | 339.2 | 29.8 | 202.6 | 99.089 |
| velev-pipe-uns-1.0-08.cnf | UNSAT | X | 638.0 | X | X | X | X | 843.3 | X |
| velev-pipe-uns-1.1-05.cnf | UNSAT | 345.3 | 14.5 | X | X | 389.6 | X | 17.7 | X |
| velev-pipe-uns-1.1-07.cnf | UNSAT | X | 161.0 | X | X | X | X | 195.5 | X |
| velev-sss-1.0-cl.cnf | UNSAT | 0.9 | 0.5 | 61.1 | 0.4 | 1.6 | 0.3 | 0.4 | 2.765 |
| velev-vliw-sat-2.0-02.cnf | SAT | 39.1 | X | X | 13.6 | 36.5 | 55.1 | 22.4 | 221.719 |
| velev-vliw-sat-2.0-04.cnf | SAT | X | X | X | X | X | 139.4 | X | X |
| velev-vliw-uns-2.0-02.cnf | UNSAT | X | X | X | X | X | X | X | X |