リアルタイムの動的経路探索?


19

現在、いくつかの経路探索の研究を行っています。シミュレーションは次のとおりです。開始点と終了点が表示された3Dシーンがあり、経路探索を支援するナビゲーションメッシュ、ウェイポイント、およびポリゴンを作成できます。

A *アルゴリズムとそのバリアントのいくつかを試しましたが、完全に機能します。しかし、今では「動的な」経路探索にもっと興味があります。たとえば、ポイントAからポイントBへのパスを見つけているときに、新しい障害物が突然現れた場合、アルゴリズムがすぐにパスを再計画できるようにして、最初から検索を開始しないようにします。

私はD *アルゴリズムを読んで、これが必要なものに適しているのか、それともやり過ぎだと思わないのか疑問に思っています。

したがって、私の質問は基本的に次のとおりです。リアルタイムダイナミックパスファインディングに最適なアルゴリズムは何でしょうか。または、代わりにどのような技術の組み合わせを使用できますか?


彼らがどのアルゴリズムを使用しているのかわからないので、これは答えではありませんが、これはあなたがエミュレートしようとしているものだと思います:youtubeビデオ
MichaelHouse

A *の拡張はどうですか?開いている/閉じているセットのノードに保存されているものをあなたが望むもので拡張し、それを考慮するためにA *を拡張します。
user712092

私はあなたと同じ答えを探していましたが、HPA *に関する記事を見つけました。これはビデオゲームに関連しています。私はまだ記事を探しており、おそらくそれを実装するつもりです。これまでのところ、パフォーマンスを改善することは理にかなっており、静的環境と動的環境の両方で使用できます。こちらが記事です
NelsonPunch

回答:


19

D *は非常に複雑です。実装を試みることはお勧めしません。資金が豊富で、賢い/経験のある人々によって開発されているプロジェクトであっても、D * liteが使用されます。

このプレゼンテーションには、Left 4 Deadの経路探索に関する議論が含まれています。

http://www.valvesoftware.com/publications/2009/ai_systems_of_l4d_mike_booth.pdf

1つのアプローチは、粗いレベルのA *検索を使用してエージェントの一般的なパスを取得し、次にエージェントのローカル環境の詳細なレベルA *検索を実行することです。これにより、地形が変化した場合にコースの詳細A *検索をすばやく再計算し、環境の小さなセグメントの詳細なA *検索をすばやく再計算できます。これは完璧ではありません。障害物が複数のコース詳細グラフノードをブロックできない限り機能します。これはほとんどのゲームで問題ありません。これは、エージェントが100人未満の場合に推奨する方法です。

数百または数千のエージェントをサポートする場合は、連続した群衆のようなものを実装できます。この研究を参照してくださいhttp : //grail.cs.washington.edu/projects/crowd-flows/ これは、動的環境で数千人のアクターをサポートできる純粋にCPUベースの方法を説明しています。

数万または数十万のエージェントをサポートしたい場合は、GPUの支援を受けて、連続したクラウドのようなものを実装できます。関連する研究についてはこちらをご覧くださいhttps : //a248.e.akamai.net/f/674/9206/0/www2.ati.com/misc/siggraph_asia_08/GPUCrowdSimulation_SLIDES.pdf

これは、連続した群衆が実際 に動いていることを示すビデオです。http//www.youtube.com/watch? v = lGOvYyJ6r1c(4:10にスキップして、車や信号のような大きな動的障害物が街を歩いている何百人もの人々に影響を与えているのを見ます)


リンクをありがとう。D * Liteは、私が読んでいたものから、右に見えるん
アンドレイ

9

簡単なステアリング動作を見ましたか?

http://www.red3d.com/cwr/steer/

ローカルの障害物回避を行うために、それらを使用してA *パスから逸れ、完了したらパスに戻ります。

また、複数の動作を簡単に組み合わせることができます。


+1。それがなぜ投票されたのかはわかりません。これは単純であり、おそらく質問者が探していた答えではないかもしれませんが、私はそれが話題であり、それが有用だと思いました:)
Olhovsky

