GIS veritabanlarında daha yeni yönlendirme algoritmaları (Dijkstra, A * dan daha var mı)?


46

Gibi eserler vardır A * için Reach , Microsoft araştırmacıları ve gelen Otoyol Sıradüzenleri Sanders ve gelen Schtolz (Ben doğru Adini ise) tarafından Karlsruhe Uni . Her ikisi de hesaplama sırasını çok düşürür ve büyük grafiklerde bin kere hızlandırır (bağlantılı belgelerdeki sonuçlara bakınız). İkinci çalışma , ne yazık ki yeterince popüler olmayan ve uyum sağlamayan Açık Kaynaklı Yönlendirme Makinesi'ne neden oldu (çok denememe rağmen derleyemedim).

Aynı zamanda, denediğim dbs Spatialite ve PgRouting, dokümanlarına göre sadece Dijkstra ve A * algoritmaları sunuyor. Bahsi geçen iki yönlü aramayı bile görmedim, bu da benim deneyimlerime göre hesaplama süresini iki katına düşürüyor.

Veritabanları veya diğer uygulamalar için daha iyi algoritmalar var mı?


1
Sorunuzu pgRouting kullanıcılarına veya geliştiricilerin e-posta listelerine gönderdiniz mi? Doğrudan bu topluluktan daha iyi bir yanıt alabilirsiniz. Kullanıcı listesi: ( lists.osgeo.org/mailman/listinfo/pgrouting-users ) Geliştirici listesi: ( lists.osgeo.org/mailman/listinfo/pgrouting-dev )
RyanDalton

+1 Harika bir soru. Google'ın Get Tarifi için hangi algoritmayı kullandığını merak ediyorum . İlgili soru burada .
Kirk Kuykendall

1
Google, Karlsruhe ekibini desteklediğinden ( algo2.iti.uni-karlsruhe.de/english/index.php ), temelde Açık Kaynak Yönlendirme Makinesi olan yazılımlarını kullandıklarını düşünüyorum.
culebrón

Yanıtlar:


23

Gerçek şu ki, çoğu insan A * algoritmasının özel bir varyasyonunu kullanıyor . Bunu "büyük adamlar" ın çoğunda göreceksiniz (halka açık bir forumda kim olduklarını söyleyemem, ancak sezgisel tadilatta yapılan değişikliklerin nerede olduğunu, muhtemelen bunlardan birini kullandığınızı söyleyebilirim) kullandıkları veri setlerine çok bağlıdır.

Zaten "geleneksel" bir seçenek olarak kabul edebileceğim, uzun zamandır bahseden bahsettin . Basit yönlendirme algoritmaları yapmak ve çoğu problem için iyidir. Ayrıca arka uçlarında geleneksel bir veritabanı kullanmak kolaydır.

Bununla birlikte, bu gerçekten çözmeye çalıştığınız sorunun türüne ve türüne bağlıdır ve yönlendirme bir grafik problemidir.

Bir kez daha, "büyük adamlar" genellikle yönlendirme algoritmasını etkileyen grafikleriyle (örneğin trafik verileri, otobüs güzergahları, yürüyüş yolları) ilişkilendirilen birçok veriye sahiptir. Bunlar çok modlu seyahat planlamacıları olarak bilinir (burada "modları" planlama seçeneğiniz de vardır - bisiklet yolu yok - sadece toplu taşıma - bu tür şeyler). Eğer yürümek ise gezi planlaması da bir zaman hassas bir konu (yani olur nasıl düşünebiliriz geri Gideceğiniz götüren metro yakalamak mümkün olacak, birkaç kenarları ileri çok daha hızlı sadece ileriye kenarları gezinmek için çalışması halinde daha en düşük fiyatı kullanarak).

"Büyük adamlar" verilerini geleneksel bir veritabanında saklamıyor, önceden hesaplanmış grafikleri kullanıyorlar (welcome hadoop / mapreduce kümeleri!). Tahmin edebileceğiniz gibi, bu grafikler gerçekten büyük olur, bu nedenle bitişik grafiklerin kenarlarının nasıl bağlanacağını bilmek zor olabilir.

Her neyse, bazı çok modlu yönlendirme grafik projelerine bakmanızı tavsiye ederim:

Graphserver akla geliyor. Çok fazla dokümantasyon değil, bir çok saf kodlama sıkıntısı (AFAIK, MapQuest'in bu yönlendirme ürünlerinin bir kısmı için bu projenin bir çeşitlemesini kullandığına inanıyorum).

Başka bir seçenek olacaktır OpenTripPlanner (graphserver insanları dahil) arkasında akıllı bir sürü insan vardır.


15

Daha yeni olup olmadığından emin değilim, ancak pgRouting bir Shooting-Star algoritmasına sahiptir :

Shooting-Star algoritması, pgRouting en kısa yol algoritmalarının en yenisidir. Özelliği, Dijkstra ve A-Star algoritmaları gibi vertex'ten vertex'e değil, linkten linke geçmesidir. Bu, örneğin linkler arasındaki ilişkileri tanımlamayı mümkün kılar ve aynı kaynak ve hedefe ama farklı maliyetlere sahip “paralel linkler” gibi diğer bazı köşe tabanlı algoritma sorunlarını çözer.

ESRI Ağ Analisti uzantısı, çözme sürelerini sınırlandırmak için bahsettiğiniz hiyerarşik yaklaşımı kullanır :

Ülke çapında bir ağ veri setinde en kısa yolu bulmak, aranması gereken çok sayıda kenar nedeniyle zaman alıcıdır. Performansı artırmak için, ağ veri setleri, eyaletler arası bir otoyolda sürüşün yerel yollarda sürüş yapmayı tercih ettiği bir ulaşım sisteminde doğal hiyerarşiyi modelleyebilir. Hiyerarşik bir ağ oluşturulduktan sonra, iki yönlü Dijkstra'nın bir modifikasyonu, bir başlangıç ​​noktası ile varış yeri arasındaki bir rota hesaplamak için kullanılır.

ESRI sitesinde bu yaklaşımla ilgili örneklerle çok ayrıntılı bir beyaz sayfa var - ancak indirmek için giriş yapmanız gerekiyor (ArcGIS Network Analyst White Paper'da Hiyerarşik Yollar).


11

Kasılma Hiyerarşisi çok hızlı bir algoritmadır:

Bir sorgu yürütürken bu algoritma RAM dostudur (sözleşmeli bir grafiğe sahip olmak için daha fazla RAM gerekli olduğu gibi büyük ön işleme)

Toplu taşıma yollarını çözenler dahil, başka algoritmalar da var:

Microsoft ayrıca bazı araştırmalar yapıyor:

(iyi, Daniel Delling de Karlsruhe'dan)

Mevcut algoritmalara güzel bir giriş ve genel bakış alabilirsiniz:

Uyarı: almanca (!) Dersleri. ama en azından başlıklar daha fazla bilgi edinmenize yardımcı olabilir (ALT, Arc-Flags, CHASE, ...) veya ekli literatür!

Güncelleme

GraphHopper şimdi büzülme hiyerarşileri ve başka algoritmalar da uyguluyor, ayrıca demoyu deneyebilirsiniz .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.