学習節の平均 LBD は大きく揺れすぎ。節削減の影響もあるので節の持つ数値は使いにくい気がする。 そんなこともあって、統計処理したからといって探索パラメータとしては使いにくいのではないだろうか。 むしろ個々の学習節の生データで戦略を決定した方がいいかもしれない。ともあれ、データを取ってみよう。
まずは、枝刈り(悪い状態からの離脱)の効果に関して。
v360-c1530: 9 SATs + 1 UNS
T56.2.0.cnf 3145220,10854665 |time: 721.82
#conflict: 319339, #decision: 1751376, #propagate: 965031514
Assignment|#rem: 748607, #fix: 7573, #elm: 2389040, prg%: 76.1986
Clause Kind|Remv: 105560, LBD2: 35076, Binc: 19760, Perm: 5453978
Restart|#BLK: 1721, #RST: 1409, eASG: 0.0169, eLBD: 0.6303
Conflict|aLBD: 4.70, bjmp: 9.00, cnfl: 40.03 |#stg: 0
Clause DB|#rdc: 12, #sce: 463 |blkR: 1.4000, frcK: 0.7000
Strategy|mode: Non-Specific-Instance using generic settings
force_restart
における ema_lbd
による起動条件を抜いたものv360-c1530: 6 SATs + 3 UNSs
T56.2.0.cnf 3145220,10854665 |time: 944.43
#conflict: 341071, #decision: 2311368, #propagate: 1254204513
Assignment|#rem: 697575, #fix: 32350, #elm: 2415295, prg%: 77.8211
Clause Kind|Remv: 48361, LBD2: 34735, Binc: 21108, Perm: 4918971
Restart|#BLK: 620, #RST: 4765, eASG: 0.0195, eLBD: 0.5683
Conflict|aLBD: 4.92, bjmp: 10.17, cnfl: 51.10 |#stg: 0
Clause DB|#rdc: 13, #sce: 623 |blkR: 1.5000, frcK: 0.7000
Strategy|mode: Non-Specific-Instance using generic settings
block_restart
における ema_asg
による封鎖条件を抜いたものn360-v1560: 9 SATs + 1 UNS
T56.2.0.cnf 3145220,10854665 |time: 605.01
#conflict: 320514, #decision: 1747366, #propagate: 781715799
Assignment|#rem: 694683, #fix: 35089, #elm: 2415448, prg%: 77.9131
Clause Kind|Remv: 74302, LBD2: 34334, Binc: 19331, Perm: 5006638
Restart|#BLK: 5739, #RST: 662, eASG: 0.0147, eLBD: 0.6291
Conflict|aLBD: 4.94, bjmp: 9.16, cnfl: 52.13 |#stg: 0
Clause DB|#rdc: 12, #sce: 395 |blkR: 1.3000, frcK: 0.7000
Strategy|mode: Non-Specific-Instance using generic settings
わかったこと:
force_restart
の頻度を減らす方がいいと言うのは意外(というか薄々感じていたことに対する新たな物証)。 やはり解けない部分問題を徹底的に深く見ないと問題が解けないことはわからないのではないだろうか。。。と言うことで悪い状態から脱出する方法はかなり重要。不確実な未来予測(deep search)よりもこちらを優先すべきのようだ。 つまり'measure for forcing blocking'をどう設計するかが問題。そしてコーディングレベルではblock_restart
よりもforce_restart
の実装がより重要である。EMA of VAD を考えるべきだろうか。。。
そしてなぜ矛盾が発生していない(節にも変数活性度にも影響が及ばない)パスの中に force_restart
が埋め込まれているんだろうか? 学習節が追加されたら 1 度はpropagate
させる必要がある。だから、そのタイミングで 3 方向分岐すればいいのでは。
force_restart
は無矛盾パスに埋め込まれているかこれは矛盾が起きなくても変化する特徴量=割り当て率を即時に反映させたいからだろう。 これを backjump level などに置き換えるとリアルタイム性を失ってしまう。 最大到達決定レベル、すなわちc_lvl
との比較なら同等の即時性を持たせることができる。
T56.2 で実験しよう。
1/sum-of-va
に変更: 値変えても大きく悪化 -- 方向性間違えている変数活性度の変化から求解状況の特徴量を抽出しようとして、色々と試したがよい結果にならなかったのでアイデアに戻す(CHB3)。なお、CHB4(decay rate の変更とコードレベルの最適化) からの知見を back port してみたが同じ。