GISデータベースに新しいルーティングアルゴリズム(ダイクストラ、A *より)はありますか?


46

Microsoftの研究者からのReach for A *や、カールスルーエUniからのSandersとSchtolz(名前を正しく綴った場合)によるHighway Hierarchiesなどの作品があります。どちらも計算順序を大幅に削減し、大きなグラフで千倍高速化します(リンクされたドキュメントの結果を参照)。後者の作業はオープンソースルーティングマシンにつながりましたが、残念ながら十分に普及しておらず、適応もしていません(一生懸命試しましたがコンパイルできませんでした)。

同時に、私が試したdbs、SpatialiteとPgRoutingは、彼らのドキュメントによると、DijkstraとA *アルゴリズムだけを提供しています。言及した双方向検索さえ見たことがなく、私の経験では計算時間を2回節約します。

データベースや他のアプリケーションのためのより良いアルゴリズムはありますか?


1
pgRoutingユーザーまたは開発者のメーリングリストに質問を投稿しましたか?そのコミュニティから直接より良い応答を得ることができます。ユーザーリスト:(lists.osgeo.org/mailman/listinfo/pgrouting-users)開発者リスト:(lists.osgeo.org/mailman/listinfo/pgrouting-dev
-RyanDalton

+1すばらしい質問。Get Directionsで googleが使用するアルゴリズムは何でしょうか。関連する質問はこちら
カーククイケンドール

1
Googleはカールスルーエチーム(algo2.iti.uni-karlsruhe.de/english/index.php)をサポートしていたので、彼らは彼らのソフトウェアを使用していると思います。これは本質的にはオープンソースルーティングマシンです。
クレブロン

回答:


23

真実は、ほとんどの人がA *アルゴリズムのカスタムバリエーションを使用していることです。これは、ほとんどの「ビッグガイ」で見られます(公開フォーラムに誰がいるかはわかりませんが、おそらくそのうちの1つを使用すると言うことができます-保証されています)。使用するデータセットに大きく依存しています。

あなたはすでにプラウティングについて言及していましたが、これは「伝統的な」オプションと考えます。単純なルーティングアルゴリズムを実行する場合や、ほとんどの問題に適しています。また、使いやすく、バックエンドで従来のデータベースを使用します。

それでも、それは本当にあなたが解決しようとしている問題の規模とタイプに依存し、ルーティングはグラフの問題です。

繰り返しになりますが、「大物」には通常、ルーティングアルゴリズムに影響する多くのデータがグラフに関連付けられています(交通データ、バスルート、歩行経路など)。これらは、マルチモーダルの旅行プランナーとして知られています(ここでは、「モード」を計画する選択肢もあります-自転車道はありません-公共交通機関のみ-そのようなもの)。あなたが歩けば旅行計画も時間に敏感な問題(すなわちになりどのように考えることができますバックあなたの目的地に移動します地下鉄キャッチすることができるようになります、バックいくつかのエッジを前方にはるかに速くあなただけの前方エッジを移動しようとした場合よりもを最低コストを使用して)。

「大物」は、それ自体は従来のデータベースにデータを保存せず、事前に計算されたグラフを使用します(ようこそhadoop / mapreduceクラスター!)。ご想像のとおり、これらのグラフは非常に大きくなるため、隣接するグラフのエッジを接続する方法を知ることは難しい場合があります。

とにかく、マルチモーダルルーティンググラフプロジェクトをご覧になることをお勧めします。

Graphserverが思い浮かびます。多くのドキュメントではなく、多くの純粋なコーディングの素晴らしさ(知る限り、MapQuestはルーティング製品のいくつかにこのプロジェクトのバリエーションを使用していると思います)。

別のオプションとして、OpenTripPlannerがあります。OpenTripPlannerには、背後に多くの賢い人(graphserverの人を含む)がいます。


15

新しいかどうかはわかりませんが、pgRoutingにはシューティングスターアルゴリズムがあります

シューティングスターアルゴリズムは、pgRoutingの最短経路アルゴリズムの最新版です。その専門は、ダイクストラおよびA-Starアルゴリズムのように頂点から頂点にではなく、リンクからリンクにルーティングすることです。これにより、たとえばリンク間の関係を定義することが可能になり、ソースとターゲットが同じでコストが異なる「パラレルリンク」などの頂点ベースのアルゴリズムの問​​題を解決します。

ESRIのNetwork Analystエクステンションは、前述の階層的なアプローチを使用して、解決時間を制限します。

全国規模のネットワークデータセットで正確な最短パスを見つけるには、検索する必要があるエッジの数が多いため時間がかかります。パフォーマンスを向上させるために、ネットワークデータセットは、州間高速道路での運転が地方道路での運転よりも望ましい交通システムの自然な階層をモデル化できます。階層ネットワークが作成されると、双方向ダイクストラの変更を使用して、起点と終点の間のルートが計算されます。

このアプローチの例が記載された非常に詳細なホワイトペーパーがESRIサイトにありますが、ダウンロードするにはログインが必要です(ArcGIS Network Analystの階層ルートホワイトペーパー)。


11

収縮階層は非常に高速なアルゴリズムです。

このアルゴリズムは、クエリの実行中にRAMに優しい(縮小グラフを保持するには、さらに多くのRAMと大規模な前処理が必要です)

他にもいくつかのアルゴリズムがあります-公共交通機関のルーティングを解決するアルゴリズムを含む:

マイクロソフトもいくつかの調査を行っています。

(まあ、ダニエル・デリングもカールスルーエ出身です)

利用可能なアルゴリズムの素晴らしい紹介と概要を得ることができます:

警告:ドイツ語(!)講義。しかし、少なくともヘッダーは、より多くの情報(ALT、Arc-Flags、CHASE、...)または付属の文献を取得するのに役立ちます!

更新

GraphHopperは、収縮階層と他のアルゴリズムも実装するようになりましたデモも試してみてください。

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