ゲームAI基礎

■AI

AIはArtificial Intelligenceの略で日本語では人工知能という意味です。
AIには「汎用人工知能」「特化型人工知能」の2種類があります。
近年、急成長しているのは後者の「特化型人工知能」です。

●汎用人工知能
	汎用人工知能とはSFやアニメ出てくるロボット
	(ドラえもん、鉄腕アトムなど)のように人間と同じ判断や
	学習を行うことができるシステムのことです。
	ただし、この分野はまだ完成しておらず、日夜完成に向けた研究がされています。
	汎用人工知能は「強いAI」とも呼ばれています。

●特化型人工知能
	特化型人工知能とは特定の内容における作業を人間以上の能力以上で
	行えるシステムのことで、Googleの検索エンジンの「RankBrain」や
	囲碁の「アルファ碁」、ソフトバンクのPepperなどが該当します。
	ソフトバンクのPepperは汎用人工知能に該当するとされることもありますが、
	「人とのコミュニケーションがとるという」ことに対して特化したAIなので
	特化型人工知能としています。
	特化型人工知能は「弱いAI」とも呼ばれています。
	現在ディープランニングなどのアルゴリズムによって、
	特化型人工知能は爆発的な成長を遂げており、仕事のサポートや新しいビジネス展開など
	様々なジャンルの企業から注目を集めています。
	IoTで収集されたデータを解析し、情報を抽出する役割も特化型人工知能が行います。

■ゲームAI

PS4やSwitch、PSVITAなどのコンシューマゲームやスマートフォンゲームでも
AIは使用されていますが、ゲームで使われているAIは「特化型人工知能」にあたります。
ゲームAIも「キャラクターAI」「メタAI」「ナビゲーションAI」の3種類があります。

●キャラクターAI
	キャラクターAIはNPC(ノンプレイヤーキャラ)の動作を管理するシステムです。

	・最も単純なゲームAI
		最も単純でありながら現在でも使用されているゲームAIは
		キャラクターがゲーム内の影響を受けないというものです。
		例えばシューティングゲームで画面の上から下に移動してくる敵がいるとします。
		この敵は生成された位置からプレイヤーの位置や状態、その他の要因に関係なく
		下に移動するだけですが、これもキャラクターAIのひとつです。

	・キャラクターAIの発展
		キャラクターAIは外部から影響を受けないAIから始まり、
		プレイヤーの位置情報などの外部からの情報を受けとって挙動を変えるAIが誕生し、
		複数の選択肢「接近、待機、撤退」などを状況に応じて選択するAIや
		「相手の拠点を攻める」「自陣を守る」などの長期的目標に対して行動できるAI、
		集団での行動を実行できるAIも誕生しています。
		このようにゲームAIは複雑な行動も可能とするところまで発展していますが、
		「・最も単純なゲームAI」で書いてあるような単純な動作を行うAIは
		現在でも使用されています。
		色々な手法が生まれたからこそゲームの規模や仕様に応じてどのような方法で
		AIを実装するかを考え、選択することが大切です。

●メタAI
	メタAIはゲームの進行や調整を行うためのAIです。
	このAIはゲームシステムが管理するAIでプレイヤーのプレイレベルに合わせた難易度調整や、
	集団AIの管理やマップの自動生成などを行います。
	例えば集団AIでは複数のキャラクターのグループに対して
	「敵の拠点を攻めろ」などの命令を与えます。
	命令を与えられたグループのキャラクターたちはその命令に対して
	「1人で裏道から行く」「特定のキャラクター(リーダー)についてく」などの
	判断を行い各自が実行していくことになります。
	この時のキャラクターの判断は「キャラクターAI」を使用して判断します。
	メタAIが全体、キャラクターAIが局所的なAIと考えて問題ないと思います。

●ナビゲーションAI
	ナビゲーションAIとはキャラクターAIやメタAI、プレイヤーに
	様々な情報の提供を行うAIで、情報とは進行するための経路や
	ボードゲームの状況(有利、不利)などです。

■キャラクターAIの種類

キャラクターAIには複数の手法があります。
三宅陽一郎さんが体系毎に分類されているのでそちらを参考にして説明しています。

●ルールベースAI
	ルールベースAIはルールに従って挙動を変えるAIです。
	ルールは「条件」+「条件が満たされた際の行動」を指しています。

	・例
		「HPが70%以上なら弾タイプ1を出す」
		「タイマーが0~20なら右に移動する」などです。
		「~なら」までが条件で残りが行動です。

●ステートベースAI
	ステートベースAIはキャラクターに設定した状態を遷移することで
	挙動を変えるAIです。
	各状態毎にその状態特有の挙動と、別状態に遷移するための条件があり
	条件を満たすまでは状態ごとの挙動を実行し、条件が満たされたら
	別の状態に遷移することで、様々な挙動を実現します。

	・例
		待機:
			挙動:
				その場を動かない(何もしない)

			条件:
				待機 => 移動
					一定時間経過

				待機 => 攻撃
					プレイヤーが一定範囲に入ってきた

		移動:
			挙動:
				全20フレームで以下の挙動を実行する
					1~10フレーム間右移動する
					11~20フレーム間左移動する

			条件:
				移動 => 待機
					20フレーム到達する

				移動 => 攻撃
					プレイヤーが一定範囲に入ってきた

		攻撃:
			挙動:
				1.プレイヤーに近づいていく
				2.一定範囲内に入ったら攻撃動作をする

			条件:
				攻撃 => 待機
					・攻撃が終了する
					・プレイヤーが範囲外に出る

●ビヘイビアベースAI
	ビヘイビアベースAIはキャラクターの行動を木構造として管理して選択するAIです。
	キャラクターの行動を階層的に分類して各階層毎に状況に応じて選択したり、
	ランダムで選択したりして最下層まで進んでいき、最終的な行動を決めます。

	例:
		game_ai_0004

●タスクベースAI
	タスクベースAIはタスクを組み合わせて最終的に行いたいタスクを実現するAIです。
	タスクは行動単位を示しており、具体性のあるタスクから、抽象的なタスクまであります。
	これらのタスクが階層構造になって、上位タスクを実現するために
	タスクを組み合わせて、下位タスクからタスクを実行していきます。

●ゴールベースAI
	ゴールベースAIは最終的に実行したいゴールを設定し、
	それを実現するための挙動を実装します。
	ゴールベースAIは短期の挙動よりも長期の挙動に向いているAIです。

●ユーティリティベースAI
	ユーティリティベースAIはAIの効果が最大限になるような選択を行うAIです。
	選択を行うために各挙動について評価式が設けられており、
	状況を評価式に当てはめ、評価が最大限になる挙動を選択します。