オセロ 4.0 探索の可視化 – ゲームAIの先読みを目で見る

ゲームAIの解説書を読むと「アルファベータ法で先読みする」と書いてあります。理屈は分かっても、実際にどんな順番で手を調べ、どこで打ち切っているのかは、文章だけではなかなか頭に入りません。
そこで、オセロの対戦相手(COM)が先読みしている様子を、そのまま画面で見られるようにしました。プログラムを勉強している方向けのバージョンです。

何が見えるのか
盤の下にある「いまの盤面で読ませる」を押すと、COM の先読みが始まります。1 ステップずつ進めながら、次の 4 つを目で追えます。
- どんな順番で手を調べているか — 深さ優先で潜っていく様子
- 各ノードの盤面 — 仮に打った結果どうなるか
- 評価値が下から上へ伝わる仕組み — 終点で点数をつけ、最大・最小を交互に取る
- アルファベータ枝刈り — 調べる必要がなくなった手が切り捨てられる瞬間
枝刈りが目で分かります
いちばん見てほしいのが枝刈りです。打ち切りが起きると、調べずに済ませた手が赤い破線のノードとして現れます。「このマスは候補だったけれど、調べるまでもなく却下された」ということが一目で分かります。

枝刈りを止めて比べられます
「枝刈り: する/しない」を切り替えると、同じ局面でどれだけ手間が変わるかが数字で出ます。実際に測った値がこちらです。
- 深さ2 — 枝刈りあり 11 ノード / なし 17 ノード
- 深さ3 — 枝刈りあり 32 ノード / なし 73 ノード
- 深さ4 — 枝刈りあり 141 ノード / なし 317 ノード
深く読むほど差が開きます。ちなみに実戦の「普通」は 5 手読みで、枝刈りなしなら 45 万ノードかかる計算を、4 千ノードほどに抑えています。
画面の使い方
- 読む深さ — 1〜4 から選べます。全体の形を掴むなら 2、細かく追うなら 3〜4 がおすすめです
- 1つ進む/1つ戻る — 1 ステップずつ確認できます
- 自動再生 — 速度を変えながら流して見られます
- いまの盤面で読ませる — あなたの手番で「もし COM が打つなら」を観察
- 直前のCOMの思考を見る — COM が指した後、実際に直面した盤面で再生
ノードの枠の色は手番を表します。青が COM(白)の番で点数を最大にしたい場面、オレンジがあなた(黒)の番で点数を最小にしたい場面です。交互に入れ替わるのがミニマックス法の考え方そのものです。
作りのメモ
内部では「探索しながら描く」のではなく、いったん全部記録してから再生する方式にしています。探索中に「ノードに入った/点数をつけた/枝刈りした/戻った」というできごとを配列に貯めておき、画面はそれを順番に再生するだけです。
こうすると巻き戻しができますし、何より対局用の思考ルーチンに手を入れずに済みます。記録を取らないときは、従来とまったく同じ処理が走ります。
スマートフォンでも見られるように、操作ボタンは画面上部に貼り付くようにしました。樹形図をスクロールしながら「1つ進む」を押し続けられます。
遊ぶ・見る
インストール不要、ブラウザだけで動きます。
ほかのバージョン
オセロ 3.1 初心者用(おすすめの手に順位) / オセロ 3.0 初心者用 / オセロ 2.0 学習用 / 通常版のオセロ