Як створити оптимізований список прогулянок з урахуванням координат довготи та широти?


10

Я працюю над політичною кампанією, де десятки добровольців будуть проводити акції, що стукають дверима, протягом наступних кількох тижнів. Дано список із іменами, адресами та довгими / латинськими координатами, які алгоритми можна використовувати для створення оптимізованого списку прогулянок.


3
Перехресне опублікування здається поганим. Чому це позначений SQL?
Повітря

Вирішіть (приблизну) проблему продавця подорожей (TSP) ...
Debasis

Крім лат-long, що таке географія? Сітчасте місто? Майже деревоподібне передмістя з меншими дорогами в культові саки? Має МАСИВНИЙ вплив.
Spacedman

Відповіді:


6

Як сказав Стів Каллестад, це проблема TSP, і є прекрасні безкоштовні вирішувачі, щоб знайти приблизні рішення.

Можливо, буде надто багато роботи для того, що ви шукаєте, але ви можете спробувати скористатись одним із цих вирішувачів у поєднанні з API Карт Google, щоб знайти реальні відстані пішки між вашими координатами: https://developers.google.com/maps / документація / вказівки / # Вказівки Запити

(Я ніколи не використовував цей API, тому не знаю, наскільки це було б просто чи ефективно)


4

Люди бачать щось, тісно пов’язане з проблемою продавця подорожей, і думають, що її неможливо вирішити.

Проведено велику роботу над цією темою, і не все це вказує на відсутність рішення. Залежно від параметрів та потрібного рішення, можливо, ви зможете знайти щось, що спрацює.

Ви можете ознайомитись з бібліотекою пітонів OpenOpt .

Ще одним ресурсом, на який слід звернути увагу, були б TSP Solver and Generator .

Якщо ви використовуєте R, доступний пакет TSP .

Насправді реалізація вирішення вашої проблеми є тут занадто багато, щоб висвітлити тут, але це повинно стати гарною відправною точкою. У цих пакунках та в документації у посиланнях, які я надав вам, ви побачите, що існує досить широкий спектр алгоритмічних стратегій. У вас невеликий географічний регіон та невеликий набір "продавців", тому обчислювальна потужність, необхідна для обчислення стратегії у розумні часові рамки, повинна бути доступною на вашому робочому столі.

На практиці не потрібно знаходити абсолютно найоптимальнішу стратегію. Вам просто потрібен дуже хороший. Виберіть пакет TSP, який виглядає найменш переважним, і дайте йому піти.


Я погоджуюсь зі Стівом К, що головне для вирішення цього питання - орієнтація на приблизно оптимальні або просто хороші стратегії маршруту. Багато разів різниця між "найкращим" і "досить добрим" не велика.
MrMeritology

Звичайно, оптимум можна знайти, це може просто зайняти більше часу, ніж вік Всесвіту, щоб переглянути всі можливості. Ваша відповідь про це не згадує.
Spacedman

2

Як зазначив @SpacedMan у коментарі , планування вулиці матиме величезний вплив на оптимізацію списку прогулянок. Ви вказали лише "широту та довготу" у назві запитання; але вирішення цієї проблеми призводить не до "списку прогулянок", а до "списку ворогів".

Дивлячись на ваш графік вулиці як на графік, з вагами краю, що описують відстані, і намагається знайти найкоротший проїзд між усіма необхідними адресами, змусить вас думати про свою проблему як про " найкоротшу проблему шляху ". Алгоритм Дейкстри - найвідоміше рішення (є й інші); у своїй наївній реалізації він перетворюється на O (n 2 ) , що може бути прийнятним, якщо ваші списки адрес мають помірний розмір. В іншому випадку шукайте оптимізовані версії за вищезазначеними посиланнями.

Що стосується бібліотек та ресурсів, щоб почати вирішувати проблему, оскільки ви не вказуєте мови та платформи, дозвольте мені вказати на компіляцію розв'язувачів маршрутизації у вікі Open Open Maps та загалом на їхній рамці та бібліотеці .


1

Ось божевільна ідея: поговоріть з волонтерами, які знають околиці та які раніше виконували роботу «від дверей до дверей». Отримайте їхні поради та ідеї. Вони, мабуть, матимуть уявлення про те, що жоден алгоритм не виробляє, і ці модифікації будуть цінні для будь-якого створеного комп'ютером списку маршрутів. Один із прикладів: уникати перетину вулиць, що проїжджають з великою кількістю повільних вогнів або без вогнів. Інший приклад: пари добровольців, які працюють на протилежних сторонах однієї вулиці, почуватимуться безпечніше, ніж волонтер, який працює лише цією вулицею.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.