[stackoverflowからクロスポスト]
Warcraft 3やAge of Empiresなどのゲームでは、AIの対戦相手がマップ上を移動できる方法はほとんど無限に見えます。マップは巨大であり、他のプレイヤーの位置は常に変化しています。
これらのようなゲームのAI経路探索はどのように機能しますか?このようなセットアップでは、標準のグラフ検索方法(DFS、BFS、A *など)は不可能に思えます。
[stackoverflowからクロスポスト]
Warcraft 3やAge of Empiresなどのゲームでは、AIの対戦相手がマップ上を移動できる方法はほとんど無限に見えます。マップは巨大であり、他のプレイヤーの位置は常に変化しています。
これらのようなゲームのAI経路探索はどのように機能しますか?このようなセットアップでは、標準のグラフ検索方法(DFS、BFS、A *など)は不可能に思えます。
回答:
Supreme Commander 2で使用されているFlowfieldアルゴリズムを確認してください。ほとんどのRTSパスファインディングシステムよりもはるかに優れた機能を発揮します(いくつかの例については0:50に進んでください)。
他の回答にはすでに同意していますが、WoW / Warcraft3を実際の2Dの世界と考えてみてください。彼らは、タイルベースとは異なり、タイルだけではありません。
また、GPSが最適なパスをどのように見つけるかを考えることもできますか?リンクされたマップを介してパスを見つけるためのアルゴリズムがたくさんあります。
最初の「Quake bots」スクリプトも、「未知の領域」で動作するように開発されたため、独自のレベルをゼロから設計できるため、役立つかもしれません。
全体として、そのようなマップを扱う私の個人的な方法は、それをA *パスファインダーと考えることです。しかし、最初にすべての「タイルポイント」を事前計算し、これらのすべてに「最近接」などのインデックスを付けます。次に、オブジェクトがAからBに移動する必要がある場合、Bを検索し、その接続先を確認し、目標を達成します。
ゲームの種類とランドスケープ/シナリオに応じて、異なるスキャン前の戦術も役立つ場合があります。いくつかのゲームには障害物がほとんどなく、これらはオブジェクトの「真っ直ぐな線」の動き+いくつかの「どうやって回避する」ことができます。
これが少し理にかなっていて、おそらくあなたにいくつかの考えを与えてくれることを願っています。
ほとんどのゲームは、何らかの検索アルゴリズムまたはA *を使用して、マップ上のパスを検索します。AIは、パフォーマンス上の理由から明らかにいくつかの面で調整されています。
これは、Zerglingsが明らかにまったくパスしないStarcraft 2でこれに気付くでしょう。Zerglingsに対してこれを行うのはCPUの悪夢です。AからBに到達するために最善を尽くし、最適なパスを見つけようとさえしません。それらは、チョークまたはランプでボトルネックにできるだけ近づきます。
地図はグリッドです。グリッドはグラフです。A *はグラフで動作します。これはグラフ検索アルゴリズムです。A *は、グラフのいくつかのノードを検索する必要があります。
前述のように、ナビゲーションメッシュを使用できます。ただし、このメッシュのポリゴンは単なるグラフのノードであるため、A *(または同様のもの)はとにかくそのメッシュの上部にあります。A *は、あるポリゴンから別のポリゴンへのパスを検索します。
Warcraftや商用ゲームについてはわかりませんが、Collaborative Diffusionと呼ばれる手法もあり、非常に簡単です。通常、グリッドで行われます。ポテンシャルフィールドと呼ばれる手法もありますが、これは以前と同じではないにしても非常によく似ています。
あなたも試してみてください:
私は完全に経験はありませんが、既知のマップを完全にチェックするのではなく、ヒューリスティックに基づいた優れたソリューションだと思います。私が考えることができる発見的方法は、ローカルに基づいており、経験に基づいています。ローカル制御は、ローカル地形チェックと障害物に基づいて、必要な方向に向かって動き続けることができます。ほとんどのマップは複雑な迷路のような動きを必要としないが、かなりつながっていると思います。もう1つのヒューリスティックは、以前の既知のパス(他のユニットによって、またはユーザーが明示的に探索)を使用して、ユニットを既知の位置またはほぼ既知の位置に移動することです。しかし、私はZorbaTHutが言ったように、実際には閉じた空間ではなく、大きな地図で移動することについて話している。混雑した場合、アルゴリズムはより複雑になり、一種の「予測」、同じチームのユニット間の調整、または単にセマフォのような待機戦略が必要になります。また、
ヒューリスティックアルゴリズムは、通常、合理的な計算時間で大きな空間で適切なソリューションを提供するため、優れていると思います(多くのユニットを移動する場合は重要です)。
これが一般的な答えであれば申し訳ありません:私は群衆と働いていましたが、スペースはかなり独特であり、アルゴリズムがどのように働いたかを正確に説明することはできません(とにかく、エージェントベースで、グローバルに定義されていませんでした)。私の答えからいくつかの有用なアイデアが得られることを願っています。