RTSゲームの経路探索はどのように機能しますか?


42

[stackoverflowからクロスポスト]

Warcraft 3やAge of Empiresなどのゲームでは、AIの対戦相手がマップ上を移動できる方法はほとんど無限に見えます。マップは巨大であり、他のプレイヤーの位置は常に変化しています。

これらのようなゲームのAI経路探索はどのように機能しますか?このようなセットアップでは、標準のグラフ検索方法(DFS、BFS、A *など)は不可能に思えます。


2
このグラフでA *が機能しないのはなぜですか?
user712092


1
@tenfour、リンクは現在壊れています。
モントリオール

回答:


29

ほとんどの場合、ナビゲーションメッシュ(一般に「navmesh」と呼ばれる)でA *を使用することが、商用RTSが使用する経路探索ソリューションです。navmeshesの仕組み、ウェイポイントシステムよりも優れたソリューションである理由、および実装リソースへのリンクの詳細な説明がここにあります

特別なゲームモード(ポイント/ノードキャプチャ)またはパトロール、カバーなどを行うユニットの開発を計画している場合は、おそらくnavmeshの上にウェイポイントレイヤーを実装して、AIの動作を制御する(パスファインディングではありません)でしょう。


17

Supreme Commander 2で使用されているFlowfieldアルゴリズムを確認してください。ほとんどのRTSパスファインディングシステムよりもはるかに優れた機能を発揮します(いくつかの例については0:50に進んでください)。


4
それは本当にクールなデモですが、実装自体について私に何も伝えていない
MetaGuru

4
彼らは一文で言及しました-それはgrail.cs.washington.edu/projects/crowd-flowsで見つけることができるUWのクラウドフロー研究に基づいています。

