メインコンテンツへスキップ
記事一覧に戻る
programmingリバーシ開発の舞台裏 (3/3)

ゲームAIの評価関数を設計する - リバーシの「強さ」はどう決まるのか

リバーシ(オセロ)AIの評価関数を設計する方法を徹底解説。位置評価マトリクス、角の価値、機動力(モビリティ)、終盤戦略の切り替えなど、AIの「強さ」を決める4つの要素をコード付きで紹介します。

2026-04-1322 min readAdabana Saki
-
リバーシオセロAI評価関数ゲーム開発TypeScriptアルゴリズム
シリーズ中級者〜上級者

リバーシ開発の舞台裏

リバーシ(オセロ)ゲームの開発で使ったAIアルゴリズム、オンライン対戦の実装、評価関数の設計を解説

進捗3 / 3

ゲームAIの評価関数を設計する - リバーシの「強さ」はどう決まるのか

「AIが強い」とは、具体的にどういうことでしょうか?

シリーズ第1回で紹介したミニマックス法は、ゲーム木を探索して最善手を見つけるアルゴリズムでした。しかし、ゲーム木のすべての末端(葉ノード)まで探索するのは現実的ではありません。途中で探索を打ち切り、その時点の盤面がどちらに有利かを判断する必要があります。

その判断を担うのが評価関数です。評価関数はAIの「目」であり、その精度がそのままAIの強さに直結します。

Text

この記事では、ADA Labのリバーシゲームで実際に使っている評価関数を分解し、4つの要素がどのようにAIの強さを生み出しているかを解説します。

素朴なアプローチ:石の数を数える

最もシンプルな評価関数は「石の数が多い方が有利」というものです。

TypeScript

リバーシでは、これはほとんど役に立ちません。なぜでしょうか?

Text

リバーシの本質は「最後に石が多い方が勝つ」ゲームですが、途中経過の石の数は強さの指標にならないのです。ここが評価関数の設計で最も注意すべきポイントです。

実際の評価関数:4つの要素

ADA Labのリバーシで使っている評価関数は、4つの要素を組み合わせています:

TypeScript

それぞれの要素を深く見ていきましょう。

要素①:位置評価マトリクス

リバーシの盤面では、マスの位置によって戦略的価値が大きく異なります。これを数値化したのが位置評価マトリクスです。

TypeScript

盤面上のすべての石に対して、自分の石なら加点、相手の石なら減点します。このマトリクスには、リバーシの戦略が凝縮されています。

角(コーナー)= 100点

Text

角は盤面で最も価値の高いマスです。100点という重みは、他のどのマスよりも圧倒的に高い評価を与えます。

Xスクエア = -40点(最も危険な場所)

Text

Xスクエアに打つと、相手に角を取る機会を与えてしまいます。-40点は「このマスには打つな」という強い警告です。

Cスクエア = -20点

Text

辺 = 10点

Text

中央 = 1〜4点

中央のマスは四方八方から攻められるため価値は低いですが、序盤の展開に影響します。ゼロではなく小さな正の値を付けることで、「何もないところに打つよりは中央寄りの方がマシ」という程度の判断を可能にしています。

要素②:角ボーナス(+50/-50)

位置評価マトリクスですでに角に100点をつけていますが、さらに追加で50点のボーナスを加えます。

TypeScript
Text

なぜ二重に加点するのか?それは角の価値が「位置の良さ」だけでなく、戦略的な支配力にもあるからです。角を取ると、そこから辺に沿って安定石を連鎖的に増やせます。その波及効果は単なる位置評価では捉えきれません。

要素③:モビリティ(機動力)

モビリティは、打てる手の数の差を評価する要素です。

TypeScript

リバーシでは「選択肢が多い方が有利」です。なぜなら:

Text

具体例を見てみましょう:

Text

重み係数の5は、「有効手1つの差 = 5点の価値」を意味します。位置評価の中央マス(1〜4点)より大きく、辺(10点)より小さい。これは、有効手の差は重要だが、辺や角の確保ほど決定的ではないというバランスを表しています。

要素④:終盤の石数カウント

最後の要素は、ゲーム終盤でのみ発動する石の数の差です。

TypeScript

なぜ序盤では使わないのか?

冒頭で説明したとおり、リバーシでは序盤〜中盤に石が多いのはむしろ不利です。

Text

しきい値が50の理由

64マス中50マスが埋まると、残りは14マス。この時点で:

Text

重み係数の3は控えめに設計されています。終盤でも位置評価やモビリティは重要であり、石数だけに偏らないようにバランスを取っています。

具体的なスコア計算例

実際の盤面でスコアを計算してみましょう:

Text
Text

Normal AIとHard AIの評価の違い

第1回の記事で紹介したNormal AIは、もっとシンプルな評価を使います:

Text

違いを具体例で見てみましょう:

Text

Normal AIでも「たまたま」正解を選ぶことはありますが、Hard AIはなぜその手が良いのかを数手先まで読んで確信した上で選びます。この差がゲーム全体を通じて蓄積され、勝率に大きな違いを生みます。

動的な探索深度との連携

評価関数は探索の打ち切り地点で呼ばれるため、探索深度が深いほど正確な判断ができます。

TypeScript
Text

さらに強くするには?

現在の評価関数でも十分に強いAIですが、さらに改善する方法はいくつかあります:

1. 安定石(Stable Discs)の評価

現在のマトリクスは位置で固定的に評価していますが、実際にはゲームの進行によってマスの価値は変わります。「絶対に裏返されない石」(安定石)を動的に検出して加点すれば、より正確な評価ができます。

Text

2. 開局定石データベース

リバーシには研究された定石があります。序盤の数手を定石データベースから引くことで、探索を省略しつつ最善手を打てます。

3. フェーズごとの重み調整

現在は全フェーズで同じ POSITION_WEIGHTS を使っていますが、序盤・中盤・終盤で重みを切り替えれば精度が向上します。例えば、角が既に取られた後のCスクエアやXスクエアは危険度が下がるため、マイナス評価を緩和できます。

4. ニューラルネットワーク評価

手動で設計した評価関数の代わりに、大量の棋譜データからニューラルネットワークで評価関数を学習させるアプローチもあります。AlphaGoがこの方法で人間を超えたのは有名な話です。

まとめ

リバーシAIの評価関数は、4つの要素の組み合わせで「盤面の有利さ」を判定します:

Text

各要素の設計思想をまとめると:

要素重視する場面設計意図
位置評価全フェーズどのマスが戦略的に重要かを数値化
角ボーナス全フェーズ角の圧倒的な支配力を追加評価
モビリティ序盤〜中盤相手を追い詰める戦略を評価
終盤石数終盤のみ最終的な勝利条件に直結

評価関数の設計は、ゲームの本質を理解し、それをコードに落とし込む作業です。リバーシの「角を取れ」「序盤は石を少なく」「相手の選択肢を減らせ」といった戦略的知識が、そのまま4つの要素に反映されています。

ゲームAIの面白さは、こうした人間の直感的な知識を定量化できるところにあります。評価関数をチューニングするだけでAIの棋風が変わる。位置評価の重みを変えれば角重視型に、モビリティの係数を上げれば支配型になる。自分好みのAIを設計する楽しさを、ぜひ体験してみてください。

実際に動くコードは ADA Labのリバーシゲーム で体験できます。