DQ6 AI処理の解析1

AI処理の流れが大体わかったのでエントリとして投下していくことにします。一般的に知られていることですが、AIを設定している場合、何を行動するかは「ターン内で自分の順番が回ってきた時点」で判断されます。いわゆる後出しジャンケンというやつでその時点で瀕死のキャラクターがいれば回復行動を選択します。モンスターの思考レベルで言う「神」に相当します。ずいぶんずるい感じもしますが、ターン開始時に行動を決定しようとするとより多くのメモリ領域を必要とするため(例えば回復行動は誰がやるのが一番効率的か、複数のキャラクターにまたがった試算を行って最適な行動を選択する必要があったり、敵の行動の先読みも必要になったりするかも)、やむを得ないといったところでしょう。「自分の行動直前に何を行動するかを判断できる」ということはこれから取る行動を誰かに妨害されることを想定する必要がなく、その時点で最適な行動を選択すればいいということで実装としてはかなり楽になります。

AIの行動が決まる基本的な流れとしては

  1. 各種メモリの初期化
  2. AIの選択対象となる戦闘行動を列挙
  3. 2で列挙した戦闘行動1つ1つにつき評価を行い、効果値を算出
  4. 作戦に応じた効果値の補正
  5. 最終的に一番効果値の高い戦闘行動を選んで決定

となっています。ここでいう「効果値」とはその戦闘行動を取ることによって期待できる効果を数値化したもので、回復系やダメージ系は基本的にそのままですが、その他の系統は得られる結果を数値に換算することで異なる種別の戦闘行動を値という1つの軸で比較することを実現しています。系統は全部で5種類で、攻撃系・補助系(敵弱化)・補助系(味方強化)・回復系・蘇生系です。また、3でも作戦に応じた効果値の補正は一部行っていますが、最終的には4の補正がかなり大きく、作戦による戦闘行動種別の取捨選択を実現しているようです。また、「作戦によっては特定の戦闘行動を優先」のような特殊なコードは一切大きな流れの中には存在せず、全ては効果値の大きい戦闘行動を選択することで処理は極めてシンプルになっています。また、モンスターを評価するにあたって「AI専用モンスター脅威値」とでも呼べるようなテーブルが存在し、モンスターの取る行動が種別ごと(直接攻撃・呪文・踊り・ブレス・その他)に数値化され効果値の算出に使用されています。このデータは$08F19B-に存在しますが、正直その数値の算出の根拠がわからず、なんらか恣意的な調整が存在するのではと思ったりもします。

現在DQ3 K.MixにAIを実装する作業を行っていますが、学習機能を実装したい都合上「知らない情報は知らないままで脅威値の算出を動的に行う」必要があり、一応脅威値を出すところまで実装はしました。序盤のモンスターは割といい感じだったりするものの、アレフガルド以降のモンスターの数値が意外と大きくなってしまい、「どうすんのこれ」という感じではあります。少しずつではありますが、一応作業は進めています。学習機能についてはいい感じの仕組みを思いついたのでそれについては問題ないのですが、作業の順番として

  1. とにかくひと通り動くものを実装する
  2. 学習機能OFFでAIがどういう行動をするかテスト・調整
  3. 学習機能ONでAIがどういう行動をするかテスト・調整

を考えていますが、まだ1すら完了していないので先は長そうです。途中から話がそれましたが次回から実装を見ていくことにします。

コメント

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