この記事は、インテル® ソフトウェア・ネットワークに掲載されている「Designing Artificial Intelligence for Games (Part 3)」(http://software.intel.com/en-us/articles/designing-artificial-intelligence-for-games-part-3/) の日本語参考訳です。
戦術 AI と戦略 AI
前回の記事では、インテリジェント・エージェント (IA) の知覚能力と移動方法について説明しました。この記事では、エージェントにより高い知能を与える方法を説明します。
エージェントはすでに認識した状況に直ちに対応できるようになっています。ここでは、より広いゴール、よりさまざまな状況に対処するいくつかの人工知能 (AI) を紹介します。
戦術 AI
戦術 AI の役割は、ゲームにおける IA のグループを調整することです。この種の AI の実装は、多くのスタイルのゲームで重要です。戦術的なファーストパーソン・シューター (FPS、シューティングゲーム) のチームやリアルタイム・ストラテジー・ゲームのユニットのグループはすべて、戦術 AI を使用します。グループは、個々のユニットを互いに支援し、情報を共有する単一のユニットとして扱うことができる効果的な手法です。
戦術 AI の概念は、グループ・ダイナミックス (集団力学) に基づいており、ゲームでは異なるエンティティーのグループを追跡します。各グループは、個々のエンティティーとは別に更新する必要があります。この処理は、異なるグループ、ゴール、構成を追跡する専用の更新モジュールによって制御することができます。この手法ではエンジンごとに個別のシステムを開発する必要があるため、グループキャプテン手法を使用することを推奨します。
グループ内の 1 つのユニットに、グループキャプテンの役割を割り当てます。グループのほかのメンバーはすべて、このキャプテンとのリンクを維持し、グループキャプテンの指示を確認して行動します。グループキャプテンは、グループ全体の戦術 AI の計算を一手に引き受けます。
グループ移動: パス検索
エンティティーの移動の実装は、グループ・ダイナミックスを取り入れることで改善できます。IA が 1 つのユニットとして機能すれば、移動をより効率良く行うことができます。
あらかじめ計算されたパスマップやマルチスレッド AI を使用して高速化されたとしても、パス検索は時間のかかるプロセスであることに変わりはありません。パス検索システムにおける負荷は、グループ・ダイナミックスによって大幅に減らすことができます。
プレイヤーまたは AI の命令によりユニットのグループに移動先を指示すると、ゴールに最も近いユニットがグループキャプテンとして設定され、グループのほかのメンバーはすべてキャプテンに従うように設定されます。グループキャプテンが更新されると、パスシステムを照会します。パスが見つかると、グループキャプテンはゴールに向かって移動します。グループのほかのメンバーはすべて、グループキャプテンに追従します。
グループ移動: フォーメーション
1 つのユニットとして移動するグループでは、パス検索の負荷が減るようにグループを管理します。グループは、フォーメーションを組んで移動します。フォーメーションを組んだ場合、グループはファランクス (古代の密集陣形) やトライアングル (Codemasters の Overlord* のミニオン、図 1) のようなパターンで移動します。
© 2009 Codemasters*
図 1. Overlord のミニオン (赤いキャラクター) はチームで行動し、プレイヤー (鎧を着たキャラクター) のコマンドに従って移動する
フォーメーションは容易にセットアップすることができ、グループキャプテンの概念をさらに広げます。フォーメーションでは、すべてのユニットに特定の役割が与えられます。フォーメーションを組むとき、特定のユニットにグループキャプテンの役割が割り当てられるように、グループの各メンバーにはフォーメーションにおける位置が割り当てられます。グループのすべてのユニットのゴールは、そのユニットの位置 (フォーメーションのほかのメンバーからの相対的な距離) を維持することです。
例として、Overlord のミニオンを見てみましょう。彼らはピラミッド・フォーメーションで移動します。図 2 で、パスに従う必要があるのはグループキャプテン “C” のみです。ユニット 1 はターゲットユニット “C” の左後方に位置し、ユニット 2 はユニット 1 の右に位置します。ユニット 3 は (対象がキャプテンではなくユニット 1 であることを除いて) ユニット 1 と全く同じように行動します。グループのすべてのユニットは、このパターンに従います。
図 2. トライアングル移動フォーメーションのセットアップ
グループ戦闘
単にフォーメーションを組んで進むことよりもグループで戦闘することに多くの意味があります。チームとして協力や戦闘を行うこともあります。キャプテンは、チームの指揮と調整を行うと仮定します。キャプテンであるユニットの生死は、部隊指揮官の責任です。
グループ戦闘の実装は、以前の記事で説明したルールベース・システムや有限状態機械 (FSM) のようなシステムで管理することができます。典型的なグループ行動のいくつかの例を示します (図 3 を参照)。
- 治療支援: 治療支援ユニット (医者や聖職者) は、グループのユニットの健康状態を常に把握している必要があります。具体的な行動は、グループキャプテンが指示します。例えば、攻撃を受けるユニットの近くに待機するように医者に命令します。
- 偵察活動: Enemy Territory: Quake Wars* (エネミーテリトリー: クエイクウォーズ) のようなゲームには、チームの残りのメンバーを支援するユニットがあります。スパイクラスは、レーダーを使用して敵ユニットの移動情報を提供することができます。あるユニットによって報告された敵の情報は、チーム全体のグループレーダーに追加されます。レーダーが作動しない地域に接近するとき、その地域に敵の位置を偵察する斥候を送り出すことも可能です。この任務は、変装が得意なスパイクラスにとっては容易です。
- 援護射撃: 防御が堅い地域では、支援ユニットが援護射撃を行い、敵の防御ユニットに対して (防御を崩すのに十分であると思われる) 集中攻撃を行います。
- 犠牲: 激しい戦闘でユニットの被害が避けられない場合、グループの一部のユニットを犠牲にしなければならないことがあります。ミッション・クリティカルな (任務に欠かせない) グループのユニット (例えば、エンジニア) は、そのユニットをターゲットとする敵ユニットに優先度を設定して、別のユニットが犠牲になる (射線上に移動する) ことで、保護する必要があります。
図 3. Enemy Territory Quake Wars (id Software* および Splash Damage, Ltd*) にはグループ・ダイナミックスでプレイするため、別の役割を持つ 5 つのクラスがある
グループを支援する別のレベルの分析として、グループの各メンバーの能力の自動分析があります。グループが有利な場合や、グループが退却すべき場合に、グループの最も効果的な状況をキャプテンが知っていることは重要です。
例えば、Starcraft* (スタークラフト) (Blizzard Entertainment*) のようなストラテジー・ゲームには、飛行ユニットと地上ユニットがあり、地上ユニットは飛行ユニットを攻撃できません。このような能力や状況を知っておくことはすべてのグループにとって重要です。例えば、飛行ユニットを攻撃可能なユニットがいないグループが飛行ユニットに遭遇した場合、逃げるのがベストでしょう。また、飛行ユニットを攻撃可能なユニットが少ない場合でも、それらを治療または修理できる支援ユニットがいれば、その場所で戦うことがベストかもしれません。
エンティティーの多様な能力とそれらの能力を持つユニットの数は、状況の異なるグループ戦闘で有利性を決めるときに使用できます。能力を考慮するグループのほうが、能力を考慮しないグループよりも有利になります。
戦略 AI
これまで、エンティティーおよびエンティティーのグループが困難な状況で自身を制御する方法について説明しました。次に、全体を見渡す AI について説明します。戦略 AI は、軍隊全体を指揮して、そのゲームに含まれるさまざまな戦略を扱う、高レベルの AI です。
戦略 AI は、リアルタイム・ストラテジー (RTS) ゲームでは一般的なものですが、その戦略はより高度になり、戦術的な FPS ゲームでも利用されるようになっています。プレイヤーが操作する司令官は、独自のシステムや空のエンティティー (ゲーム世界における位置やグラフィックはないが、更新され思考するエンティティー) としてセットアップすることができます。
司令官は、資源の収集、兵器の開発状況の確認、部隊の構成など要素を管理する階層的なルールや FSM に従って操作を行います。ほとんどの場合、このゲーム要素の基本的な操作にはあまり知能を必要としません。知能が必要になるのは、ほかのプレイヤーと対話する場合です。
この対話 (または戦争) が、戦略 AI の要です。司令官は、ゲームマップを調査して、プレイヤーの位置を確認し、難所や防御物のような重要な地点を識別して、ほかのプレイヤーの防御力を分析する必要があります。判断がどのように行われるかは明白ではありませんが、意思決定マップを使用すると容易になるはずです。
意思決定マップ
意思決定マップは、ゲームマップに似た 2 次元配列です。配列の各セルはゲームの地域に相当し、地域に関する重要な情報を保持しています。これらのマップは、戦略 AI がゲーム全体で意味のある決定を下すのを支援するために使用されます。
資源マップ
資源マップには、そのゲームで資源がある場所に関する情報が含まれます。マップ上の資源が多い場所を知ることは、司令官の決定に影響を与えます。自軍を展開すべき場所や衛星基地にすべき場所 (司令官の基地の近くにある資源)、敵が展開すると思われる場所 (敵の基地の近くにある資源)、奪い合いになると思われる場所 (中間にある資源) が想定できます。
潜在的な利用可能資源の量の計算も、支援するユニットや軍の展開方法に影響を与えるでしょう。資源があまりない場合、補充が難しくなるため、各ユニットをより注意深く使用する必要があります。資源が豊富にある場合、安価なユニットを大量に投入したり、強力なユニットを編成するといった戦略が考えられます。
作戦目標マップ
これらのマップには、例えば、敵の基地の位置、そのマップの目標 (何かを倒す、何かを守る、何かを盗むなど)、司令官の軍隊の鍵となるユニット (メイン基地、ヒーローユニットなど) のような、司令官の目標に関する情報が含まれています。この情報をもとに、司令官は軍隊を動かします。
例えば、防御する必要のある地点は防御用の構造物で囲み、ユニットの軍隊をこれらの地点の近くに常に待機させます。また攻撃目標を探り出し、敵の防御を確認します。目標のまわりの防御を分析して、それらの防御を突破する最適な方法を考える必要があります。このために考えられたのが、ストラテジー・ゲームの重要な要素である紛争マップです。
紛争マップ
紛争マップ (図 4 を参照) は、これまでのマップよりも頻繁に使用され更新されます。紛争マップには、戦闘状況がより詳細に表示されます。司令官のユニットの 1 つが敵と戦う場合は常に、そのユニットは以下のような紛争マップの情報を更新します。
- 紛争の種類: ユニット、建造物、または両方
- ユニットの能力: 攻撃可能な対象 (地上、空中、または両方)
- 数: 遭遇した敵の数
- 強さ: このエリアで受ける可能性のあるダメージ
このマップの情報を分析して、次の決定を下します。
- 敵の攻撃を受けた場合、AI は、配備している防御ユニットが有効かどうか、防御ユニットを交戦させるか無視するか、防御対象の近くで戦闘が発生するかどうかを判断します。その判断を基に、AI は防御ユニットのレイアウトや構成を変更します。
- 敵を攻撃する場合、偵察を行うことで、敵の防御の弱点を素早く識別することができます。戦闘を避けることができるか、最小限に抑えることができる目標までのパスがある場合、最適な戦略を使用して軍隊を展開できます。
- 敵の戦力に応じて、適切な対応策を指示します。ほとんどのストラテジー・ゲームでは、ユニット間のバランスを保つために、コンピューターは異なる複数の地点で防御を突破するために必要なユニットの数と種類を決定することができます。
図 4. ある地域の紛争マップ (赤が濃いほど戦闘が激しい)
マップの作成と更新
前述のとおり、これらのマップは司令官の軍隊のユニットによって作成されます。AI ができるだけ早く偵察を出して調査を行い、マップの作成を開始することをルールの一部にすると良いでしょう。優れた AI は、これらのマップが最新であることを定期的に確認します。ゲームの初期に、少数のユニットがこれらのマップを使用している場合、マップの更新はゲームエンジンにとって問題ではありません。ただし、ゲームが進行して、大量のユニットが同時に情報を提供した場合、パフォーマンスに影響を与える可能性があります。
意思決定マップが素早く処理されることを保証するのはそれほど困難ではありません。意思決定マップシステムに独自の処理スレッドを割り当てれば良いのです。可能であれば、AI が操作しているそれぞれのプレイヤーに独自の処理スレッドを割り当てて、独自の意思決定マップのセットを処理するようにすると良いでしょう。すべてのエンティティーが複数のスレッドに分割されている場合、大幅なパフォーマンスの向上が期待できます。意思決定マップのスレッドは、対応するエンティティーの更新メッセージからのリクエストを処理するだけ済むからです。
まとめ
インテリジェント・システムにおける最も基本的な形式は、ルールベース・システムです。このシステムは、「人工知能」の技術を応用したもので、実際の知能がわずかに含まれます。あらかじめ設定された行動のセットが、ゲームのエンティティーの行動を決定するために使用されます。さまざまなアクションは、結果が明白ではない行動システムであると考えることができます。
ゲーム世界の AI は日々進歩しています。状況を確認して移動するという基本的な能力に加えて、より意味のある決定や行動を行うための能力が備えられています。最近の AI は、置かれている状況に単に反応する代わりに、ゲームにおいて率先した役割を果たすことができるようになっています。プレイヤーを感動させ、ゲームの続編を待望させるような魅力的な AI の作成に挑戦してみてください。現在の AI ならばそれが可能です。
シリーズの締めくくりとして、次の記事では、人工知能をマルチスレッド化することに注目してみたいと思います。AI を実行するためのアルゴリズムが効率的で優れていても、それを適用するエンティティーが多くなればなるほど、そのアルゴリズムは複雑になります。増加する要求に対応するには、マルチコア・プロセッサーを活用する必要があります。次の記事では、コードのマルチスレッド化はそれほど難しくないことを説明します。
関連記事
- その 1: 設計と実装
- その 2: 知覚とパス検索
- その 3: 戦術 AI と戦略 AI
- その 4: AI のスレッド化
著者紹介
Donald “DJ” Kehoe: ニュージャージー工科大学の IT プログラムのインストラクターとして、ゲーム開発を分業化し、多くのプログラムのコース (ゲーム・アーキテクチャー、プログラミング、レベルデザイン) や、ゲームと 3D グラフィックスを統合したコースを教えています。現在は、ゲームと仮想世界を利用して神経と筋肉のリハビリテーションの効果を高める研究で、生物工学の博士号取得を目指しています。
インテル® ソフトウェア製品のパフォーマンス/最適化に関する詳細は、最適化に関する注意事項 (英語) を参照してください。