ゲームAIとは、電子ゲームにおいて利用されるAI(人工知能)を指す言葉である。
概要
しかし実質的には、プレイヤーがゲームをプレイする上で用意された仕掛けの動作をより巧妙にし、それによってプレイアビリティを向上させる事を目的とした一連のテクニックである。
書籍『実例で学ぶゲームAIプログラミング』(以下『GAI』)の前書きには「私達のゴールは知能を持っているような幻想を与えるエージェントを設計することであり、それ以上ではないのです」と書かれている。要するに、同書籍が発売された2007年時点では「知能」と言えるほどの高度なプログラムを作成し、それをゲームに搭載することは技術的にもコスト的にも非現実なことであった。2016年現在でもその現状は変化していない。
このように、通例ゲームにおけるAIとはそれが恰も人間が操作しているかのように見せ掛けるにはどのような動きをさせるのが良いかという観点から設計されている。つまりゲームAIという時、それがAIとしての条件を満たし ているかどうかよりも、プレイヤーがゲームをプレイしていてその対象に知能あるいは知性を感じるかどうか、という点に主眼が置かれている。
また、『カルネージハート』『アーマード・コア フォーミュラフロント』など、ゲーム内においてプレイヤーが自らパターンをブロック図などで組んで指定し、それに従った行動を取らせる事の出来る機能を備えているゲームもある。それを用いて組まれたAIをゲームAIと呼ぶこともある。
アクションゲームにおけるAI
最もポピュラーかつ古典的な電子ゲームの一つ『マリオブラザーズ』に登場するクリボーやノコノコといった敵キャラクターは、画面右から登場し一定速度で左に向かってひたすら直進を続け、壁に突き当たった場合は反対方向に向かって同様に直進するという動作が組込まれている。
こういったごく基本的な動作しかとらない対象はAIと呼ぶことは出来ない。無論こういった動作であってもその移動速度や出現タイミングには細心の注意を払って設計しなければならないという点では、製作者の意図が少なからず込められてはいるが、そのキャラクターを一つの個体として捉えた時そこに知能と謂うべきものを一切見出すことが出来ないからである。
ゲームAIのように擬似的なものであっても、最低限プレイヤーの動作に従って行動パターンが分岐するようなものでなければならない。
『ゼルダの伝説 神々のトライフォース』に登場する敵キャラクターに「兵士」がいる。この敵は一定範囲をただ往来するという単純な動作しか取らず、こちらから接近したり攻撃を行っても一切行動が変化しない。一方その上級キャラクターである「剣兵士」はプレイヤーが目立った動作を取るとそれに反応し、こちらに向かって突撃してくる。
この「プレイヤーの行動に反応して動作が変化する」かどうかという点にAIかそうではないかの一つの境目があると言える。あるパターンの動作を繰り返し行うだけでは知能とは呼べず、キャラクターの形をとった舞台装置の一種でしかない。
ロールプレイングゲームにおけるAI
敵キャラクターのAI
ターンベースで戦闘が行われるRPGでは、敵キャラクターの行動パターンをどのように設計するかという問題がある。
最も単純なパターンは毎ターン只管同じ行動を繰り返すというものだがここまで単純なパターンが実装される事は稀で、多くの敵キャラクターには攻撃・防御・ 魔法・特殊攻撃・逃走など幾つかのコマンドが用意されており、それらの内からランダムで一つの行動を取る事が多い。またそれらを一定周期で繰り返すといっ たパターンが組まれる事も屢である(攻撃→魔法→防御→特殊攻撃→以下ループ、等)。こういった極めて単純なパターンであっても調整次第で知能的な行動をとっている様に見せる事がある程度可能だが、より人間的な振舞いを取らせるにはより複雑なパターンを追加していく必要がある。
またRPGにおいてこういった極度に単純化された行動パターンは攻略不能性やフラストレーションの元になる。ターンベース型戦闘のRPGではアクション系統のゲームと異なり、相手の攻撃を自力で回避する事が不可能な仕様が採用されていることが大半であるからだ。よってそこに攻略性を持たせるには敵の行動をある程度「知的」なものにしなければならない。
その最たる例としてはパラメータの変動に伴う行動パターンの変化である。蓄積ダメージが一定の割合を超えたときにある行動ルーチンから別の行動ルーチンに 移行したりというのが典型的なもので、これはRPGのみならず戦闘行為が行われるゲームの多くが採用しているギミックである。ただこうした行動は知能的というよりもゲーム性を盛り上げる為に敵キャラクターの足掻きのようなものを醸し出す演出として受け取られる事が多く、ゲームAIの技法とは言い難い側面が強い。
敵の行動をより知的に見せる手法としては特定キャラクターへの集中砲火といったパターンが考えられる。これはプレイヤーがゲーム攻略の際に用いる戦術をそのまま模したような形になっており、回復・補助系の魔法を得意とするキャラクターから先に倒すことで戦闘を有利に展開させるといった事はどのRPGでもよく見受けられる攻略法である。つまりプレイヤーが敵に対してとる行動を敵側に真似させる事で、敵の行動に戦術性を有利に持たせることは出来る。
しかしこういった行動をとる場合、プレイヤー側の情報を敵AIが「知る」過程を作らなけらばいなければプレイヤーに不自然な印象を与えてしまう。仮に、単純に「魔法が使えるキャラクターを集中的に攻撃してくる」といった行動パターンを組む場合は魔法が使用できるキャラクターとそうではないキャラクターをフラグ分けして前者に集中して攻撃を行う、といった行動を取らせれば事足りる。しかし毎回こうした行動を繰返し行うだけでは、「敵キャラクターは知的に判断しているというより、何らかの内部変数を元に機械的に狙う相手を選ぶという行動を行っているだけ」という事にプレイヤー側が勘付くのは容易である。
「この敵キャラクターは、戦闘中に得た知識を元に行動を変化させた」という印象をプレイヤーに与えるには、魔法を使用してきたキャラクターに対して攻撃を集中する、といったパターンを組む必要がある。この場合「その敵キャラクターに対して魔法を使わなければ集中攻撃をされないので、魔法を使わずに倒す」という一つの攻略法が出来上がる。
キャラクターにある行動を取らせようとした時、それを即座に実現させるようなプログラムがゲームAIとして優秀とは限らない、という事である。プレイヤーに対し如何に攻略性をそこに担保してやれるかがカギとなる。
味方キャラクターのAI
日本で最も有名なコンピュータRPGシリーズのひとつ『ドラゴンクエスト』シリーズには、4作目「ドラゴンクエストIV」「さくせん」コマンドが存在し、これを選ぶことでキャラクターに指令を下す事が出来る。
5作目「ドラゴンクエストV」から登場したさくせんである「めいれいさせろ」では全キャラクターをプレイヤーが操作できる。これに対して、「みんながんばれ」・「ガンガンいこうぜ」・「じゅもんせつやく」など「めいれいさせろ」以外のコマンドでは主人公以外のキャラクターが操作不能になり。作戦名にあるような行動を自動で行う。
「さくせん」システムが初登場した「ドラゴンクエストIV」の発売当時は、この「さくせん」システム、すなわち「AI戦闘」を大きな売りとしていた。AIという言葉がまださほど一般的ではなかった時代であり、「当時のこのゲームで初めてAIという言葉を知った」という人は少なくなかったようである。
このドラゴンクエストIVでは既に「学習型」AIを採用しており、「敵にどういった戦法が有用なのかをAIが学習して次の戦闘に活かす」という機能までも実現されていた。だがあくまで「次の戦闘から」というだけであるため、最初の戦闘中は、効かない攻撃であろうと何度も繰り返してしまう仕様となっていた。
そのため「即死効果無効属性を持つボスキャラに対してまで、即死魔法を唱え続ける」といった、プレイヤーから見れば間の抜けた行動をとってしまう光景も生まれてしまい、シリーズファンの語り種となった。(「クリフト」の記事を参照。)
シミュレーションゲームにおけるAI
シミュレーション、とりわけストラテジー/タクティカルゲームにおいてAIは必要不可欠なものにして、その出来がゲームの面白味に直結する度合においては他のゲームに優るとも劣らない。
シミュレーション系ソフトにおいてAIの挙動が最も問われるのはやはり敵ユニットの行動パターンである。
とは言え、大半の作品では戦力の上でプレイヤー側に対して敵側が圧倒的に優っており、各ユニットのパラメータも桁違いの差が付いているような事も珍しくない。戦力に非対称性を付ける事でAIの思考力の低さを補う形となっており、またそういった状況ではプレイヤー側が如何に不利な形勢から勝利を掴むかという腕前が問われるため、囲碁や将棋の様に人間と対等の条件下での勝負に耐えるような高度なAIを組まずともプレイし甲斐が保証されるという訳である。
そのため多くの作品ではAI側がプレイヤー側がしばしば用いる基本的な戦術(特定ユニットを囮にする、交戦回数を稼ぐことで消耗を促す等)であっても敢えてそれらを活用してくるようなプログラムは組まれていない。有態に言えばAIがプレイヤー側を「攻略」してくるような思考パターンを実装している作品は極めて稀である。
通例、シミュレーションRPGでは各ステージがグリッドまたはヘックスで構成されており、そこに予め配置された敵がプレイヤー側のユニットに対して接近し 攻撃を仕掛けてくる。各ユニットは固有の移動力を持ちそれに従って移動するが、最も基本的なパターンはプレイヤー側のユニット目掛けて全力で接近→射程に入り次第攻撃、というものである。基本的にはこれで完成だがマップ構成に障害物が含まれていたり、マスの種類によって消費する移動力が異なる場合幾つかの工夫を必要とする。
その程度の単純な思考パターンしか持たせない代わりに、敵がプレイヤー側を「攻略」してきていると感じさせる要素が、特定のステージでシチュエーションとして用意されていることもある。特にストーリー展開の上でプレイヤー側が敵軍から包囲されたり、追撃されるといった戦況に立たされる事は定番で、それに合わせてAIの挙動も若干のアレンジが施されているケースが多い。無論こうした状況をAI自らが練っている訳ではなく純粋な舞台装置である。
本記事では以下の節より、『GAI』内の記載に準じた記述が多くなる。2007年の著作であるためいささか古い内容も多いが、時代を超えて参考となる部分もあるかもしれない。
イベント駆動
『GAI』には「よく設計されたゲームはイベント駆動型になる傾向があります」と書かれている。
イベントとは通常出来事や行事、催し物を指す言葉でカタカナ語として広く使われている。またゲームにおけるイベントとは、プレイヤーの観点からはゲームを大きく変化させる出来事(物語の急展開など)や、その他何か特別な出来事(話すとアイテムが 貰える人物との会話など)を表す言葉として了解されているため、イベントと聞いた時多くのプレイヤーが思い浮かべるのはそちらだと予想される。
だがプログラミングにおけるイベントとは「キーボードを押した」、「時計がある時刻になった」などのプログラムの流れとは別に発生する事象(アクション)を受けて付帯情報(キー種別やボタン種別などのデータ)とともに発信された信号をいう。
イベント駆動とはそれらのイベントを切っ掛けに他のプログラムコードが動かされたりするようなプログラミングをすることを指し、GUIは主にイベント駆動によって記述されている。
『GAI』ではゲームAIプログラミングに長きに亘って用いられてきた技法である有限ステートマシン[Finite State Machine:以下FSM]を紹介しており、FSMを採用する理由として次の5つを上げている。
FSMはその名の通り限られた数のステート(状態)からなる装置で、あるオブジェクトに対してそれが取りうる複数のステートを定義し、それらの間を特定の条件をトリガーとして切り替える事でAI様の振舞いを見せることが可能という仕組みである。以下のような例が挙げられている。
- パックマンのモンスター:
「逃避」「追跡」という2つのステートを持つ。プレイヤーがパワークッキーを入手するというイベントをトリガとして「追跡」から「逃避」に切替わる。 - サッカーゲームの選手:
シュート、ドリブル、ボール追跡、マークに当たる各ステートを持ち、またチーム単位でもキックオフ、守備、フィールドと言ったFSMの実装が行われる。 - RTSのNPC:
移動、巡回、経路進行などの各ステートに従った動作を行う。
前項で上げた『ゼルダの伝説 神々のトライフォース』の敵キャラクターの動作をFSMによって理解すると以下のようになる。
兵士:ステート「巡回」のみを持つ。リンクの行動をトリガとした状態遷移は起きない。
剣兵士:ステート「巡回」「突撃」を持ち、リンクの特定の行動(接近、激突、被弾など)をトリガとして「巡回」から「突撃」へ状態遷移する。
ここで剣兵士の動作をより知能的にしようとした場合、どういった工夫を凝らせば良いだろうか。ステートの数を増やす事は勿論、状態遷移を可逆的なものにするというのも重要なポイントになる。上の例では「巡回」→「突撃」の状態遷移はあってもその逆は定義されていない。「突撃」に移行してから一定時間が経過する、リンクとの距離が離れるなどした場合に再び「巡回」ステートに戻るといったパターンが考えられる。
『GAI』は更にFSMそのものを並列化・階層化させる事を推奨している。並列化の例としてはあるキャラクターについて移動に関するFSMと武器の使用に関するFSMの2つを用意し、これらを同時に制御する事でより明確な定義を可能にするといったものである。階層化は例えばあるオブジェクトが「探検」「戦闘」「巡回」というステートを持っていたとして、「戦闘」は「回避」「追跡」「攻撃」といった幾つかの細かなステートからなる、といった多段構造になっているようなケースである。
自律エージェント
自律エージェント(Autonomous Agent)とは「何らかの環境におかれたシステムであり、その環境を感知し、自身の内的方針に従って行動する存在」、「周囲の環境を認識して状況を解釈し、自身の内的な方針に基づいて意思決定を行って、環境に働きかける行動を取る能力を持つ存在」といった定義が与えられている。『GAI』では自律エージェントの動作を次の3層からなる構造で説明している。
この三つの具体例を示すと1.ゴール地点およびそこに至るプランの選択、2.ゴールまでの軌道計算、3.移動に際して行われるモーションの指定、のようになる。
しかしまずは「自律的」とはどういう状態か、また「エージェント」とは何かという疑問から払拭せねばならない。
- able to govern itself or control its own affairs
- able to do thigs and make decisions without help from anyone else
対義語にheteronomous[他律的]があり、これはその行為や意志が、他者の意志や自然の行動によって支配されている状態を指す。
一方agentは一般に代理人、代理店、薬剤などと訳されるが「行為の主体、動作主」といった定義も存在する。コンピュータ用語としても使われており、「ユーザーを代行して処理を自動的に行うプログラム」といった意味がある。
では自律的でないエージェントとはどういったものかと言えばPC(プレイヤー操作キャラクター)全般がこれに当たるだろう。彼らは内的方針といったものを持たず、只管プレイヤーからのボタン入力を受けて所定の動作を実行するのみであり、そこに自律性は存在しない。よって次のような分類が可能である。
自律エージェント:NPC、敵機、オートモード下のオブジェクト全般
他律エージェント:PC、自機、マニュアルモード下のオブジェクト全般
上述の『ドラゴンクエスト』の例で言えば、「めいれいさせろ」ではパーティ全員が他律エージェントとして振舞うのに対し、それ以外の作戦では勇者のみが他律エージェント、その他のメンバーは自律エージェントとして振舞う事になり、パーティ全体では半自律エージェントと言うべき状態で戦闘が行われる。
尤もプレイヤーから作戦として与えられた行動方針を「内的方針」と呼ぶには当たらない(1.の「行動選択」を自ら行っていない)、という考えもできるので、例えば各プレイヤーに固有の行動方針が設定されており、それに従った行動をとるような場合でなければ完全な自律エージェントとは呼び難く、やはりこれも半自律的あるいはセミオートと言うべき状態であろうか。
『グラディウス』シリーズの「オプション」もまた半自律エージェントに相当する。これは自機の他に追加で射撃を行う球状オブジェクトだが、その配置は予めプレイヤーが選択した形態に従い、また直接操作は不可能だがその軌道は自機の操作をそのまま準える。自ら敵機を察知して攻撃を加えたりはせず、専らプレイヤーの射撃入力に合わせる形で行うため、「周囲の環境を認識した上での状況解釈」も、「自身の内的な方針に基づいた意思決定」も一切行っていない。その意味では殆ど全く他律的と言ってよいのだがプレイヤーの意志に従った行動をとっている訳ではなく、プレイヤー自身とは言えない程度に独立した存在であるため半自律型になる。
このようにゲーム中にはプレイヤーの意向が反映されつつも随意に操る事が不可能または困難なプレイヤー側オブジェクトが多数存在する。これらは時としてフラストレーションの要因にもなるので可能な限りプレイヤーの意を汲む事が出来るようなパターンの設計が望まれる。
操舵については数多くあり、『GAI』では次のようなものが列挙されている。
ファジー理論
ファジー(fuzzy)とはぼやけた状態の事で、輪郭がはっきりしないような状態を表す言葉でもある。このファジーの概念を論理や制御に応用したのがファジー理論で、身近な所では白物家電や自動車に、その他クレーンやエレベータの制御にも使われている。
基本的にコンピュータはある値よりも大きいか小さいか、ある条件を満たすか満たさないかといった二値判断に基づいて動作しており、例えばx>100という条件を入力すればジャスト100であっても満たさないとする。無論そのように判断しているのが正しく動作していると言える状態なのだが、例えばあるAIに成功率50%未満ではトライしないという条件を入力した場合、49%だった場合人間ならばほぼ50%と同じものと判断して挑む事も多いがそのようにプログラムされたAIは絶対に挑戦しない。
毎回このような判断を下すAIに対して人間は知能的であるという感触を持つ事は少ない。
『GAI』では集合論の話から始めてファジー理論の説明を行っているが、ここでは次のプロセスを中心に見ていく事にする。
クリスプ値→ファジー化→ファジールール→非ファジー化→クリスプ値
「クリスプ値」とは二値の事で、コンピュータでは1か0に分けられる。ファジー値とはその中間値、つまり0から1の間に含まれる任意の数の事で、このファジー値を「度合」を量る数として用いる事でより柔軟な制御を可能とする。
例えば剣をその長さで短剣、長剣、大剣の3グループに分ける時、刃渡り100cm未満は短剣、100-200cmは長剣、200cm超は大剣としたとする。この分け方は同時に二つのグループに属している物が存在しないためクリスプである。一方刃渡り120cm未満は短剣、100-200cmは長剣、180cm超は大剣とした場合、短剣でも長剣でも有り得る物と長剣でも大剣でも有り得る物が出て来る。こうした分類はファジーであり、また重なり合う部分はファジー境界となる。
同書では更にファジー言語変数(Fuzzy Linguistic Variable:FLV)という概念を用いてファジールールの設計を解説する。
関連商品
関連項目
- 1
- 0pt