障害物が動いている場合でもA *は効率的ですか?


30

経路探索について学び始めたばかりで、A *アルゴリズムを検討しています。私の主な関心は、これまでに見たすべての例が、計算する静的障害を示していることです。

動く障害物、たとえば他のキャラクターが動き回るなど、キャラクターが動き回る必要がある場合、フレームごとにアルゴリズムを実行する必要があると想定していますが、かなり高価になるのではないかと心配していますハードウェアが各移動アクターの各フレームを処理します。

A *は、障害物が動いている場合でも使用できるほど効率的ですか、または、動いている障害物をより雄弁に処理するパス検索の別の方法がありますか?

回答:


27

動く障害物のあるパスを再計算する必要がある場合、A *よりもはるかに高速な複数のアルゴリズムがあります。こちらの「単純な再計算」を参照してください。

ただし、それらのいずれについても市販のソリューションを見つけることはまずないので、99%のケースではゲームに対してやり過ぎです。既存の完全に最適化されたA *ソリューションを使用し、ゲームでの経路探索を高速化するための一般的な既存のトリックを使用して、時間をより有効に使用できます。

  • まれな間隔でのみ最適なパスを再計算する
  • 複数のユニット間でベストパスを共有する
  • 階層グラフを作成して、パスの一部のみを再計算する必要があるようにします

など。これらのトリックに関する詳細情報は、このサイト全体またはAmitのA *ページで見つけることができます。


10

はい。A *は、ほとんどすべての場合に使用する方法です。それはあなただ、ダイナミックになったノードコスト計算、したがって、より複雑な計算やトラックへ。

移動する障害物の将来の位置がすでにわかっている場合、A *はコスト関数で障害物の一時性を考慮することができます。

例:このノードは4ティックで到達し、ティック#3からティック#6まで占有されるため、このノードの移動コストは6-4 = +2ティックです。それがまだ最良の道かもしれません。

障害物の進行方向も考慮する必要があります。

事前にわからない場合は、障害物がないと想定し、障害物に到達したときにパスを再計算できますが、デッドロックとライブロックについて何かする必要があります。(障害がどこにあるかを予測できる場合も同じですが、それ自体が一種のデッドロック/ライブロック回避であり、それは目的に十分合っている可能性があります。)

デッドロックは、両方が移動するのを待機し、移動しない場合です。

ライブロックとは、両方(またはそれ以上 <-これが考慮されることが重要です)が他方を同じ方向に回避するために移動し、最終的に前進せずに行き来することです。

ライブロックの解決は非常に複雑になる可能性があり、それはゲームのコリジョンルールとメカニズムに完全に依存します(たとえば、障害物と戦って破壊する必要がありますか?)。

多くの場合、他の移動オブジェクトが先に計画できるように、移動オブジェクトがノード/パスの予約をスケジュールするようになります(パスが変更または消滅した場合のキャンセルを忘れないでください)。

この情報を入手したら、傍受を計画することもできます。


19
なんてこった、「ライブロック」-あなたは、私がいつも廊下でやらなければならないひどい左右の回避を説明しました。
イーサンブレイブ

2
単純なライブ/デッドロックソリューションは、使用可能なオプションをランダムに選択することです(たとえば、50%の確率で移動せず、50%の確率で左に移動します)。各アクターがランダムに選択する限り、ロックが解決される可能性はゼロではありません。
Draco18s

@ Draco18sそして、フレイルのサイズを指数関数的に前後に増やします(イーサネットの衝突がどのように解決されるかを説明したばかりかもしれません!)
Cort Ammon-Reinstate Monica

代わりに、じゃんけんや、ペトリ皿囚人のジレンマの友好的なゲームをプレイできると思います。; P
Draco18s
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.