まともなSAT solverなら250変数の3-SATなんて1秒程度で解け、その求解速度なんてなんの尺度にもならないものだろう。 なので最近のSplrの開発は360変数の3-SATをマイクロベンチマークに使っている。 最近はまあ「そこそこ待ち遠しくない時間」でSAT問題、UNSAT問題どちらも解けるようになってきていた。 で、やっとSAT competition 2021での問題をつまみ食いし始めたのだけど、ある問題に衝撃を受けてしまった。
それはSATな320変数3-SAT問題170058143.cnf。解けて当然だと思ってたのだが、5000秒タイムアウトで解けない。 色々設定変えて、やっと解けたらこんな感じ:
$ splr ~/Library/SAT/SC20/170058143.cnf
170058143.cnf 320,1120 |time: 1574.08
#conflict: 6289871, #decision: 7955609, #propagate: 306206577
Assignment|#rem: 320, #ass: 0, #elm: 0, prg%: 0.0000
Clause|Remv: 195608, LBD2: 78093, Binc: 18750, Perm: 19871
Restart|#BLK: 1, #RST: 24004, trgr: 2, peak: 64
LBD|avrg: 14.0921, trnd: 0.9422, depG: 3.3053, /dpc: 1.08
Conflict|tASG: 0.9536, cLvl: 18.99, bLvl: 17.84, /ppc: 46.90
misc|elim: 5, #sub: 0, core: 0, /cpr: 227.20
Result|file: ./ans_170058143.cnf
s SATISFIABLE: /Users/nash/Library/SAT/SC20/170058143.cnf
部分解には至らずに、たまたま解を見つけたということか!
なんというか、どうしたもんか。すげーな。
散発的網羅的なclause vivificationを試してみたのだが、否定的だ。
big-bang initializationが効いた。それでもvivificationは必要のようだ。
いや、実際にはvivifierはなんの貢献もしていないので、活性度の「かき混ぜ」が鍵かもしれない。 なので、定期的に下駄を履かせてみると、、、、
ここまでのまとめ