ジャンプポイントサーチアルゴリズムはどのように機能し、なぜそれほど効率的ですか?


8

以下のアプレットを試してみたところ、Jump Point Searchと呼ばれるこの経路探索アルゴリズムは、A *やDijkstraよりもはるかに高速な結果をもたらすことがわかりました。

http://qiao.github.io/PathFinding.js/visual/

A *:46秒 ここに画像の説明を入力してください

ダイクストラ:1分39秒 ここに画像の説明を入力してください

ジャンプポイント検索:3秒未満 ここに画像の説明を入力してください

言うまでもなく、その結果にはかなり驚いています。視覚的な表現から、Jump Point Searchは(少なくともブロックの選択から)パスを見つける際に多くのランダムな推測(おそらく非常にインテリジェントなもの)をしているようですが、このアルゴリズムが悪い結果となったテストケースはまだ見つけていませんA *とダイクストラよりも結果。

このアルゴリズムはどのように機能しますか?A *やダイクストラと比べてどれほど効率的ですか?


2
スクリーンショットから、A *が完了するのに7ミリ秒(46秒ではなく)、ダイクストラ13ミリ秒(1分ではなく39秒)、JPS 2ミリ秒(3秒ではなく)かかったことは明らかです。どこから電話番号を入手しましたか?
yannis 2013年

タイマーで手動でタイミングを計ること。ヒューマンエラーは、imが数秒以上ずれていることを示している可能性がありますが、アプレットで言及されている時間ほど時間がかかったことはありません。多分それは何か他のものを指しているか、それはバグです。
l46kok 2013年

7
あら、本当にそうしたの?ツールが報告する時間は正しいです。これは、各アルゴリズムが完了するまでにかかった時間です。その後の(重要な)遅延は、アルゴリズムのパスの表示用です。SVGアニメーションはHTML5で最もクールなものの1つですが、それでも(まだ)slowwwwです。
yannis 2013年

@YannisRizosダン、私はもっとよく知っているべきだった:(
l46kok

1
アルゴリズムの進行状況を示すために遅い、たとえば「HTML5が遅い」などのためではない
Steven Lu

回答:


5

基本的な考え方は、JPSは多くの候補パスを早期に破棄できるため、必要な計算量を削減できるということです。

多くのマップでは、同じコストの複数のパスが同じ目的地につながります(大きなオープンエリアのあるゲームマップなど)。JSPでは、これらのパスをプルーニングできます。

詳細な説明はここにあります


1

ツールの最新バージョンでは、JPSは実際にはJPS再帰も表示するため、多くのタイプのグラフで実際にA *よりも遅いことが示されています。

JPS検索 灰色のノードは検査されたノードです

これは現実の世界にも当てはまります。JPSは通常、はるかに少ないノードをエンキューしますが、通常さらに多くのノードを調べます。その結果、実際の速度が向上するかどうかは、グラフによって異なります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.