戦略ゲームAIの支援


8

私は戦略ゲームAI(ファイナルファンタジータクティクスを考える)を開発していますが、AIの設計を思い付くのに苦労しています。私の主な問題は、どちらが最適かを判断することです。

まず、AIに実行してほしいアクションの優先度を説明します。

  1. 最寄りのプレイヤーユニットを殺す

  2. 主な指令を実行する(すべてのプレイヤーユニットを殺す、ターゲットユニットを殺す、xターンの間生き残る)

  3. 味方ユニット/キャストバッファー

これでAIは次のことができるようになります。

  • 移動-> {攻撃/能力/アイテム}(攻撃または能力またはアイテムのいずれか)

  • {攻撃/能力/アイテム}->移動

  • 近づく(ターゲットが範囲内にない場合)

  • {攻撃/能力/アイテム}(移動できない場合)

ノート

能力にはさまざまな範囲/効果/コスト/効果があります。各AIユニットには、5〜10の能力を選択できます。AIは、その指示がxターンの間存続することでない限り、安全よりも殺害を優先します。それは能力コストをあまり気にしません。プレーヤーは後で使用するために大きな呪文を保存したいと思うかもしれませんが、AIはできるだけ早くそれを使用します。

移動は(16進)グリッド上にあります

プレイヤーユニット数:3-6

aiユニットの数:3-7以上。おそらく最大10。

AIとプレイヤーは、同時にすべてではなく、1つのユニットを制御する順番を取ります。

プラットフォームはAndroidです(しばらくしてもプログラムが応答しない場合は、強制終了または待機を指示するポップアップが表示されます。

質問が来ます:

  • 使用するのに最適な能力は、明らかに、最も多くのダメージで最も多くのターゲットを攻撃する能力です。しかし、それぞれの能力は範囲が異なるため、移動できる可能性のある場所をそれぞれ探索しなければ、それらが範囲内にあるかどうかはわかりません。

  • 1つの解決策は、移動する可能性のある各場所を調べ、その場所での最適な攻撃を決定することです。これにより、各場所の最適な移動のリストが表示されます。次に、リストから最適なものを選択し実行します。ただし、これには多くのCPU時間を要します。より良い解決策はありますか?

  • 私の現在の考えは、最も近い、最大の人々のグループにできるだけ近づき、そこから最適な攻撃/能力を決定することです。これはCPUの作業量が大幅に減り、広範囲の攻撃が可能になると思います。最適ではありませんが、AIは「スマート」に見えます。

その他のメモ/質問:

  • 私はそれを過度に考えすぎ/複雑にしていますか?より良いソリューション?あらゆる提案を受け入れる
  • 私は見てとったスペルキャストの質問に、それは考慮に動きをとらない-ので、おそらくことを使用し、可能な各移動位置のためのアルゴ?一番上の答えは、それが影響範囲とグループの戦いに最適ではなかったと述べたので、おそらくさらに調整が必要ですか?
  • してくださいあなたはグラフ/ツリーに言及している場合、私に知らせて、基本的にそれを使用する方法。たとえば、ノードは能力を意味し、レベルはダメージに対応し、最も深いノードを検索します。

回答:


8

この種のAIに使用できるアプリケーションはたくさんあります。個人的に、あなたが利用できる最も明白なテクニックの一つは、ポジション評価関数です。Killzoneはこの手法を利用しており、次の論文で説明されています。

http://www.cgf-ai.com/docs/straatman_remco_killzone_ai.pdf

実際には、世界の表現、見通し線データ、ルックアップテーブルなどについて説明しているので、おそらくその紙の多くを利用できます。また、基本的には16進グリッドのグラフが既にあります(隣接するノードを追加するだけで、この場合、1つの六角形に隣接する六角形になります)。

検討すべきもう1つのこと(現時点ではかなり印象的ですが、少し高度です)はプランナーです。Hierarchical Task Networksについてはあまり読んでいませんので、お任せします。役立つかもしれない1つの計画者はGOAP(目標指向の行動計画)です

このリンクはGOAPに関する多くの情報を持っていますhttp://web.media.mit.edu/~jorkin/goap.html

「Xターンの間サバイブする」という目標に関して私が考えたのは、インフルエンスマップの使用です。インフルエンスマップは、各ノード(六角形)に関連付けられた単一の値(インフルエンスと呼ばれる)を持つ、世界の非常に単純な表現です。

影響はさまざまな方法で計算できますが、あなたの場合の例としては、プレーヤーが配置されている六角形に+10の影響を与え、最大の範囲として指定されている六角形に+1の影響を与えることが挙げられますプレーヤー。

したがって、たとえば、プレーヤーのグループがクラスター化されている場合、それらの周りの影響は比較的大きくなります。これはAIによってその生命への脅威として解釈される可能性があり、最高の影響力のポイントから離れます。

これらは使用できるテクニックのほんの一部ですが、他にもたくさんのテクニックがあります。単純なものが必要な場合は、階層FSM(各状態がより詳細なレベルの別のFSMを含むかなり多くのFSM)のようなものを使用します。複雑だが機能的で実用的なものが必要な場合は、GOAPおよびインフルエンスマップを使用します。MAIN POINTはAIを楽しくすることであり、そのためには何らかの「人工的な愚かさ」を実装する必要があるため、正直である必要はありません。どんなに努力しても、誰よりもはるかに賢いAIをプレイしたいと思う人はいないでしょう。私はこれを厳しいと言っているのではなく、AIが人間の間違いを犯して間違いを犯すことが重要だからです。

幸運を!:)


