「戦略ゲームAI解体新書」読書会ログ 1, 2 章

戦略ゲームAI 解体新書 ストラテジー&シミュレーションゲームから学ぶ最先端アルゴリズム(三宅 陽一郎)|翔泳社の本

ここ数年で「AI」という言葉がいろんな文脈で使われるようになってしまい、個人的にも業務の中でシステムに OpenAI の API を組み込む部分が出てきたりしてたんですが、ゲームでいう AI 、例えば UE で想像するのは Behavior Tree みたいなものは、そもそもどういうものかってのが理解できてないので、一冊手に取ってみることにしました。
友人と週一で読書会をすることにしたので、ここではそのログをざっと記録することにします。

本書のスタンスとしては「ストラテジーゲームとその周辺の人工知能技術」を解説する、というのが正しいところです。

ストラテジーゲームというゲームも用語も正直あまり馴染みがないので、まずはそのスタンスの基盤になる「ストラテジーゲーム」についての説明から始まっています。

第1章 ストラテジーゲームとは

まずはアクションゲームとシミュレーションゲームと今回の主題であるストラテジーゲームの違いについて説明があります。
正直シミュレーションゲームとの違いが分かってなかったですが、「特定の現象のシミュレーションを含む」のがシミュレーションゲームであると理解しておけばいいようです。

ストラテジーゲームはプレイヤーに戦略的な思考を強いる、この時点ではまだ「戦略的な思考」は私はよくわかっていません。

1.1 ストラテジーゲームにおける人工知能技術

「ストラテジーゲームの本質は意思決定にある」とあります。よってストラテジーゲームの人工知能を学ぶことは、マネージメントの技術向上にも繋がるそうです。確かに業務の現場は意思決定の連続であり、特にマネージャー職はより大局を見る必要があるので、そう言えるのかもと思います。

本書の視点は「プレイヤーとしての人工知能」から見たゲームと人間のプレイヤーについてです。普段、プレイしているのとは視点が逆になります。人工知能がプレイヤーとなって人間のプレイヤーと対戦します。

UE で Behavior Tree をいじってるぐらいでは、この視点から考えることは個人的にはありません。とても楽しみです。

ここでボードゲームとの対比についても書かれていますが、当然ながらゲームでは「命令を出した対象が自動で移動・戦闘をする」ため「メンバーとしての人工知能」も存在することになります。

1.1.1 人工知能技術からみたストラテジーゲームの分類

こういう分類はすごく理解の助けになります。そして、シミュレーションRPGの分野ぐらいしか私には馴染みが無い。

図の横軸が「戦闘」「社会」になっていますが、シミュレーションにも「戦闘シミュレーション」「社会シミュレーション」の分類があるようです。
社会シミュレーションは、「社会の断面」や「日常的要素」などが絡み合う上に、心理学、認知科学社会学などとも接しているそうです。
こういうものが「典型的なストラテジーゲームの人工知能」と言えるようです。

図の縦軸は「世界発展」「育成」となっています。縦軸はゲーム世界側のダイナミクスを表しており、用いられる技術としては「シミュレーション技術」「マルチエージェント技術」のようなものがあり、その中間に「群知能」があるとなっています。
自律的なキャラクターとそれらを組み合わせた集団、想像できないですね。。

1.2 ターン制と想像力

個人的にはストラテジーゲームの分類として「ターンベーストストラテジーゲーム」「リアルタイムストラテジーゲーム」があることも知りませんでした。

  • 前者はゲームが静止しているため「最善手を考えるのが優先事項
  • 後者は時間軸でゲームが動くため「状況変化を想像(シミュレーション)することが必要

第2章 ストラテジーゲームと人工知能

2.1 ストラテジーゲームの定義

まずは、最も広義なストラテジーゲームの定義が展開されます。こういう定義はありがたいですね。なんとなく、ファイヤーエンプレムやピクミンを想像しながら読みます。

