バス/電車/ ...の停留所と各日付の到着/出発時刻などのデータベースがあります。 2つの場所の間で最速(最短/最安/最短のトランジション)の旅行を検索する方法を探しています。将来的には、OpenStreetMapデータを使用して、停車地間や停車地から開始/終了までの歩行を行う任意の場所を設定したいと思いますが、当面は、データベース内の2つの停車地間のパスを見つけたいだけです。
問題は、この主題について多くの情報を見つけることができないように見えることです。たとえば、 このウィキペディアのページ テキストがたくさんあり、有用な情報がまったく含まれていません。
私が見つけたのは [〜#〜] gtfs [〜#〜] 形式で、 Google Transit で使用されています。私の街はパブリックデータフィードを提供していませんが(プライベートデータフィードも提供していません)、GTFSに含まれるすべての重要な情報をすでに持っているので、変換を行うのは簡単です。
OpenTripPlanner のように、 OpenStreetMap を使用して歩行者/車/自転車のルーティングを実行できるGTFSベースのソフトウェアがいくつかあります。
しかし、ルーティングコードは十分に文書化されておらず(少なくとも私が見つけたものから)、すべてを必要としません。
私が探しているのは、使用できるアルゴリズムの概要、それらのパフォーマンス、おそらくいくつかの擬似コードです。
したがって、質問はです。停車地、ルート、到着/出発/移動時間のリストが与えられた場合、停車地Aからの最速パスを簡単に見つけるにはどうすればよいですかBを止めるには?
w:Edges->R
、それは各エッジの時間/お金/ ...を示します。(*)「最小遷移」の場合、重みは実際にはエッジごとに1であるため、 [〜#〜] bfs [〜#〜] を実行してこれを最適化することもできます。または、この post で説明したように、ダイクストラの代わりに 双方向 BFS [社会的距離について説明されていますが、実際には同じアルゴリズムです]。
[〜#〜]編集[〜#〜]
コメントで言及した[タイミングの]グラフの非静的な性質の編集として[価格と遷移の数については、これらのグラフは静的であるため、上記で述べたことが引き続き適用されます]。 距離ベクトルルーティングアルゴリズム を使用します。これは、実際には動的グラフで機能することを意味し、 ベルマンフォードアルゴリズム の分散バリエーションです。
アルゴリズムのアイデア: