真実は、ほとんどの人がA *アルゴリズムのカスタムバリエーションを使用していることです。これは、ほとんどの「ビッグガイ」で見られます(公開フォーラムに誰がいるかはわかりませんが、おそらくそのうちの1つを使用すると言うことができます-保証されています)。使用するデータセットに大きく依存しています。
あなたはすでにプラウティングについて言及していましたが、これは「伝統的な」オプションと考えます。単純なルーティングアルゴリズムを実行する場合や、ほとんどの問題に適しています。また、使いやすく、バックエンドで従来のデータベースを使用します。
それでも、それは本当にあなたが解決しようとしている問題の規模とタイプに依存し、ルーティングはグラフの問題です。
繰り返しになりますが、「大物」には通常、ルーティングアルゴリズムに影響する多くのデータがグラフに関連付けられています(交通データ、バスルート、歩行経路など)。これらは、マルチモーダルの旅行プランナーとして知られています(ここでは、「モード」を計画する選択肢もあります-自転車道はありません-公共交通機関のみ-そのようなもの)。あなたが歩けば旅行計画も時間に敏感な問題(すなわちになりどのように考えることができますバックあなたの目的地に移動します地下鉄キャッチすることができるようになります、バックいくつかのエッジを前方にはるかに速くあなただけの前方エッジを移動しようとした場合よりもを最低コストを使用して)。
「大物」は、それ自体は従来のデータベースにデータを保存せず、事前に計算されたグラフを使用します(ようこそhadoop / mapreduceクラスター!)。ご想像のとおり、これらのグラフは非常に大きくなるため、隣接するグラフのエッジを接続する方法を知ることは難しい場合があります。
とにかく、マルチモーダルルーティンググラフプロジェクトをご覧になることをお勧めします。
Graphserverが思い浮かびます。多くのドキュメントではなく、多くの純粋なコーディングの素晴らしさ(知る限り、MapQuestはルーティング製品のいくつかにこのプロジェクトのバリエーションを使用していると思います)。
別のオプションとして、OpenTripPlannerがあります。OpenTripPlannerには、背後に多くの賢い人(graphserverの人を含む)がいます。