続いて、シミュレーションゲーム、ストラテジーゲーム、アクションゲームについて再考があります。

  • シミュレーションゲームといえば、現実をモデル化してゲームにしたもの
    • 例にあった列車を考えると、電車でGoもシミュレーションかぁなどと当たり前のことを思いました。
  • ストラテジーゲームの中でも、現実をモデル化した部分があれば、シミュレーションゲームと呼ばれることもある
  • つまり、多くの場所で上記2つは重なり合っている
  • 一方で、アクションゲームは対照的で、リアルタイムに自分の1体のキャラクターの身体を操作し、ゲームの大きな流れの中でミッション・戦闘をクリアする

ストラテジーゲームとアクションゲームは人工知能全体のフレームは変わらないが、重点的に開発する部分が異なるそうです。 - アクションゲームでは「敵キャラクター」 - ストラテジーゲームでは「キャラクターAI」および、対戦相手となる「プレイヤーの人工知能

2.2 ストラテジーゲームの3つの分類

まず、ストラテジーゲームの人工知能としては 3 つが基本であると説明されます。

  • プレイヤー
    • プレイヤーが指揮官となり、NPC に命令するゲーム
  • 世界
    • 自律的に発展していく世界にプレイヤーが干渉するゲーム
  • プレイヤー以外のキャラクター
    • プレイヤーが人工生物、人工社会を育成するゲーム

書籍内では、さらに 1章で出てきた図とのマッピングも書かれていますが、非常に整理として分かりやすいです。

2.2.1 プレイヤーが指揮官となるゲーム

ここでの人工知能はプレイヤーの指揮に従う「キャラクターAI」です。
AI が賢くなれば、プレイヤーの指示に「賢明に判断・行動・計画を自律的に」行えるようになるわけです。

書籍では「キャラクターとプレイヤーの距離感」と表現されており、これがこの分野のゲームで重要な要素のようです。
確かに、指示を送った AI が全く見当違いなことばかりするようでは、ゲームとして成立しませんね。。

2.2.2 自律的に発展していく世界に干渉するゲーム

ここでの人工知能は「街・惑星そのもの」となります。

元々は、「ライフゲーム」「オートマトン」といった自己発展プログラムをもとにしたようです。さっぱり聞いたことがありません。

どうやらこの分野はアカデミックには無い分野らしいです。自己発展・自己進化・自己成長(・自己増殖)とか夢があるのになぁ。

2.2.3 人工生物、人工社会を育成するゲーム

ここでの人工知能は「学習機能を持つキャラクター」となります。
このキャラクターが自律進化し、集団・社会を構成しそれに対してプレイヤーがどのように「教育」を行うかで学習・進化の方向が変化します。

ニューラルネットワーク」「遺伝的アルゴリズム」のような技術が使われます。今だと、LLM も活躍しそうな分野ですね。

友人が話していましたが、ドラクエ4の時は、パーティーに「命令させろ」がなかったので、動きは基本 AI だったようですが、(世間的にはアホなAIとも言われていたようですが)きちんと敵に対して戦術を試し、それを学習していっていたらしく、当時から学習する AI というものは身近にあったと言っていました。小学生の頃なので気にしたことなかったなぁ。

2.3 ストラテジーゲームにおいて人工知能がなぜ必要か?

これは、プレイヤーが指揮官となる場合だけでは無いと思いますが、
- 末端で動くキャラクターたちに知能をつけることで、プレイヤーに指揮官としての地位を与える

ということのようです。

また、プレイヤーからキャラクターへの指示は「命令(コマンド)」「操作(オペレーション)」の2つが基本のようです。

上記の指示を受け自律的に動作するキャラクターの人工知能を「キャラクターAI」と呼びます。これが賢ければ賢いほど「抽象的」な指示を与えることができるとあります。
そうなると、LLM が出てきた今だと、その抽象度はだいぶ上がっているのかもしれないなと感じます。

