Technote: OSRM vs Gosmore shootout

Abbiamo bisogno di un sacco di point-to-point percorsi per il nostro sistema di routing multi-arresto. Come usiamo Openstreetmap come fonte per questo, noi ';ve istituire un confronto tra due sistemi di routing OSM noti: Gosmore e OSRM.

Prima di tutto, abbiamo creato questo test per i nostri bisogni. E ';s non vuole essere rappresentativo di tutte le esigenze di routing in tutte le situazioni. I risultati e le conclusioni non hanno bisogno di essere valido per voi. Se si capisce questo e accetta, continua a leggere.

Perché: matrice di distanza

Per trovare il più veloce percorso con fermate multiple, abbiamo bisogno di sapere A-to-B durate di viaggio tra tutti i punti. Per visitare 4 destinazioni da una posizione di origine, abbiamo bisogno di rotta 5 x 4 = 20 gambe. Questa matrice distanza da percorrere cresce esponenzialmente. Con 40 destinazioni, esso ';s 41 x 40 = 1.640 gambe, con 80 destinazioni 6,480 gambe, e così via.

Così, quanto tempo il vostro introito di navigazione in-car per trovare il percorso verso una destinazione? Se ';s veloce, lo farà in un secondo. Che sembra veloce, ma con 1.000 gambe che ';s da 16 minuti. Noi don ';t vogliono i nostri utenti di attendere così a lungo. Dobbiamo essere pronti e in meno di quello, che comprende l'ottimizzazione sé.

Quindi, minimizziamo il numero di gambe che abbiamo effettivamente bisogno per il nostro ottimizzazione, vogliamo che il sistema di routing più veloce disponibile ed eseguire su più server dedicati.

Che Cosa: Router OSM

OpenstreetmapOpenstreetmap, la mappa gratuita del mondo, è la base che usiamo per i nostri più fermate modelli di ottimizzazione di routing. E ';s libero di utilizzare e l'intero pianeta è solo alcune decine di gigabyte da scaricare. E c'è un sacco di software libero che utilizzano OSM per il calcolo del percorso.

Prima, abbiamo scelto il rinomato Gosmore come il router per le sue buone prestazioni, la stabilità e la licenza generoso. E ';s programmato in C e funziona alla grande sulla nostra configurazione con server Linux dedicati. Ma il suo sviluppo non è troppo attivo e sembra più rivolto verso la navigazione autonoma per i dispositivi Android.

Recentemente, un'altra macchina instradamento noto OSRM cambiato licenza piuttosto restrittiva. In precedenza è stato sotto licenza AGPL. Dal mese di ottobre 2013 ';s reso disponibile sotto la molto permissiva (semplificato) Licenza BSD 2-clause. E ';s lo scopo di funzionare come un servizio, che sembra più adatto alle nostre esigenze. E ';s anche C e il suo sviluppo sembra più attivo.

Nota: ci sono molti di più router per Openstreetmap.

Come: setup per percorsi multipli

Abbiamo usato l'ultima Gosmore e OSRM, costruire dai sorgenti sulla stessa Intel i7 macchina 2.6 GHz con 8 GB di RAM, Ubuntu Linux Desktop 13.10. Gosmore è stato costruito senza testa (no GUI). Per entrambi i router abbiamo preparato le mappe dei Paesi Bassi, come descritto nella loro documentazione.

Uno script php è stato utilizzato come wrapper per chiamare entrambi i router. Cioè: OSRM viene utilizzato come servizio riposo e Gosmore come un comando di sistema pianura (exec con un limite CPU 1 secondo). Lo script genera gambe casuali, che sono costituiti da due posizioni casuali (anni, lng) in una zona fissa nei Paesi Bassi. Queste posizioni non possono essere indirizzi reali, possono anche essere nel bel mezzo di una foresta o di un lago. I nostri utenti fanno entrare tutti i tipi di luoghi che hanno bisogno di visitare per lavoro o per piacere, non necessariamente case o aziende soltanto.

Avevamo entrambi Gosmore e OSRM trovare il percorso per ogni gamba. Abbiamo controllato montone castrato è stato trovato un percorso, wether la durata di viaggio era valida e misurato il tempo trascorso per il calcolo. Abbiamo convalidato confrontando ciascuna della durata di un minimo stimato e valore massimo. Quelli sono state calcolate dalla distanza gamba in linea d'aria, il limite di velocità massima 130 chilometri all'ora (durata minima) e una velocità ambulante di 5 chilometri all'ora (durata massima).

I risultati dei test

Mentre una corsa dello script dovrebbe essere sufficiente, abbiamo corso tre volte. L'uscita:

Run # 1
 Totale gambe: 1000
 Totale OSRM tempo: 7.851sec, Gosmore: 170,296 sec
 Successo OSRM: 96,5%, Gosmore: 94,6%
 Troppo lento OSRM: 0%, Gosmore: 0%
 Troppo veloce OSRM: 0%, Gosmore: 0%
Run # 2
 Totale gambe: 1000
 Totale OSRM tempo: 7.941sec, Gosmore: 174,774 sec
 Successo OSRM: 96,8%, Gosmore: 94,7%
 Troppo lento OSRM: 0%, Gosmore: 0%
 Troppo veloce OSRM: 0%, Gosmore: 0%
Eseguire # 3
 Totale gambe: 1000
 Totale OSRM tempo: 7.785sec, Gosmore: 168,599 sec
 Successo OSRM: 95,5%, Gosmore: 94,9%
 Troppo lento OSRM: 0%, Gosmore: 0%
 Troppo veloce OSRM: 0%, Gosmore: 0%

Il vincitore: OSRM (più veloce, ma il grasso)

Entrambi i router hanno un alto tasso di successo. Vicino al 100% di tutte le gambe vengono instradate con successo. Quelle gambe che sono stati instradati, soddisfare tutti i controlli di validità. Ma OSRM è più veloce, molto più veloce. Si calcola i percorsi per 1.000 piedi in meno di 8 secondi, dove Gosmore richiede circa 2 minuti e 50 secondi.

Sulla base di questi risultati di prova, abbiamo un chiaro vincitore e OSRM sembra essere più adatto per il nostro lavoro. Ha la stessa qualità di Gosmore, ma è molto più veloce.

C'è un'osservazione essere fatta. Abbiamo eseguito questo test su un piuttosto piccola mappa dei Paesi Bassi. Finora, non siamo riusciti a ottenere OSRM a correre per tutto il pianeta, di cui abbiamo bisogno per il nostro servizio di routing pubblico. Gosmore servono dei percorsi di tutto il pianeta piuttosto piccolo, ed economico, ma server dedicati (attualmente: Amazon EC2 c3.large). Così, mentre OSRM è molto promettente, abbiamo bisogno di un altro sforzo per farlo funzionare per noi.