ゲーム AI の設計 (その 1) – 設計と実装

ゲーム

この数十年の間に、ゲーム業界は大きく進歩しました。一部の人の暇つぶしに過ぎなかった Pong* (ポン) や Pac-Man* (パックマン) のような単純なゲームに始まり、World of Warcraft * (ワールド オブ ウォークラフト) や Call of Duty 4* (コール オブ デューティ 4) のように、世界中に多くのプレイヤーを持つゲームが出現するまでになりました。

Entertainment Software Association (ESA) によれば、最近の典型的なゲーマーは、平均 13 年のゲーム歴があり、新しいゲームがより複雑で、没入感の高い、知的なゲームであることに慣れてしまっています。このため、開発者にとって、プレイヤーを感動させるゲームを作成するハードルはますます高くなっています。

コンピューター制御の人工知能 (AI) は、その時々の要求を満たすためにさまざまな形で発展してきました。しかし、プレイヤーの動きと成長に合わせることができる、適応性のある人工知能の開発は単純な作業ではありません。この記事は、重要な AI の概念と、最新のマルチコア・プロセッサー上で実行するために AI を最適化する方法を 4 回に分けて説明します。

この記事は、インテル® ソフトウェア・ネットワークに掲載されている「Designing Artificial Intelligence for Games (Part 1)」(http://software.intel.com/en-us/articles/designing-artificial-intelligence-for-games-part-1/) の日本語参考訳です。


設計と実装

ゲーム AI とは
最も基本的なレベルでは、「人工知能」はほかのプレイヤーの行動やエンティティー (ゲームで表現可能なすべての要素。オブジェクトと呼ぶこともあります) をエミュレートして実体化します。重要な概念は、行動がシミュレートされるということです。ゲーム AI は、より「人工」的であり、より「知能」が低いともいえます。ゲーム AI のシステムは、ルールベース・システムのように単純なものから、敵軍の指揮官としてプレイヤーに挑戦するように設計されたシステムのように複雑なものまでさまざまです。

ゲーム AI が従来の AI と異なる点
従来の AI の研究は、実際の知能を (人工的な手段で) 作成しようというものでした。マサチューセッツ工科大学 (MIT) の Kismet* のようなプロジェクトは、対話と学習が可能で、感情を表すことができる AI を開発しようとしています。この記事を執筆している時点で、MIT は、幼児と同等の知能を持つ AI の作成に取り組んでおり、その完成が見込まれています。

ゲーム目的で考えた場合、上記のような AI はアミューズメント・ソフトウェアの要件をはるかに超えています。ゲーム AI には、感覚や自己認識能力は必要ありません (こういった能力は逆にないほうが良いでしょう)。また、ゲームプレイの範囲外のことについて学習する必要もありません。ゲームにおける AI の目標は、知的な行動をシミュレートして、プレイヤーに (いずれ) 克服できると思える挑戦を提供することです。

ゲームにおける AI の目的
AI は、ゲームにおいてさまざまな役割を演じることができます。ゲーム世界でエンティティーの行動を管理するための、一般的なルールセットであるといえるでしょう。エンティティーが従う、あらかじめゲームのシナリオにあるイベントを一種の AI であると考えることもできます。

例えば、F.E.A.R* (フィアー) で、主人公の目の前に幻覚として現れ、将来の出来事を予見する少女は、あらかじめシナリオにあるイベントの 1 つです。AI とゲームについて考えた場合、多くの人が思い浮かべるのは、マルチプレイヤー・ゲームの (コンピューターによって操作される) 仮想プレイヤーでしょう。しかし、これは AI が提供する役割の 1 つにすぎません。


図 1: F.E.A.R. (Vivendi Universal*) の少女は一種の AI

ゲーム AI の基本的な要件

AI が果たす役割の性質によって、システムに求められる要件は異なります。システムが複雑であるほど、AI の要件も多くなります。最も基本的な要件は、AI の実行に必要な処理時間です。より複雑なシステムでは、AI の環境を知覚する手段、プレイヤーのアクションの記録、以前の決定の成否を評価する手段が必要です。

意思決定
AI の背後にある重要な概念は意思決定です。選択を実行するには、インテリジェント・システムが AI システムを使用してエンティティーに影響を与えることができなければなりません。この実行には、「AI プッシュ」または「エンティティー・プル」のいずれかの手法を用いることができます。

「AI プッシュ」システムは、AI システムをゲーム・アーキテクチャーの個別の要素として分離する傾向があります。この手法では、AI は、個別のスレッド (または複数のスレッド) で指定されたゲームオプションの中から最適な選択を計算して、選択するオプションを決定します。AI が決定を行うと、その決定がエンティティーに伝えられます。このアプローチは、AI が全体を見渡す、リアルタイム・ストラテジー・ゲームに最適です。

「エンティティー・プル」システムは、単純なエンティティーを含むゲームに最適な手法です。これらのゲームで、エンティティーは、エンティティーが「思考する」とき、またはエンティティー自身を更新するときに AI システムを呼び出します。このアプローチは、シューターのように、何度も考える必要のない大量のエンティティーを含むシステムに最適です。

このシステムは、マルチスレッド化によるメリットがある反面、余分な作業も必要になります (詳細は、Orion Granatir のマルチスレッド AI の記事「Two Brains Are Better Than One」(http://software.intel.com/en-us/articles/two-brains-are-better-than-one/) を参照してください)。

基本的な知覚
AI が意味のある決定を下すには、AI の環境を知覚する方法が必要になります。単純なシステムでは、プレイヤー・エンティティーの位置を確認することがこの知覚にあたります。システムが複雑になるとともに、エンティティーは、通り抜け可能なパス、支配地域、紛争地のような、ゲーム世界の主要な機能を識別する必要があります。

デザイナーと開発者の挑戦は、インテリジェント・システムにおける重要な機能を識別する方法を見つけ出すことです。例えば、支配地域は、レベルデザイナーがあらかじめ決定するか、マップをロードまたはコンパイルするときにあらかじめ計算することができます。紛争マップや差し迫った脅威のような一部の要素は瞬時に評価する必要があります。

ルールベース・システム

インテリジェント・システムにおける最も基本的な形式は、ルールベース・システムです。このシステムは、「人工知能」の技術を応用したものであり、 あらかじめ設定された行動のセットが、ゲームのエンティティーの行動を決定するために使用されます。さまざまなアクションは、実際の知能がわずかに含まれる、結果が明白ではない行動システムであると考えることができます。

ルールベース・システムの例として、ブラックジャックのディーラーを考えてみましょう。ディーラーは単純なルール (自分の手が 17 以上になるまでカードを引かなければならず、17 以上になったら追加のカードを引くことはできない) に従ってプレイします。初心者には、ディーラーがプレイヤーと競い合っているように見えるでしょう。ディーラーはルールに従ってプレイしているだけだと言われなければ、目の前にいるディーラーを実際以上に手強い存在だと感じるはずです。

このシステムの古典的なアプリケーションは Pac-Man (パックマン) です。4 匹のモンスターがプレイヤーに立ちはだかります。モンスターはそれぞれ、単純なルールに従って行動します。常に左に曲がる、常に右に曲がる、ランダムな方向に曲がる、そしてプレイヤーに向かってくる、とモンスターの移動パターンはそれぞれ決まっています。

個々のモンスターの行動は単純なので、モンスターが 1 匹の場合、プレイヤーはたやすく対応できるでしょう。これが 4 匹のグループになると、モンスターの移動パターンは、複雑に互いに協力しながらプレイヤーを追跡しているように見えます。しかし、実際は、プレイヤーの位置を確認しているのは最後のモンスターだけです。


図 2: Pac-Man (パックマン) のモンスターのルールセット (移動パターン)

この例で示したように、ルールをハードコードする必要はありません。エンティティーの知覚の状態 (最後のモンスター) や編集可能なパラメーターに基づいて行動を決定することができます。ルールベース・システムでも、攻撃力、勇敢さ、可視範囲、思考速度などの変数により、エンティティーの行動は多様になります。ルールベース・システムは最も単純な AI 構造です。

より複雑なインテリジェント・システムは、一連の条件付きルールに基づいて構築され、その行動が決定されます。タクティカル・ゲームでは、ルールに従って採用する戦術が決定されます。ストラテジー・ゲームでは、ルールによって建築順や紛争への対応方法が決定されます。ルールベース・システムは AI の基礎をなすものです。

AI としての有限状態機械

有限状態機械 (FSM) は、終始有限個の状態を持つエンティティーを概念化および実装する方法です。「状態」は、エンティティーの健康状態、またはエンティティーの感情状態を表わします。 この例における感情状態とは、真の AI の感情状態のようなものではなく、ゲームのコンテキストに合わせて取られるあらかじめ定義されている行動モデルにすぎません。

隠れた要素を持つゲーム AI の一般的な状態の例を次に示します。


図 3: 一般的な FSM の状態 (矢印はその状態から遷移可能な状態を表す)

  • Idle: この状態では、エンティティーは受身でぼんやり立っているか、設定されているパスに沿って移動します。知覚は低く、プレイヤーの音を確認することはほとんどありません。このエンティティーが攻撃されるか、その前にプレイヤーを直接「見た」場合にのみ、その状態が意識のより高いレベルに変更されます。
  • Aware: このエンティティーは、積極的に侵入者を捜します。Idle エンティティーよりも広い範囲でプレイヤーの音を確認します。このエンティティーは、開いたドア、倒れている人、空の薬莢のように、場違いの (確認すべき) ものに気づくと、Intrigued 状態になります。
  • Intrigued: このエンティティーは、何かがおかしいことに気付いています。エンティティーは、通常の任務や移動パスを放棄して、前述の開いたドアや倒れている人のような異常がある区域に移動します。プレイヤーを発見すると、エンティティーは Alert 状態になります。
  • Alert: この状態では、エンティティーはプレイヤーに気付いており、プレイヤーを追い詰める行為 (攻撃可能な範囲に移動する、仲間に知らせる、警報を鳴らす、隠れることができる場所を探す、など) に出ます。プレイヤーの攻撃可能な範囲に入ると、エンティティーは Aggressive 状態になります。
  • Aggressive: これは、エンティティーがプレイヤーと戦闘中である状態です。エンティティーは可能であればプレイヤーを攻撃し、(攻撃のクールダウンやリロードに基づいて) 攻撃の切れ目に隠れることができる場所を探します。エンティティーは、プレイヤーを殺害した場合 (Idle 状態に戻る)、プレイヤーがほかの場所に移動した場合 (Alert 状態に戻る)、またはエンティティーが死んだ場合 (Dead 状態になる) に、ほかの状態になります。また、エンティティーの体力が減ると、あらかじめ設定されている勇敢さに応じて、Fleeing 状態になります。
  • Fleeing: この状態では、エンティティーは戦闘から逃げようとします。ゲームによっては、回復薬を探す、プレイエリアから離れるといった行動をとる場合もあります。エンティティーが回復薬を見つけると、Alert 状態に戻り、戦闘を再開します。プレイエリアから「離れた」エンティティーは削除されます。
  • Dead: 一部のゲームでは、すんなりこの状態にならないこともあります。例えば、瀕死になると、エンティティーは「絶叫」したり、近くのエンティティーに何か伝えたり、ノックアウト状態 (治療を受けた後、Alert 状態に戻る) になったりします。

エンティティー・システムに FSM を実装する簡単な方法は少なくとも 2 つあります。1 つは、各状態を (大規模なスイッチ文を使用して) 確認可能な変数にする方法です。もう 1 つの方法は、関数ポインター (C 言語の場合) や仮想関数 (C++ やほかのオブジェクト指向言語の場合) を使用する方法です。

適応型 AI

前のセクションでは、あらかじめ定義されたゲームのイベントに合わせてインテリジェント・システムを設計する方法について説明しました。ほとんどのゲームにおいては、設計に手抜かりがなく、エンティティーの目的が明確であれば、この方法で問題ありません。ただし、プレイヤーに応じて、より多彩で賢い敵を登場させるには、AI が成長してさまざまな状況に適応できるようにする必要があります。

適応型 AI は、機構が複雑でゲームプレイのオプションが無数にある、格闘ゲームやストラテジー・ゲームで使用されます。コンピューターに勝つため戦略を選択するプレイヤーがいない場合でも、プレイヤーに一定の挑戦を提供するには、AI は学習して適応力を高める必要があります。

予測
相手の次の動きを予測する能力は、適応型システムにおいて重要な要素です。次の動きの予測には、過去のパターン認識 (今後の記事で説明) やランダム推測のような、いくつかの手法があります。

適応型の基本的な手法は、過去の決定を追跡して、成功を評価することです。AI システムは、プレイヤーが過去に行った選択を記録しています。過去の決定は、一定の方法で評価されます。(例えば、格闘ゲームでは、健康状態や時間の点で有利になったかどうかで成功したかどうかを判断します)。相対的な健康状態、前のアクション、位置 (壁を背にしていたかどうかなど) のような状況に関する追加情報を集めることで、決定をより詳細に評価できます。

これらの情報により、前のアクションが (成功したかどうかが) 評価され、戦術を変更する必要があるかどうかが判断されます。過去のアクションリストが構築されるまで、エンティティーのアクションの指標として、一般的な戦術やランダムなアクションが使用されます。このシステムは、ルールベース・システムや異なる状態と結びつけることができます。

タクティカル・ゲームでは、過去の情報に基づいて、防御、攻撃、狂暴、あるいはバランスのとれたプレイヤーのチームに対して使用する最良の戦術が決定されます。ストラテジー・ゲームでは、プレイヤー単位で、ユニットの最適な構成が決定されます。AI がプレイヤーをサポートするキャラクターを制御しているゲームでは、適応型 AI はプレイヤーの行動を学習することにより、プレイヤーの行動をより自然に補うことができます。

まとめ

AI の分野では、複雑な研究が行われています。ゲーム AI は、設計されたゲームの要求に応じて、コンピューター制御のエンティティー向けの単純なルールセットから、より高度な適応型システムまで、その形式はさまざまです。ゲームに AI の概念を取り入れることは、電子世界に作成された仮想キャラクターの現実性を高めるには必要な方法であり、不可能な挑戦ではありません。次の記事では、複雑な環境を知覚してナビゲートする際に AI が直面する問題と、その問題に取り組む方法について説明します。

著者紹介

Donald “DJ” Kehoe: ニュージャージー工科大学の IT プログラムのインストラクターとして、ゲーム開発を分業化し、多くのプログラムのコース (ゲーム・アーキテクチャー、プログラミング、レベルデザイン) や、ゲームと 3D グラフィックスを統合したコースを教えています。現在は、ゲームと仮想世界を利用して神経と筋肉のリハビリテーションの効果を高める研究で、生物工学の博士号取得を目指しています。

インテル® ソフトウェア製品のパフォーマンス/最適化に関する詳細は、最適化に関する注意事項 (英語) を参照してください。

タイトルとURLをコピーしました