続いて、図を用いて、全体(戦略)レベル、チーム(戦術)レベル、個体レベルの AI について説明されています。
各レベルごとに AI があり、さらにこれまでも出てきていますが、「敵プレイヤーとしてのAI」が必要です。

キャラクターAI と対比して「プレイヤーAI (人工知能プレイヤー)」とも呼ぶようです。
そして、これはキャラクターAIと作り方は同じであるものおん、考える内容がより大きなスケールで、長時間に及ぶ計画になるようです。
実装したことの無い人間としては、それが個体レベルのキャラクターAI と作り方が同じというのが想像もできません。

2.4 ストラテジーゲームにおける時間と空間

ここでは、まずゲームの時間と空間の「離散的」「連続的」の分類と、それの組み合わせによるゲームのマッピングが説明されます。

「離散的」「連続的」という言葉は出てくるものの、ゲームとしては「リアルタイム or ターンベース」、「空間の単位の有無」みたいなもので整理できるようです。

2.4.1 で出てきますが、人工知能は時間・空間の両方で、「連続的なものが得意ではなく、離散的なものを得意とする」ようです。よって、無限も連続も扱えないプログラムにおいては連続的なものは離散的なもので近似して対応するようです。

2.4.2 ストラテジーゲームの時空間による分類

すでに図で説明されていますが、4つの分類を詳細に説明しています。

  1. 連続空間・リアルタイム
    • フィールドの上で敵味方ともにリアルタイムで進行
    • 絶え間なく命令を発し続けて、自分も自律的に動き続ける
  2. 離散空間・リアルタイム
    • フィールドはマス区切りなので、プレイヤー、AIともにマップの分割で思考を整理
    • リアルタイムに敵の陣地を攻略
  3. 連続空間・ターンベース
  4. 離散空間・ターンベース

2.5 ストラテジーゲームの人工知能の例題

2.5.1 ゲーム設定

まずは、例題のゲームの設定の紹介から。9人のメンバーがいて、3人のユニットを組み、同編成の敵と戦う。

特に意図はないと思うが、絵とパラメータが一致してなくて面白かった。(僧侶っぽいのに、パラメータでは物理で殴るキャラだったり)

2.5.2 ユニット編成メイキング

ユニット形成、チームビルディングとも呼ぶ。

人間プレイヤーと同様にプレイヤーAIもユニット編成を行うことがポイント。
AI 側はどのようにユニットを組むかを「方針 (Policy)」と「基準 (Criteria)」を用いる。
トップダウン型とボトムダウン型があり、それぞれが説明されている。

計算式なども出てくるが、確かに現実業務でのチーム編成もこういうことを感がているマネージャーがいるんだろうなぁと想像したりした。

2.5.3 出撃

ここでは、キャラクターの移動について説明がある。
「ナビゲーションAI」とその機能である「パス検索」が紹介されるが、そこでパス検索のために「連続空間(例えば地形)を離散化する」という方法が出てくる。

その方法に「ナビゲーションメッシュ」「ウェイポイントグラフ」が出てくる。ナビメッシュは UE でもお馴染みだが、「連続空間の離散化」の意味があるというのは理解に大きく役立った気がする。
実際、経路探索問題等になると、ここでも出てくるウェイポイントグラフの方が馴染みがある気がするので、ナビメッシュも同じであるというのはなるほどなと。

ナビメッシュは地形を「三角形」で離散化。ウェイポイントグラフはそのまま「ポイント」で離散化する。

2.5.4 ユニット移動とフォーメーション

陣形での移動について。この例題のゲームの絵が思い浮かんでいないが、ユニットの各メンバーもそれぞれパス検索して動いているんだなぁと思うと、アクションRPG のパーティーの移動も大変だなという気持ち。

2.5.5 遭遇

