「戦略ゲームAI解体新書」読書会ログ 4 章 前半

今週も読書会ログ。4章は結構長いので時間切れにつき分割。

第4章 指揮官としての人工知能

チーム全体を動かす場合に、ストラテジーゲームには2つのパターンがあるらしい。

  1. プレイヤーが指揮官となって各メンバーや小隊に命令を与える

この場合、人工知能は、指揮官の部下の各メンバーや小隊の頭脳として作る。

必要とされる構造は以下のような上下構造。

  • 上から下に向けての命令系統
  • 下から上に向けてのレポート報告

2. 各メンバーが自由にコミュニケーションをとって連携する

これはマルチエージェント技術に属する。

多くの場合、1 が採用されるようだ。

4.1 チーム・空間・時間の階層化

上から下へ命令をくだすストラテジーゲームに必要な階層の話。

  • チームの階層化
  • 空間の階層化
  • 時間の階層化

ストラテジーゲームにおいては、時間・空間の階層構造を、チームの階層構造で制御することになるが、その連携はそれぞれを同期させることで解決するらしい。

チームの階層化というのは、分かりやすく「指揮官 -> 中間のリーダー -> 末端のキャラクター」のような縦構造。

時間・空間の階層化というのは以下のように説明されている。

  • 指揮官が思い描く作戦と、それを世界に接地して具現化するキャラクターの関係
  • 指揮官の長期・大局のプランと、キャラクターの短期・局所的な行動の関係
  • 指揮官・キャラクターの中間に位置し、中期・一定領域の指揮をするリーダーの関係

4.2 チームの階層化

チームの階層化の基本は指揮官を頂点としたヒエラルキーであり、組織の階層図であるらしい。

その関係性を人工知能が理解するには、グラフ構造にする必要があり、階層グラフともいう。

アサイ

関係性を理解した人工知能は、各エージェントに役割を与えるが、それを role assingment と呼ぶよう。
このアサインはゲームの最初に静的に決まる場合もあれば、ゲームの進行状況に応じて動的に行われることもある。

よって、指揮官としての人工知能はこの role assignment 機能が必要になる。
また、複数のエージェントを連携して行動させる技術をマルチエージェント技術と呼ぶらしい。

時間・空間を階層化した意思決定

組織が大きくなると、階層ごとのエージェントが把握する時間・空間が異なってくる。

これが前述の、「指揮官は長期・大局」「リーダーは中期・一定領域」「キャラクターは短期・局所的」の階層化につながり、それに応じた意思決定が必要になるらしい。

4.3 空間の階層化

ストラテジーゲームで人工知能が空間全域を把握するのに、空間の階層化が必要という話。
大局のスケールから、小さく分割していき、マルチスケールで空間を認識する。
空間の階層化はナビゲーションAI の役割でもある。

4.3.1 空間階層化の具体例

ビヘイビアツリー

キャラクターの動作を定義するために最もよく使われる手法の一つでツリー状にノードを展開したグラフの形式をもつもの。
Unreal Engine で初めてその用語を聞いたので、てっきり UE の言葉かと思っていたが、一般的にゲームで使われる用語のようだった。

KILLZONE 2, Halo の例

Halo の場合は、上の階層から「ゾーン」「エリア(前衛・中衛・後衛)」「スタンディングポイント(移動用)」と分割。
KILLZONE2 の場合は下の階層から「ウェイポイント(移動用)」「ノード(ウェイポイントを正方形に集団化)」「グローバルマップ(ノードをさらに階層化)」と抽象化していく。

手法は異なっているが、全体的に階層化されているという点で似ている。

4.3.2 占有度マップ

近年のFPSはマップが広大になったため、ストラテジーゲームの技術も使われるらしい。KILLZONE2 では「影響マップ」を使って戦局における勢力バラウンスを検出し、戦略を立てている。 「指揮官AI (総指揮官)」「スカッドAI (部隊長)」「インディビジュアルAI (各兵士)」の3つの階層に分離し、階層間で情報網を持ちつつ、下から上へは状況を報告し、上から下へは情報から得た戦局に応じて戦略を指示する。

ここでは上位で「階層型タスクネットワーク」という意思決定手法を利用するらしい。(これは後で出てくる)

指揮官AIが戦局全体を把握する方法

  • (KILLZONE2でいう) ノードとして分割された領域を「1戦術ノード」とする。
  • 戦術ノード間を連結したグラフを「戦術グラフ」と呼ぶ。
  • 戦術グラフを連結したものを「戦略ノード」とみなす。
  • 戦略ノードを連結したグラフを「戦略グラフ」と呼ぶ。

上記を踏まえて、「影響マップ」が使用されるらしい。
「占有度(Occupancy)」という”そのノードをどちらが支配しているか” という考え方を使った影響マップの作る場合が多い。

占有度の計算は、ノード単位で計算する。計算方法には以下がある。

  • バイナリ占有度マップ -> 占有度を 1, 0 で表す
  • 確率的占有度マップ -> 味方のいる位置を 1, 周りを 0.8, その周りを 0.6 のように距離に応じて影響度を変更するもの

占有度を使って影響マップを作ると、勢力の分布が把握できるので、勢力の薄いところに兵を向かわせたり、占有度をコストとしてノード状のパス検索を行う「戦略的パス(strategic path)」を使うことができる。

4.4 時間の階層化

「時間の階層化」とは、人間で言えば、時間ごとの「するべきこと」、人工知能では「タスク」。(人間もタスクかも)
大きなタスクを小さくタスクに分割していくことで計画をしていく。

4.4.1 階層型タスクネットワーク

タスクそれ自体に知的機能を持たせることによって、階層的に命令を自動的に作り出していく手法として説明されている。
タスクの定義として、ドメイン、メソッド、プリコンディションの 3 つがあり、それぞれが「情報」「タスクの分解方法」「前提条件」と言い換えられる。

メソッド

タスクが「コンポジット・タスク」と「プリミティブ・タスク」に分類され、コンポジット・タスクをサブタスクに分解し、(最小単位である)プリミティブ・タスクにしていく手法をメソッドと呼ぶ。

階層型タスクネットワーク

分解されたタスクは「順序構造を持つ」 or 「並列に実行可能」という状態になる。それらはネットワーク化することができ、それをタスクネットワークと呼ぶ。

階層型という場合には、単に分解されたタスクの実行ツリーというだけではなく、それをここまでの「長期・大局」、「中期・一定領域」、「短期・局所的」なところに合わせて考える。

また、タスクの分解方法である「メソッド」は必ず一通りに決まるわけではなく、条件をつけて、異なる分解の仕方を定義できる。

よって、状況によって、様々な分解が発生するため、その組み合わせであるタスクネットワークも様々に生成されうるところが面白いところ。

UEの Behavior Tree も、条件を様々付けることができるが、階層型と考えた時には、単に一つの Behavior Tree というだけではなく、それらも組み合わせた大きなネットワーク(or ツリー or グラフ)を想像する必要がありそう。

4.4.2 応用例 / 4.4.3 輸送例

ここでは指揮官、部隊、敵がある状態での実例が説明されています。

輸送例に関しては、移動と敵基地攻略を含めたタスクネットワークがどのように構築されるかが示されていてとても面白いです。

今回はここまで、次回は 4.5 から。