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

ゲームAIの解説書を読むと「アルファベータ法で先読みする」と書いてあります。理屈は分かっても、実際にどんな順番で手を調べ、どこで打ち切っているのかは、文章だけではなかなか頭に入りません。

そこで、オセロの対戦相手(COM)が先読みしている様子を、そのまま画面で見られるようにしました。プログラムを勉強している方向けのバージョンです。

オセロ 4.0 探索の可視化 調べている盤面と集計の画面
いま COM が調べている盤面と、そのときの α・β・評価値が表示されます

何が見えるのか

盤の下にある「いまの盤面で読ませる」を押すと、COM の先読みが始まります。1 ステップずつ進めながら、次の 4 つを目で追えます。

  • どんな順番で手を調べているか — 深さ優先で潜っていく様子
  • 各ノードの盤面 — 仮に打った結果どうなるか
  • 評価値が下から上へ伝わる仕組み — 終点で点数をつけ、最大・最小を交互に取る
  • アルファベータ枝刈り — 調べる必要がなくなった手が切り捨てられる瞬間

枝刈りが目で分かります

いちばん見てほしいのが枝刈りです。打ち切りが起きると、調べずに済ませた手が赤い破線のノードとして現れます。「このマスは候補だったけれど、調べるまでもなく却下された」ということが一目で分かります。

オセロ 4.0 探索の可視化 探索ツリーと枝刈りされた手
上が開始局面、下へ行くほど深い読み。赤い破線が「調べずに済んだ手」です

枝刈りを止めて比べられます

「枝刈り: する/しない」を切り替えると、同じ局面でどれだけ手間が変わるかが数字で出ます。実際に測った値がこちらです。

  • 深さ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つ進む」を押し続けられます。

遊ぶ・見る

インストール不要、ブラウザだけで動きます。

▶ オセロ 4.0 探索の可視化を開く

ほかのバージョン

オセロ 3.1 初心者用(おすすめの手に順位) / オセロ 3.0 初心者用 / オセロ 2.0 学習用 / 通常版のオセロ