Esistono algoritmi di routing più recenti (rispetto a Dijkstra, A *) nei database GIS?


46

Ci sono opere come Reach for A * di ricercatori Microsoft e Highway Hierarchies di Sanders e Schtolz (se scrivo correttamente il nome) di Karlsruhe Uni . Entrambi riducono molto l'ordine dei calcoli e accelerano migliaia di volte su grafici di grandi dimensioni (vedere i risultati nei documenti collegati). Quest'ultimo lavoro ha portato all'Open Source Routing Machine , che purtroppo non è abbastanza popolare e non adattato (non ho potuto compilarlo nonostante ci abbia provato duramente).

Allo stesso tempo, i dbs che ho provato, Spatialite e PgRouting, secondo i loro documenti, offrono solo algoritmi Dijkstra e A * . Non ho nemmeno visto la ricerca bidirezionale menzionata, che consente di risparmiare tempo di calcolo due volte nella mia esperienza.

Esistono algoritmi migliori per database o altre applicazioni?


1
Hai inviato la tua domanda agli elenchi di posta elettronica degli utenti o degli sviluppatori di pgRouting? Potresti ottenere una risposta migliore direttamente da quella community. Elenco utenti: ( lists.osgeo.org/mailman/listinfo/pgrouting-users ) Elenco sviluppatori: ( lists.osgeo.org/mailman/listinfo/pgrouting-dev )
RyanDalton

+1 Ottima domanda. Mi chiedo quale algoritmo utilizza Google per ottenere indicazioni stradali . Domanda correlata qui .
Kirk Kuykendall,

1
Poiché Google ha supportato il team di Karlsruhe ( algo2.iti.uni-karlsruhe.de/english/index.php ) suppongo che utilizzino il loro software, che è essenzialmente una macchina di routing open source.
culebrón,

Risposte:


23

La verità è che molte persone usano una variazione personalizzata dell'algoritmo A * . Lo vedrai nella maggior parte dei "grandi" (non posso dire chi siano in un forum pubblico, ma posso dirti che probabilmente ne usi uno - garantito), dove la modifica dell'euristica è molto dipendente dai set di dati che usano.

Hai già citato il pgrouting , che considererei un'opzione "tradizionale". È utile per eseguire semplici algoritmi di routing e per la maggior parte dei problemi. È anche facile da usare e utilizza un database tradizionale nel suo backend.

Tuttavia, dipende davvero dalla scala e dal tipo di problema che si sta tentando di risolvere e il routing è un problema grafico .

Ancora una volta, i "big guy" di solito hanno molti dati associati al loro grafico (ad esempio dati sul traffico, linee di autobus, percorsi pedonali) che influiscono sull'algoritmo di routing. Questi sono noti come pianificatori di viaggio multimodali (dove è anche possibile scegliere una "modalità" di pianificazione - nessuna pista ciclabile - solo mezzi pubblici - quel tipo di cose). Puoi pensare a come la pianificazione del viaggio diventi anche un problema sensibile al tempo (ad esempio se torni indietro di alcuni bordi indietro, sarai in grado di prendere la metropolitana che ti porta a destinazione in avanti molto più velocemente rispetto a se avessi appena provato a spostarti in avanti utilizzando il costo più basso).

I "big guy" non memorizzano i loro dati in un database tradizionale di per sé, usano grafici precalcolati (benvenuti cluster hadoop / mapreduce!). Come puoi immaginare, questi grafici diventano davvero grandi, quindi sapere come collegare i bordi dei grafici adiacenti può essere una sfida.

Ad ogni modo, ti consiglio di dare un'occhiata ad alcuni progetti di grafici di routing multimodali:

Graphserver mi viene in mente. Non molta documentazione ma tanta bellezza di codifica pura (AFAIK, credo che MapQuest utilizzi una variante di questo progetto per alcuni dei loro prodotti di routing).

Un'altra opzione sarebbe OpenTripPlanner che ha molte persone intelligenti (comprese le persone di Graphserver).


15

Non sono sicuro se è più recente ma pgRouting ha un algoritmo Shooting-Star :

L'algoritmo Shooting-Star è l'ultimo degli algoritmi del percorso più breve di pgRouting. La sua specialità è che instrada da collegamento a collegamento, non da vertice a vertice come fanno gli algoritmi Dijkstra e A-Star. Ciò consente, ad esempio, di definire le relazioni tra i collegamenti e risolve alcuni altri problemi dell'algoritmo basato sui vertici come i "collegamenti paralleli", che hanno la stessa fonte e destinazione ma costi diversi.

L'estensione Analista di rete di ESRI utilizza l' approccio gerarchico menzionato per limitare i tempi di risoluzione:

Trovare il percorso più breve esatto su un set di dati di rete nazionale richiede molto tempo a causa dell'elevato numero di fronti che devono essere cercati. Per migliorare le prestazioni, i set di dati di rete possono modellare la gerarchia naturale in un sistema di trasporto in cui la guida su un'autostrada interstatale è preferibile alla guida su strade locali. Una volta creata una rete gerarchica, viene utilizzata una modifica del Dijkstra bidirezionale per calcolare un percorso tra un'origine e una destinazione.

Esiste un white paper molto dettagliato con esempi di questo approccio nel sito ESRI, tuttavia è necessario eseguire l'accesso per il download (White paper degli analisti di reti in ArcGIS).


11

La gerarchia della contrazione è un algoritmo molto veloce:

Questo algoritmo è compatibile con la RAM durante l'esecuzione di una query (per contenere un grafico contratto è necessaria un po 'più di RAM, oltre a una massiccia preelaborazione)

Esistono altri algoritmi, inclusi quelli che risolvono il routing del trasporto pubblico:

Microsoft sta anche facendo alcune ricerche:

(beh, Daniel Delling è anche di Karlsruhe)

È possibile ottenere una buona introduzione e una panoramica degli algoritmi disponibili:

Attenzione: lezioni di tedesco (!). ma almeno le intestazioni possono aiutarti a ottenere maggiori informazioni (ALT, Bandiere ad arco, CHASE, ...) o la letteratura allegata!

aggiornare

GraphHopper ora implementa le gerarchie di contrazioni e anche altri algoritmi, puoi anche provare la demo .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.