限珠案を解析する「VLM Analyzer」をリリースしました。
VLM Analyzerの特徴は
- [math]n[/math]手五連(通常は[math]n=4, 5[/math])形式の問題を解図/解析可能
- ほとんどの五手五連問題を1秒以内に解図可能
- 全変化の解出力が可能
- 余詰検出が可能
と高速性はもちろん全変化出力、余詰検知など他のSolverではあまり提供されていない機能を提供しています。なお、以前は二手勝ち(≒四手五連)、三手勝ち(≒五手五連)形式での出題もありましたが、最近はほとんどの作品が[math]n[/math]手五連形式になっているため[math]n[/math]手五連形式のみサポートしています。
ただ、現状ではCUI版のみの提供&Linuxでの動作確認のみとなっており使い勝手という面ではまだまだ改善の余地があります。こちらは追々環境を整えていきたいと思っています。
インストール方法
詳細は別記事にしていますが、GitHubに公開しているレポジトリからソースを取得してビルドする形になります。現状、動作確認をしたのはUbuntu16.04のみですがLinux系(MacOS, CentOSなど)であれば同様の手順でインストールができると思います。
実行方法
実行例として「わくわく連珠ランド」さんで紹介されていた3手勝ち(≒五手五連)問題をVLM Analyzerで解析します。(問題の解答が出てくるので自力で解きたい方はまず解いてからご覧ください。)
解図対象となる問題は「影」(高木 光男 二段・作, 初出:連珠世界1969年05月号)です。
この問題を[a-o]形式で表現すると
hhihgifihfjfjheifegehedfdicmdkhmkllclfbicdcbdcengmibhclnkcndmjninlnm
になるのでvlm_analyzer/cuiディレクトリに移り以下を実行すると問題を解図できます。
./build/vlm_analyzer -s hhihgifihfjfjheifegehedfdicmdkhmkllclfbicdcbdcengmibhclnkcndmjninlnm --depth 7
なお、depthオプションは五手五連を解く場合には7を、四手五連を解く場合には5を指定します[1]一般には[math]n[/math]手五連を解く場合には[math]2n-3[/math]を指定します。。
他にもPOS形式ファイルで保存し(01_影.posとします)と
./build/vlm_analyzer --pos 01_影.pos --depth 7
としても同様に解図できます。数秒もかからず(私の環境では0.466秒で)以下の解図結果が出力されます。
Build:Release VLM Transposition Info: Data type: Exact Board(80 bytes) Table size: 6291449 Table space: 528 MB Result: Solved First Move: gc Best response: Unknown Proof Tree: gc(ppeb(fafcecgd)(befcecgd)(affcecgd))(dajd(lbicjcke)(ieicjcke)(ggicjcke))(fajd(lbicjcke)(ieicjcke)(ggicjcke))(ebjd(lbicjcke)(ieicjcke)(ggicjcke))(ecjd(lbicjcke)(ieicjcke)(ggicjcke))(fcjd(lbicjcke)(ieicjcke)(ggicjcke))(gdjd(lbicjcke)(ieicjcke)(ggicjcke))(bejd(lbicjcke)(ieicjcke)(ggicjcke))(afjd(lbicjcke)(ieicjcke)(ggicjcke))(ifjd(lbicjcke)(ieicjcke)(ggicjcke)) Dual Solution: Unknown Depth: 7 Nodes: 305098 ProofTree: 54 / 54 (100 %) Simulation: 475 / 534 (89 %) Time(s): 0.466 NPS: 654716
前半はBuild(動作モード)やVLM Transposition Info(置換表と呼ばれる探索結果を記録しておく表に関するログ)で、探索結果は
- Result: 探索結果(Solvedは解図成功、Terminatedは探索打切、Disprovedは不詰)
- First Move: 解手順の初手
- Best response: 最善応手
- Proof Tree: 全変化を含む解手順([a-o]形式)
- Dual Solution: 余詰探索結果(Unknownは不明、-は余詰なし、余詰がある場合は余詰手順)
- Depth: 7の場合は五手五連、5の場合は四手五連
- Nodes~NPS: 探索ログ
となります。
余詰の有無や最善応手を知りたい場合には–dualオプションを付けて実行します。
./build/vlm_analyzer --dual -s hhihgifihfjfjheifegehedfdicmdkhmkllclfbicdcbdcengmibhclnkcndmjninlnm --depth 7
余詰探索は時間がかかるのでしばらく待つと以下の出力が得られます。
Build:Release VLM Transposition Info: Data type: Exact Board(80 bytes) Table size: 6291449 Table space: 528 MB Result: Solved First Move: gc Best response: gcdajdlbicjcke Proof Tree: gcpp(eb(fafcecgd)(befcecgd)(affcecgd))(jd(lbicjcke)(ieicjcke)(ggicjcke)) Dual Solution: - Depth: 7 Nodes: 55184580 ProofTree: 4 / 5 (80 %) Simulation: 191 / 194 (98.5 %) Time(s): 59.475 NPS: 927861
「Dual Solution」が「-」となっているので無事、余詰はなさそうだと分かります。限珠案の作成や審査時に余詰がなさそうかの検討に活用いただけるのではと思います。
References
↑1 | 一般には[math]n[/math]手五連を解く場合には[math]2n-3[/math]を指定します。 |
---|
ピンバック: VLM AnalyzerでSGF形式に対応 | 連珠プログラム(Quinstella, REAL Core)開発ブログ
ピンバック: VLM AnalyzerでSGF形式に対応 | 連珠プログラム開発ブログ