Come si crea un elenco di camminate ottimizzato in base alle coordinate di longitudine e latitudine?


10

Sto lavorando a una campagna politica in cui dozzine di volontari terranno promozioni per bussare alle porte nelle prossime settimane. Dato un elenco con nomi, indirizzi e coordinate long / lat, quali algoritmi possono essere usati per creare un walk list ottimizzato.


3
Il cross posting sembra in cattive condizioni. Perché questo è taggato SQL?
Air

Risolvi il problema (approssimativo) del commesso viaggiatore (TSP) ...
Debasis,

Al di là del lat-long, com'è la geografia? Una città a griglia? Un sobborgo quasi a forma di albero con strade più piccole in vicoli ciechi? Ha un'influenza MASSIVA.
Spacedman

Risposte:


6

Come ha detto Steve Kallestad, questo è un problema TSP e ci sono meravigliosi solutori gratuiti per trovare soluzioni approssimative.

Potrebbe essere troppo lavoro per quello che stai cercando, ma potresti provare a utilizzare uno di quei solutori in combinazione con l'API di Google Maps, per trovare distanze reali a piedi tra le tue coordinate: https://developers.google.com/maps / documentazione / indicazioni / # DirectionsRequests

(Non ho mai usato questa API, quindi non so quanto sarebbe facile o efficace)


4

Le persone vedono qualcosa di strettamente legato al Problema del commesso viaggiatore e pensano che non possa essere risolto.

Su questo argomento è stato svolto molto lavoro e non tutto indica che non è disponibile una soluzione. A seconda dei parametri e della soluzione desiderata, potresti essere in grado di trovare qualcosa che funzioni.

Potresti dare un'occhiata alla libreria Python di OpenOpt .

Un'altra risorsa da guardare sarebbe il Risolutore e Generatore TSP .

Se si utilizza R, è disponibile un pacchetto TSP .

In realtà implementare una soluzione al tuo problema è un po 'troppo da trattare qui, ma questo dovrebbe fornire un buon punto di partenza. All'interno di questi pacchetti e nella documentazione all'interno dei collegamenti che ti ho fornito, troverai che esiste una varietà abbastanza ampia di strategie algoritmiche disponibili. Hai una piccola area geografica e una piccola serie di "venditori", quindi la potenza computazionale necessaria per calcolare una strategia in un lasso di tempo ragionevole dovrebbe essere disponibile sul tuo desktop.

In termini pratici, non è necessario trovare la strategia assolutamente ottimale. Ne hai solo bisogno. Scegli un pacchetto TSP che sembra il meno schiacciante e provalo.


Concordo con Steve K sul fatto che la chiave per affrontare questo problema è puntare su strategie di percorso approssimativamente ottimali o semplicemente buone. Molte volte la differenza tra "migliore" e "abbastanza buono" non è molto.
MrMeritology il

Naturalmente si può trovare l'ottimale, potrebbe volerci più tempo dell'età dell'universo per scorrere su tutte le possibilità. La tua risposta non menziona questo.
Spacedman

2

Come ha notato @SpacedMan in un commento , il layout della strada avrà un'enorme influenza sull'ottimizzazione della walk list. Hai incluso solo "latitudine e longitudine" nel titolo della domanda; ma risolvere questo problema non porta a una "lista dei passi", ma a una "lista delle mosche".

Osservando il layout della tua strada come un grafico, con i pesi dei bordi che descrivono le distanze e cercando di trovare la traversata più breve tra tutti gli indirizzi richiesti, ti porterà a pensare al tuo problema come a " Problema di percorso più breve ". L'algoritmo di Dijkstra è la soluzione più conosciuta (ce ne sono altre); nella sua ingenua implementazione converge in O (n 2 ) , il che può essere accettabile se le tue liste di indirizzi sono di dimensioni moderate. Altrimenti, cerca le versioni ottimizzate nei link sopra.

Per quanto riguarda le biblioteche e le risorse per iniziare ad affrontare il problema, dal momento che non si specificano lingue o piattaforme, vorrei indicare la compilazione di solutori di routing nella wiki di Open Street Maps e in generale la loro pagina di framework e librerie .


1

Ecco un'idea folle: parla con i volontari che conoscono i quartieri e che hanno già svolto lavori porta a porta. Ottieni consigli e idee. Probabilmente avranno intuizioni che nessun algoritmo produrrà e tali modifiche saranno utili per qualsiasi elenco di rotte generato dal computer. Un esempio: evitare di attraversare strade molto trafficate con luci lente o senza luci. Un altro esempio: coppie di volontari che lavorano su lati opposti della stessa strada si sentiranno più sicuri di un volontario che lavora da solo in quella strada.

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.