フローフィールドアルゴリズムは非常に興味深いようであり、間違いなくほとんどのアルゴリズムよりもはるかに優れたパスの仕事をしているように見えますが、システムの仕組みだけでなく、システム自体の仕組みに関する公開文書があればいいのにと思います。当然、開発者はこのようなコアシステムを実装する前に多くの質問をする必要がありますが、この場合、これらの質問に答える唯一の方法はシステムを最初に実装することです。:(
アリパトリック

2
@Kragen:プレーンA *(特にウェイポイント)がユニット同士を何度も衝突させる前に、実際に必要なのは2ユニットだけであり、それを回避するには何らかのシステムが必要です。

5
ビデオに基づくと、Starcraft 2の経路探索は次のようになります。SC2はフローフィールドを使用しますか?
クリス・ブイ

7

古いゲームの多くはA *を使用しています。オリジナルのStarcraftはA *を使用しました。衝突に対処する際にいくつかの問題が発生しました。Starcraft 2の衝突は非常によく処理され、大規模なグループの流動的な制御を維持するために、泳ぐ/群がる動作を使用します。 この gamedevの記事では、これがどのように達成されるかについて説明しています。


2

他の回答にはすでに同意していますが、WoW / Warcraft3を実際の2Dの世界と考えてみてください。彼らは、タイルベースとは異なり、タイルだけではありません。

また、GPSが最適なパスをどのように見つけるかを考えることもできますか?リンクされたマップを介してパスを見つけるためのアルゴリズムがたくさんあります。

最初の「Quake bots」スクリプトも、「未知の領域」で動作するように開発されたため、独自のレベルをゼロから設計できるため、役立つかもしれません。

全体として、そのようなマップを扱う私の個人的な方法は、それをA *パスファインダーと考えることです。しかし、最初にすべての「タイルポイント」を事前計算し、これらのすべてに「最近接」などのインデックスを付けます。次に、オブジェクトがAからBに移動する必要がある場合、Bを検索し、その接続先を確認し、目標を達成します。

ゲームの種類とランドスケープ/シナリオに応じて、異なるスキャン前の戦術も役立つ場合があります。いくつかのゲームには障害物がほとんどなく、これらはオブジェクトの「真っ直ぐな線」の動き+いくつかの「どうやって回避する」ことができます。

これが少し理にかなっていて、おそらくあなたにいくつかの考えを与えてくれることを願っています。


1

ほとんどのゲームは、何らかの検索アルゴリズムまたはA *を使用して、マップ上のパスを検索します。AIは、パフォーマンス上の理由から明らかにいくつかの面で調整されています。

これは、Zerglingsが明らかにまったくパスしないStarcraft 2でこれに気付くでしょう。Zerglingsに対してこれを行うのはCPUの悪夢です。AからBに到達するために最善を尽くし、最適なパスを見つけようとさえしません。それらは、チョークまたはランプでボトルネックにできるだけ近づきます。


1

地図はグリッドです。グリッドはグラフです。A *はグラフで動作します。これはグラフ検索アルゴリズムです。A *は、グラフのいくつかのノードを検索する必要があります。

前述のように、ナビゲーションメッシュを使用できます。ただし、このメッシュのポリゴンは単なるグラフのノードであるため、A *(または同様のもの)はとにかくそのメッシュの上部にあります。A *は、あるポリゴンから別のポリゴンへのパスを検索します。

Warcraftや商用ゲームについてはわかりませんが、Collaborative Diffusionと呼ばれる手法もあり、非常に簡単です。通常、グリッドで行われます。ポテンシャルフィールドと呼ばれる手法もありますが、これは以前と同じではないにしても非常によく似ています。

あなたも試してみてください:

  • これらのゲームのいくつかが利用可能なソースコードを持っているかどうか
  • これらのゲームのクローンのいくつかがソースを利用できるかどうか
  • SDKまたはエディターが何かを示唆しないかどうか
  • これらのゲームを作っている会社の雇用主に尋ねてください。

0

私は完全に経験はありませんが、既知のマップを完全にチェックするのではなく、ヒューリスティックに基づいた優れたソリューションだと思います。私が考えることができる発見的方法は、ローカルに基づいており、経験に基づいています。ローカル制御は、ローカル地形チェックと障害物に基づいて、必要な方向に向かって動き続けることができます。ほとんどのマップは複雑な迷路のような動きを必要としないが、かなりつながっていると思います。もう1つのヒューリスティックは、以前の既知のパス(他のユニットによって、またはユーザーが明示的に探索)を使用して、ユニットを既知の位置またはほぼ既知の位置に移動することです。しかし、私はZorbaTHutが言ったように、実際には閉じた空間ではなく、大きな地図で移動することについて話している。混雑した場合、アルゴリズムはより複雑になり、一種の「予測」、同じチームのユニット間の調整、または単にセマフォのような待機戦略が必要になります。また、

ヒューリスティックアルゴリズムは、通常、合理的な計算時間で大きな空間で適切なソリューションを提供するため、優れていると思います(多くのユニットを移動する場合は重要です)。

これが一般的な答えであれば申し訳ありません:私は群衆と働いていましたが、スペースはかなり独特であり、アルゴリズムがどのように働いたかを正確に説明することはできません(とにかく、エージェントベースで、グローバルに定義されていませんでした)。私の答えからいくつかの有用なアイデアが得られることを願っています。


うーん、私が言ったことの何が間違っていたのだろうか...コメントを書くのが難しかったですか?
AkiRoss

ところで、A *がヒューリスティックなアプローチを使用していることを強調したいと思います。-2をありがとう。
AkiRoss

あなたの答えは、「A *とその同類を捨てて、自分のものを捨てる」になります。それは合理的な答えの始まりになりますが、提案以外の情報はほとんど提供しません。ダウン投票の理由は、ソリューションの実装がどれほど難しいかを明確にしないからだと考えています。私は、無制限の時間を与えられた超天才が、navmeshのA *よりも優れている特定のRTSのパスアルゴリズムを手作業でコーディング/調整できることを疑いません。しかし、「天才」と「無制限」を手に入れるのは非常に困難です。
deft_code

ああ…そう。彼は一般的な答えを望んでいると思いました。なぜなら、彼はそれを作る方法を尋ねなかったので、一般的にどのように機能するのでしょうか。とにかく、私が言ったように私は専門家ではありません:私は、一般的なIAアプリケーションで大きなスペースを探索することについて知っている解決策についてのいくつかの情報を与えていました。ご意見をありがとうございます。
AkiRoss
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.