Я работаю над политической кампанией, в которой десятки добровольцев будут проводить промоушены в течение следующих нескольких недель. Учитывая список с именами, адресами и координатами long / lat, какие алгоритмы можно использовать для создания оптимизированного списка прогулок.
algorithms
McGovernTheory
источник
источник
Ответы:
Как сказал Стив Каллестад, это проблема TSP, и есть замечательные бесплатные решатели, чтобы найти приблизительные решения.
Это может быть слишком много работы для того, что вы ищете, но вы можете попробовать использовать один из этих решателей в сочетании с API Карт Google, чтобы найти реальные пешеходные расстояния между вашими координатами: https://developers.google.com/maps / документация / направления / # DirectionsRequests
(Я никогда не использовал этот API, поэтому я не знаю, насколько простым или эффективным он будет)
источник
Люди видят что-то тесно связанное с проблемой коммивояжера и думают, что ее нельзя решить.
По этой теме была проделана большая работа, и не все из них указывают на то, что решение недоступно. В зависимости от параметров и желаемого решения, вы сможете найти что-то, что будет работать.
Возможно, вы захотите взглянуть на библиотеку Python OpenOpt .
Еще один ресурс, на который стоит обратить внимание - это TSP Solver and Generator .
Если вы используете R, есть пакет TSP .
На самом деле реализация решения вашей проблемы здесь слишком сложна, но это должно послужить хорошей отправной точкой. В этих пакетах и в документации по ссылкам, которые я вам предоставил, вы обнаружите, что существует довольно широкий спектр алгоритмических стратегий. У вас небольшой географический регион и небольшой набор «продавцов», поэтому вычислительные мощности, необходимые для расчета стратегии в разумные сроки, должны быть доступны на вашем рабочем столе.
В практическом плане вам не нужно находить абсолютно оптимальную стратегию. Вам просто нужен очень хороший. Выберите пакет TSP, который выглядит наименее подавляющим, и попробуйте.
источник
Как отметил @SpacedMan в комментарии , расположение улиц окажет огромное влияние на оптимизацию списка прогулок. Вы включили только "широту и долготу" в заголовок вашего вопроса; но решение этой проблемы приводит не к «списку прогулок», а к «списку мух».
Если вы посмотрите на схему вашей улицы в виде графика, где граничные веса описывают расстояния, и попытаетесь найти кратчайший путь между всеми необходимыми адресами, то вы будете думать о своей проблеме как о « проблеме кратчайшего пути ». Алгоритм Дейкстры - самое известное решение (есть и другие); в своей наивной реализации он сходится в O (n 2 ) , что может быть приемлемо, если ваши списки адресов имеют умеренный размер. В противном случае ищите оптимизированные версии в приведенных выше ссылках.
Что касается библиотек и ресурсов для начала решения проблемы, так как вы не указываете языки или платформы, позвольте мне указать на компиляцию решателей маршрутизации в вики-сайте Open Street Maps и в целом на странице их фреймворков и библиотек .
источник
Вот сумасшедшая идея: поговорите с волонтерами, которые знают окрестности и которые раньше выполняли работу «от двери до двери». Получите их советы и идеи. Вероятно, у них будет понимание того, что никакой алгоритм не будет создан, и эти изменения будут полезны для любого списка маршрутов, созданного компьютером. Один из примеров: избегать пересечения улиц с интенсивным движением при слабом освещении или без света. Другой пример: пары добровольцев, работающих на противоположных сторонах одной и той же улицы, будут чувствовать себя безопаснее, чем волонтер, работающий на этой улице в одиночку.
источник