1
リソースをありがとう。以前にサイトでリンクされているのを見たことがあります。ゲームにどのように適用できるかを確認するには、これをさらに詳しく読む必要があります。このあたりのどこかでインフルエンスマップのアイデアを読んだことを覚えています。その基本的なアイデアが、私の「現在の」アイデアに使用していたものです。
f20k 2011年

5

長年にわたって、私は3つのゲームAIを作成してきました。

ケースの2つはターンごとのオプションが限られているため、すべての可能性を探り、結果の位置を評価しました。難易度に基づいて検索する深さを変更しましたが、かなり立派な相手を作るのにそれほど多くのレイヤーを必要としませんでした。いくつかのレイヤーをダウンさせても、1、2秒で応答が戻ってきましたが、それはかなり古いプロセッサーでした。(Windowsが現場にいた前に、これらのすべてであった。)位置解析の品質が非常にこのアプローチを使用する場合に重要。

3番目のケースでは、1回転あたりの可能な移動の数が宇宙の粒子を簡単に超える可能性があるため、このような分析はできませんでした。それは一種のリスクのような状況でした-多くの軍隊がいる領土ですが、ターンごとにいくつでも移動でき、移動の主な要因は時間がかかりました。隣の州は通常1ターン、マップの反対側の1ターンは9ターンかかります。

ここではまったく異なるアプローチを使用しました。私は防衛に割り当てられる力の割合を決定し、領土の価値と推定される敵の脅威に基づいてそれらを割り当てました(対戦相手が動いた力を見ることができた一方で、彼らがどこに向かっているのかはわかりませんでした-それは人間はその力をどこかに集中させ、それが少しずつではなく一度にすべてが到着できる場所である可能性がはるかに高いと考えました。)防御に必要のないものは攻撃に利用できるようになりました。私は可能な各目標を検討し、それを迅速に取得するための良いチャンスを得るのに必要なものを計算し(長引いた戦いは基本的にすべての生産を破壊します)、一連の攻撃命令を生成しました。注文の値は州の値でした コストは攻撃に関与した軍隊/ターンの数でした。最も高い値を選び、注文を実行し、利用可能な力が何も受け取れなくなるまで繰り返します。実行時間は取るに足らないものでした。

ここでいくつかのアイデアを提供したいと思います。


1
うーん、最初の段落から理解できること:本当によく考えられた決定木を作るなら、いくつかの層でまともなaiを作成し、別の層(困難)。私はこれを試してみると思います。また、ポジションの値に基づいてコマンドを発行するという考えも気に入っています。
f20k 2011年

4

終了/待機に関するあなたのメモは、すべての処理作業をアプリケーションのメインスレッドで実行していることを示唆しています。AndroidのSDKに十分なスレッドサポートがあると仮定すると(私はそうする必要があると思います)、メインスレッドがゲーム内でポップアップするときに、AIの「考える」部分をワーカースレッドにオフロードします。 .. "UIですが、それ以外は通常どおりレンダリングされます。

もちろん、プレイヤーが退屈するのでとにかくAIにそんなに長い時間をかけたくないなど、それを望まないことには十分な理由があります。

実際の質問については、「現在のアイデア」は実行可能ですが、それは非常に簡単です。ただし、これは良い出発点です。これは、AIが純粋に結果を重視するシステムであり、1つの値(ダメージ)を最大化しようとします。他のオプションには、ターゲットに焦点を当てたアプローチが含まれます。これは、反対側のチームからターゲットを選択し(ランダムに、HPが最も多いもの、それらの組み合わせなど)、そのターゲットに移動して、ダメージを与えようとします。

あなたが考慮したいと思うかもしれない一つのことは、各能力に、プレーヤーから隠されており、あなたのAIによって内部的にのみ使用される「パワー」または「有効性」のステータスを与えることです。ゲームのプログラマーとしての能力に関する知識に基づいて、この統計の値を自分で決定します。

次に、AIは最も高い定格の能力を選択し、それを使用しようとします。何らかの理由でそれができない場合は、次のものを選択します。十分に一般的に構築されている場合は、これら2つのシステムを結合し始めることができるので、ターゲットを確立すると、そのターゲットに対する最良の種類の攻撃のヒューリスティックスが得られます(たとえば、MPダメージを与える攻撃をより効果的に重み付けしますターゲットのMPが高い)。


1
あなたが言及した点について-あなたはそのスレッドを使用することについて正しいです。AI計算のサポートスレッドを考えましたが、ユーザーがユニットを移動するため、計算がスローされます。しかし、はい、それは良い考えです。私は間違いなくヒューリスティックを追加するので、AIは他の能力よりも1つの能力を選択する可能性が高くなります。これにより、特定の能力のみを実行する「テーマ付き」AIも可能になります。
f20k 2011年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.