Как создать оптимизированный список прогулок с учетом координат долготы и широты?


10

Я работаю над политической кампанией, в которой десятки добровольцев будут проводить промоушены в течение следующих нескольких недель. Учитывая список с именами, адресами и координатами long / lat, какие алгоритмы можно использовать для создания оптимизированного списка прогулок.


3
Перекрестное размещение кажется в плохой форме. Почему это помеченный SQL?
эфир

Решить (приблизительную) задачу коммивояжера (TSP) ...
Debasis

Помимо лат-лонга, какова география? Город с сеткой? Почти пригород в форме дерева с небольшими дорогами в тупики? Имеет МАССИВНОЕ влияние.
Spacedman

Ответы:


6

Как сказал Стив Каллестад, это проблема TSP, и есть замечательные бесплатные решатели, чтобы найти приблизительные решения.

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

(Я никогда не использовал этот API, поэтому я не знаю, насколько простым или эффективным он будет)


4

Люди видят что-то тесно связанное с проблемой коммивояжера и думают, что ее нельзя решить.

По этой теме была проделана большая работа, и не все из них указывают на то, что решение недоступно. В зависимости от параметров и желаемого решения, вы сможете найти что-то, что будет работать.

Возможно, вы захотите взглянуть на библиотеку Python OpenOpt .

Еще один ресурс, на который стоит обратить внимание - это TSP Solver and Generator .

Если вы используете R, есть пакет TSP .

На самом деле реализация решения вашей проблемы здесь слишком сложна, но это должно послужить хорошей отправной точкой. В этих пакетах и ​​в документации по ссылкам, которые я вам предоставил, вы обнаружите, что существует довольно широкий спектр алгоритмических стратегий. У вас небольшой географический регион и небольшой набор «продавцов», поэтому вычислительные мощности, необходимые для расчета стратегии в разумные сроки, должны быть доступны на вашем рабочем столе.

В практическом плане вам не нужно находить абсолютно оптимальную стратегию. Вам просто нужен очень хороший. Выберите пакет TSP, который выглядит наименее подавляющим, и попробуйте.


Я согласен со Стивом К., что ключом к решению этой проблемы является стремление к приблизительно оптимальной или просто хорошей стратегии маршрута. Много раз разница между «лучшим» и «достаточно хорошим» невелика.
MrMeritology

Конечно, оптимум можно найти, может потребоваться больше времени, чем возраст вселенной, чтобы перебрать все возможности. Ваш ответ не упоминает об этом.
Spacedman

2

Как отметил @SpacedMan в комментарии , расположение улиц окажет огромное влияние на оптимизацию списка прогулок. Вы включили только "широту и долготу" в заголовок вашего вопроса; но решение этой проблемы приводит не к «списку прогулок», а к «списку мух».

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

Что касается библиотек и ресурсов для начала решения проблемы, так как вы не указываете языки или платформы, позвольте мне указать на компиляцию решателей маршрутизации в вики-сайте Open Street Maps и в целом на странице их фреймворков и библиотек .


1

Вот сумасшедшая идея: поговорите с волонтерами, которые знают окрестности и которые раньше выполняли работу «от двери до двери». Получите их советы и идеи. Вероятно, у них будет понимание того, что никакой алгоритм не будет создан, и эти изменения будут полезны для любого списка маршрутов, созданного компьютером. Один из примеров: избегать пересечения улиц с интенсивным движением при слабом освещении или без света. Другой пример: пары добровольцев, работающих на противоположных сторонах одной и той же улицы, будут чувствовать себя безопаснее, чем волонтер, работающий на этой улице в одиночку.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.