Wie erstellen Sie eine optimierte Wanderliste mit Längen- und Breitengradkoordinaten?


10

Ich arbeite an einer politischen Kampagne, in der Dutzende von Freiwilligen in den nächsten Wochen Türklopfen-Aktionen durchführen werden. Welche Algorithmen können bei einer Liste mit Namen, Adressen und Long / Lat-Koordinaten verwendet werden, um eine optimierte Wanderliste zu erstellen.


3
Crossposting scheint in schlechter Form zu sein. Warum ist das mit SQL gekennzeichnet?
Air

Lösen Sie das (ungefähre) Problem mit reisenden Verkäufern (TSP) ...
Debasis

Wie ist die Geografie jenseits von Lat-Long? Eine Gitterstadt? Ein fast baumförmiger Vorort mit kleineren Straßen in Sackgassen? Hat einen massiven Einfluss.
Spacedman

Antworten:


6

Wie Steve Kallestad gesagt hat, ist dies ein TSP-Problem, und es gibt wunderbare freie Löser, um ungefähre Lösungen zu finden.

Es ist möglicherweise zu viel Arbeit für das, wonach Sie suchen, aber Sie können versuchen, einen dieser Löser in Kombination mit der Google Maps-API zu verwenden, um echte Gehentfernungen zwischen Ihren Koordinaten zu finden: https://developers.google.com/maps / Dokumentation / Anweisungen / # AnweisungenRequests

(Ich habe diese API noch nie verwendet, daher weiß ich nicht, wie einfach oder effektiv sie sein würde.)


4

Die Leute sehen etwas, das eng mit dem Problem des Handlungsreisenden zusammenhängt, und denken, dass es nicht gelöst werden kann.

Zu diesem Thema wurde viel Arbeit geleistet, und nicht alle weisen darauf hin, dass keine Lösung verfügbar ist. Abhängig von den Parametern und der gewünschten Lösung können Sie möglicherweise etwas finden, das funktioniert.

Vielleicht möchten Sie einen Blick auf die OpenOpt- Python-Bibliothek werfen .

Eine weitere Ressource wäre der TSP-Solver und -Generator .

Wenn Sie R verwenden, ist ein TSP-Paket verfügbar .

Die Implementierung einer Lösung für Ihr Problem ist etwas zu viel, um sie hier zu behandeln, aber dies sollte einen guten Ausgangspunkt bieten. In diesen Paketen und in der Dokumentation unter den Links, die ich für Sie bereitgestellt habe, finden Sie eine ziemlich große Auswahl an algorithmischen Strategien. Sie haben eine kleine geografische Region und eine kleine Gruppe von "Verkäufern". Daher sollte die Rechenleistung, die zur Berechnung einer Strategie innerhalb eines angemessenen Zeitrahmens erforderlich ist, auf Ihrem Desktop verfügbar sein.

In der Praxis müssen Sie nicht die absolut optimale Strategie finden. Du brauchst nur einen sehr guten. Wählen Sie ein TSP-Paket, das am wenigsten überwältigend aussieht, und probieren Sie es aus.


Ich stimme Steve K zu, dass der Schlüssel zur Bewältigung dieses Problems darin besteht, annähernd optimale oder nur gute Routenstrategien anzustreben. Oft ist der Unterschied zwischen "am besten" und "gut genug" nicht groß.
MrMeritology

Natürlich kann das Optimum gefunden werden, es kann nur länger dauern als das Alter des Universums, um alle Möglichkeiten zu durchlaufen. Ihre Antwort erwähnt dies nicht.
Spacedman

2

Wie @SpacedMan in einem Kommentar festgestellt hat , wird das Straßenlayout einen massiven Einfluss auf die Optimierung der Wanderliste haben. Sie haben nur "Längen- und Breitengrad" in den Titel Ihrer Frage aufgenommen. Die Lösung dieses Problems führt jedoch nicht zu einer "Wanderliste", sondern zu einer "Luftlinie".

Wenn Sie Ihr Straßenlayout als Diagramm mit Kantengewichten betrachten, die Entfernungen beschreiben, und versuchen, die kürzeste Durchquerung zwischen allen erforderlichen Adressen zu finden, werden Sie Ihr Problem als "Problem mit dem kürzesten Weg " betrachten. Der Dijkstra-Algorithmus ist die bekannteste Lösung (es gibt andere); In seiner naiven Implementierung konvergiert es in O (n 2 ) , was akzeptabel sein kann, wenn Ihre Adresslisten mäßig groß sind. Andernfalls suchen Sie unter den obigen Links nach optimierten Versionen.

Da Bibliotheken und Ressourcen das Problem angehen sollen, möchte ich auf die Zusammenstellung von Routing-Solvern im Open Street Maps-Wiki und allgemein auf deren Framework- und Bibliotheksseite verweisen, da Sie keine Sprachen oder Plattformen angeben .


1

Hier ist eine verrückte Idee: Sprechen Sie mit den Freiwilligen, die die Nachbarschaften kennen und zuvor von Tür zu Tür gearbeitet haben. Holen Sie sich ihre Ratschläge und Ideen. Sie werden wahrscheinlich Erkenntnisse haben, die kein Algorithmus hervorbringen wird, und diese Änderungen werden für jede computergenerierte Routenliste wertvoll sein. Ein Beispiel: Vermeiden Sie es, stark befahrene Straßen mit langsamen oder gar keinen Lichtern zu überqueren. Ein weiteres Beispiel: Paare von Freiwilligen, die auf gegenüberliegenden Seiten derselben Straße arbeiten, fühlen sich sicherer als Freiwillige, die allein auf dieser Straße arbeiten.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.