1
最新のゲームでこのステアリング動作を読んで実装しました。ここで、他のメソッドに再度置き換えます。事前に計算された最適なパスではうまく機能しないと思います。複数の動作の「組み合わせ」は、通常、悪い結果をもたらします。まだそれを使用する予定がある場合は、同時にあなたのパスを操縦し、追跡しようとしないでください。代わりに、100%ステアリングに切り替え、障害物を通過したら100%に戻します。
イミ

4

あなたの投稿はスタックエクスチェンジの「ゲーム開発」の部分にあるので、ほとんどのゲームプログラマーはあなたに答えます:それはリアルタイムダイナミックパス検出ではなく、*に続くリアルタイムダイナミックパス*です。

ナビゲーショングラフのエッジが完全に遮られているエッジケースでは、パスファインダーが別のパスを再計算する必要がありますが、ほとんどの場合、障害物の周りでエンティティを操縦し、位置予測を行い、正しい方向に回避することができます。ほとんどのゲームでは、特にプレイヤーのアクションやエージェントの決定を正確に予測できないため、動的エージェントの位置を時間の経過とともに予測するのは重すぎます。

したがって、私のアドバイスは、ステアリング動作(http://red3d.com/cwr/steer/)の実装から始め、パスが不可能になるケースを処理し、その上にレイヤーを追加してエッジでないケースを処理することですtは、以前の2つのソリューションで処理されました。

お役に立てれば


ええ、いいえ。「経路追跡」は、経路探索と同じです。障害が変化しているときにデスクトップPC で何千人ものエージェントをリアルタイムで追跡できる多くのアプローチがあります。確かに、障害物が動き回るときに、単一のエージェントのパスを見つけることはそれほど高価ではありません。以下に、そのようなアプローチの1つを示します。grail.cs.washington.edu / projects / crowd-flows GPUアクセラレーション版の連続群衆が存在します。
-Olhovsky

私はこれに反対する必要があります。すべてのエンジンは、パス検索とパスフォローイングを2つの異なる問題として扱います。最初の問題は、ナビゲーション可能な領域のグラフ検索であり、もう1つはローカル空間内の最適な移動ベクトルの検索です。GPUに依存することなく、AAAゲームで使用されるミドルウェアを生成するクラウドシミュレーションに取り組んできました。ほとんどの実装では、フローフィールド(パスファインダー)とステアリングを使用してフローを追跡し、他のエージェント(パスフォロワー)を回避します。私の答えが述べたように、これは「ゲームプログラマー」の答えであり、学術的な答えではありません。
エマルテル

連続した群衆にはGPUが必要ないことを知っています。そのため、CPUベースのバージョンをリンクしました。パス追跡の説明は依然としてパス検索検索であり、異なるデータセットでの異なる詳細レベルでのパス検索検索にすぎません。あなたが本当に持っているのは、コース詳細パス検索パスと、詳細なパス検索パスです。最終的には、俳優が従うべき道を見つけようとしています。これに関する新しい用語を考案することは、物事を混乱させるだけです。
-Olhovsky

1
申し訳ありませんが、「パスフォロー」は発明された用語ではありません。業界で作成されたドキュメントを読むと、何度も何度も使用されていることがわかります。リンクまたはいくつかのリンクだけです。残念ながら、業界で広く使用されているエンジン/ミドルウェアのNDA保護ドキュメンテーションにリンクすることはできません。
エマルテル

1
あなたの最初のリンクは、私の答えで私が与えたリンクです。わかりました、そのタイプのパス検出をパスフォローイングとして説明するのは公平です。最終的にはどちらも従うべきパスを見つけようとしていますが、この場合、私は間違っていると思います。2番目のリンクに表示されているものをパスフォローと呼びます。たとえば、粗いパスポイントをキュービックスプライ/ビーザーカーブ/ここにメソッドを挿入してリンクする行為。そうは言っても、あなたの答えが示唆するように、動的障害物の周りに経路探索を実装することは実行可能ではないことに強く同意します。
-Olhovsky
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.