結局0.5.1はリリースできませんでした。12月にやったことは
というあたり。 個人的には、初めてVec以外のデータ構造(HashMap)を導入したことが大きいです。 やはりリリース直前のベンチマークに時間を取られてしまったものの、ドキュメントの更新は終わっているので、ベンチマークさえいい結果、いやよくなくてもいいのでそこそこの結果が出ればリリースするつもりなので、最速で2021年元旦に出せるはず。
Rephasingの実現手法として変数のrewardに反映させてみた。活性度に反映させるのではなく独立した項目にして線型結合(単に和をとるだけ)してみたら考えてみる価値がある結果になった。 混ぜない方がいい。やはり合議制のマルチエージェントの並行動作が行き着くところかもしれない。 全然ベンチマークでのベストを更新できてないので、これが本当によい手法と言えるかどうかは微妙なんだけど、それまでのもっとも解に近い点を足掛かりにして探索を進めるのはあるかもしれないし、まあ納得できる。 意外なのは極端な設定に振った方が結果が出ていること。 Stabilizationでいえばstabilizationしっぱなしが一番いいという感じ。 なので現在のコードはマルチエージェント合議制に対しては否定的なんだがエビデンスを得るためには、色々試してみないといけない。 Luby数列を使ったStabilizationとのコード的な組み合わせ爆発もあるし、なかなかこれでいいという踏ん切りがつけられない。 ということで一ヶ月では終わる話題ではなかったのでした。
Sudoku 64はここで見つけたもの。 Sudoku 25が1秒以下で解けたこと、一意な解答保証のため結構初期状態で埋まったものだったことから、これもすぐ解けるのかと思ったら20秒も掛かってしまった。 BCP 始める前に解けているのでこれは pre-processor が重いのだろう。外してみると8秒でした。
$ splr --ELI 0 sudoku64.cnf
sudoku64.cnf 262144,41048269 |time: 8.31
#conflict: 0, #decision: 0, #propagate: 262144
Assignment|#rem: 259891, #ass: 2253, #elm: 0, prg%: 0.8595
Clause|Remv: 0, LBD2: 0, Binc: 41029632, Perm: 41037005
Restart|#BLK: 0, #RST: 0, Lspn: 1, Lcyc: 0
EMA|tLBD: NaN, tASG: NaN, core: 262144, /dpc: NaN
Conflict|eLBD: 0.00, cnfl: 0.00, bjmp: 0.00, /ppc: inf
misc|elim: 0, cviv: 0, #vbv: 0, /cpr: NaN
Strategy|mode: Initial search phase before a main strategy
Result|file: ./.ans_sudoku64.cnf
s SATISFIABLE: sudoku64.cnf
Advent of Codeに初参加。面白かった。 SATで解けそうな問題が2つほどあってSplrを使ってみましたが、一勝一敗。 20日目のタイル組み合わせ問題では作ったCNFが10GBを超えてしまって、Splrにロードはできたものうんともすんとも言わなくなってしまいました。 結局その問題は単純にforループで回したら解けました。残念。
まずは0.6.0をリファクタリングバージョンとしてリリースしてしばらく勉強します。 それから年2回のリリースが現実的なので5月位に0.6.0のパラメータチューニングあるいは過去のものとの再融合バージョンが出せたらいいなあ。 あ、夏休みの宿題もしなければ。