限珠案(VLM)Analyzer

「VLM Analyzer」は限珠案を解析するエンジンです。

特徴を挙げると

  • [math]n[/math]手五連(通常は[math]n=4, 5[/math])形式の問題を解図/解析可能
  • ほとんどの五手五連問題を1秒以内に解図可能
  • 全変化の解出力が可能
  • 余詰検出が可能
  • SGF形式での入出力をサポート

と高速性はもちろん全変化出力、余詰検知など他のSolverではあまり提供されていない機能を提供しています。

現状、Linux, Mac上でCUI(コマンドベース)上でしか動かないのですがゆくゆくはWeb連珠盤とのシームレスな連携を実現したいと思っています。

インストール方法

GitHubに公開しているレポジトリからソースを取得してビルドする形になります。現状、動作確認をしたのはUbuntu16.04のみですがLinux系(MacOS, CentOSなど)であれば同様の手順でインストールができると思います。詳細はこちらの記事をご参照ください。

使い方

解図する局面の与え方は3通りあり

  • –sgf-input (SGF形式データ):SGF形式で記述された局面を指定。ダブルクォーテーション””で囲って指定する。
  • –string ([a-o]形式データ):[a-o]形式で記述された局面を指定
  • –pos (POS形式ファイルパス):POS形式ファイルのパス

のいずれかで指定します。例えば「わくわく連珠ランド」さんで紹介されている3手勝ち(≒五手五連)問題である「影」(高木 光男 二段・作, 初出:連珠世界1969年05月号)を例に説明します。問題局面はSGF形式では

(;GM[4]FF[4]SZ[15]AB[hh][gi][hf][jh][fe][he][di][dk][kl][lf][cd][dc][gm][hc][kc][mj][nl]AW[ih][fi][jf][ei][ge][df][cm][hm][lc][bi][cb][en][ib][ln][nd][ni][nm]PL[B];)

になるので

./build/vlm_analyzer --sgf-input "(;GM[4]FF[4]SZ[15]AB[hh][gi][hf][jh][fe][he][di][dk][kl][lf][cd][dc][gm][hc][kc][mj][nl]AW[ih][fi][jf][ei][ge][df][cm][hm][lc][bi][cb][en][ib][ln][nd][ni][nm]PL[B];)"

とすると解図結果が表示されます。

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: (略)
Dual Solution: Unknown
Depth: 7
Nodes: 305098
ProofTree: 54 / 54 (100 %)
Simulation: 475 / 534 (89 %)
Time(s): 0.466
NPS: 654716

前半はBuild(動作モード)や置換表と呼ばれる探索結果を記録しておく表に関するログで、探索結果は

  • Result: 探索結果(Solvedは解図成功、Terminatedは探索打切、Disprovedは不詰)
  • First Move: 解手順の初手
  • Best response: 最善応手(余詰探索モードのみ出力)
  • Proof Tree: 全変化を含む解手順([a-o]形式)
  • Dual Solution: 余詰探索結果(Unknownは不明、-は余詰なし、余詰がある場合は余詰手順)
  • Depth: 7の場合は五手五連、5の場合は四手五連
  • Nodes~NPS: 探索ログ

となります。

他にも以下のオプションをサポートしています。

  • –depth: 探索深さ(四手五連:5, 五手五連:7)
  • –dual: 余詰/最善応手を探索する
  • –sgf-output: 探索結果をSGF形式で出力する

例えば探索深さ7、余詰探索あり、結果をSGF形式で出力する場合は

./build/vlm_analyzer --depth 7 --dual --sgf-output --sgf-input "(;GM[4]FF[4]SZ[15]AB[hh][gi][hf][jh][fe][he][di][dk][kl][lf][cd][dc][gm][hc][kc][mj][nl]AW[ih][fi][jf][ei][ge][df][cm][hm][lc][bi][cb][en][ib][ln][nd][ni][nm]PL[B];)"

とします。余詰探索はすべての候補手を探索するため時間がかかるのでしばらく1)私の環境では1分程度待つと解を出力します。

Result: Solved
First Move: gc
Best response: gcdajdlbicjcke
Proof Tree: (略)
Dual Solution: -
Depth: 7
Nodes: 55184580
ProofTree: 4 / 5 (80 %)
Simulation: 191 / 194 (98.5 %)
Time(s): 58.565
NPS: 942279

「Dual Solution」が「-」となっているので無事、余詰はなさそうだと分かります。限珠案の作成や審査時に余詰がなさそうかの検討に活用いただけるのではと思います。「Proof Tree」に解手順の全変化が出力されます。SGF形式で出力しておくとWeb連珠盤で表示することができます。

ライセンス

MITライセンスでGitHub上に公開しています。開発に興味がある方はご参照ください。

References   [ + ]

1. 私の環境では1分程度