敵ユニットとのエンカウンターについて。ここで重要なのは「周囲を認識、記憶し、判断し、行動をする」ということらしい。
そしてその役割を担うものとして、「自律型エージェント」とそのアーキテクチャである「エージェント・アーキテクチャ」が紹介される。以降はエージェント・アーキテクチャが持つ各モジュールと先ほどの重要点のマッピング

  • センサー
    • 周囲を認識する
    • 敵キャラクターやオブジェクトを認識する
  • 記憶
    • 一般的には知識表現とも呼ばれる
  • 認識
    • 再びの認識であるが、ここではセンサーで取得し、記憶した情報を抽象的な形に変換する。
  • 意思決定
    • 認識の上で判断する
    • 意思決定のアルゴリズムは7つ存在する
    • ここではルールベースで IF THEN のように判断する方法が紹介
  • 行動生成
    • 意思決定に基づき行動が決まれば、その行動を生成する
    • 実際に攻撃する敵を判断する時にはさらに「ターゲティング問題」というものも出てくる。

2.5.6 基地推定

敵を発見した場合に、敵の基地を推定することがある。

ゲームによっては、展開をスピーディーにするために敵の基地も既知のものとする場合もあるが、そうではないものもある。

ここでは、敵に遭遇した事象から「ベイズ推定」を用いて推定する過程が説明されている。

2.5.7 決戦、ユニット間のコミュニケーション

敵の基地を攻撃するために、ユニット同士を協調させる。
正直、この手のゲームをしたことがないので、そこまでやるのかぁと感心した。

複数のキャラクターを協調させる技術を「マルチエージェント技術」と呼ぶらしい。 (1.1.1 のストラテジーゲームの分類でも出てきた)

手法としては二つあり、以下のようなもの。

  1. ユニットメンバー同士でメッセージを送り合い協調
    • エージェント用のコミュニケーションランゲージを用いる
  2. 上位の AI が各ユニットに指令を出すことで協調

アカデミックでは (1) が多いらしいが、ゲーム産業では複雑化を避けるために (2) を使うことが多いらしい。
いずれにしろ、コミュニケーションの流れを整理しないと情報の同期もできなくなるため、不具合が起きてしまう。

(2) の場合だと、チームAI にさらにそれを管理する何かがいる感じだろうか?または戦略AI がそれを担うのだろうか。と思ったらそれも書いてある。

「メタAI」「チームAI」の2つの手法がある。
おそらく「チームAI」はここまでで出てきた戦術AI・チームAI と同じものだと思う。敵・味方のどちらに属すか決まっていて、チームのキャラクターに指示を出す。想像と違ったのは、このチームAI は各チーム(ユニット)に対してのみ影響があるのではなく、複数のチーム(ユニット)に影響を及ぼせるということ。

「メタAI」は初めて出てきたが、ゲーム全体をコントロールするらしい。つまり、敵・味方は関係ない。
ここでは、天候やイベントのコントロールも含まれいるが、どの程度までゲームに影響を及ぼすのかは分からない。おそらく、ここの「決戦のためのユニット間コミュニケーション」に使うものというよりは、ゲームを盛り上げるための何かのような気がする。

面白い点として、キャラクターは「メタAI」「チームAI」から命令を受けるだけではなく、自分の周囲の情報を報告したり、行動の許可を申請したりもするらしい。

2.5.8 攻撃位置を決める、攻撃タイミングを同期させる

ここは計算式を使って判断(意思決定)させる例が出てくる。「ユーティリティ(効用)」という指標を使って、計算結果の妥当性を調整するようだ。

2.5.9 例題のまとめ

最後に、例題に沿って必要になった各人工知能技術が一覧されている。

まだ序章で説明されている内容が少ないとはいえ、多いな!という感想に尽きる。

ただ、ゲームエンジンを使う上でもこういう用語や分類、基礎知識があるだけで検索ワードやディレクトリの階層分けなどが捗りそうで、かなり良さそうに思う。