¿Cómo se crea una lista de caminata optimizada dadas las coordenadas de longitud y latitud?

10

Estoy trabajando en una campaña política en la que docenas de voluntarios llevarán a cabo promociones en las próximas semanas. Dada una lista con nombres, direcciones y coordenadas largas / largas, qué algoritmos se pueden usar para crear una lista de paseo optimizada.

McGovernTheory
fuente
3
La publicación cruzada parece estar en mal estado. ¿Por qué se etiqueta SQL?
Aire
Resolver el problema (aproximado) del vendedor ambulante (TSP) ...
Debasis
Más allá de lat-long, ¿cómo es la geografía? ¿Una ciudad cuadriculada? ¿Un suburbio casi en forma de árbol con caminos más pequeños en callejones sin salida? Tiene una influencia MASIVA.
Spacedman 01 de

Respuestas:

6

Como ha dicho Steve Kallestad, este es un problema de TSP, y hay excelentes solucionadores gratuitos para encontrar soluciones aproximadas.

Puede ser demasiado trabajo para lo que está buscando, pero puede intentar usar uno de esos solucionadores en combinación con la API de Google Maps, para encontrar distancias reales de caminata entre sus coordenadas: https://developers.google.com/maps / documentación / indicaciones / # DirectionsRequests

(Nunca he usado esta API, así que no sé lo fácil o efectivo que sería)

Juan Ignacio Gil
fuente
4

La gente ve algo estrechamente relacionado con el problema del vendedor ambulante y piensan que no se puede resolver.

Se ha realizado una gran cantidad de trabajo sobre este tema y no todo indica que no hay una solución disponible. Dependiendo de los parámetros y la solución deseada, es posible que pueda encontrar algo que funcione.

Es posible que desee echar un vistazo a OpenOpt biblioteca Python de .

Otro recurso a considerar sería el TSP Solver and Generator .

Si está utilizando R, hay un paquete TSP disponible .

En realidad, implementar una solución a su problema es demasiado para cubrir aquí, pero esto debería proporcionar un buen punto de partida. Dentro de estos paquetes y en la documentación dentro de los enlaces que le proporcioné, encontrará que hay una gran variedad de estrategias algorítmicas disponibles. Tiene una pequeña región geográfica y un pequeño conjunto de "vendedores", por lo que la potencia computacional necesaria para calcular una estrategia dentro de un plazo razonable debe estar disponible en su escritorio.

En términos prácticos, no necesita encontrar la estrategia más óptima. Solo necesitas uno muy bueno. Elija un paquete TSP que se vea menos abrumador y pruébelo.

Steve Kallestad
fuente
Estoy de acuerdo con Steve K en que la clave para abordar esto es apuntar a estrategias de ruta aproximadamente óptimas o simplemente buenas. Muchas veces la diferencia entre "mejor" y "suficientemente bueno" no es mucha.
MrMeritology
Por supuesto, se puede encontrar el óptimo, podría llevar más tiempo que la edad del universo iterar sobre todas las posibilidades. Su respuesta no menciona esto.
Spacedman 01 de
2

Como @SpacedMan ha notado en un comentario , el diseño de la calle tendrá una influencia masiva en la optimización de la lista de caminatas. Solo ha incluido "latitud y longitud" en el título de su pregunta; pero resolver ese problema no conduce a una "lista de caminata", sino a una "lista de los que vuelan".

Mirar el diseño de su calle como un gráfico, con pesos de borde que describen distancias, y tratar de encontrar el recorrido más corto entre todas las direcciones requeridas, lo llevará a pensar en su problema como un " problema de ruta más corta ". El algoritmo de Dijkstra es la solución más conocida (hay otras); en su ingenua implementación, converge en O (n 2 ) , que puede ser aceptable si sus listas de direcciones son de tamaño moderado. De lo contrario, busque versiones optimizadas en los enlaces anteriores.

En cuanto a las bibliotecas y los recursos para comenzar a abordar el problema, dado que no especifica idiomas o plataformas, permítanme señalar la compilación de solucionadores de enrutamiento en la wiki de Open Street Maps y, en general, sus marcos y página de bibliotecas .

logc
fuente
1

Aquí hay una idea loca: hable con los voluntarios que conocen los vecindarios y que han trabajado antes de puerta en puerta. Obtenga sus consejos e ideas. Probablemente tendrán ideas que ningún algoritmo producirá, y esas modificaciones serán valiosas para cualquier lista de rutas generada por computadora. Un ejemplo: evitar cruzar calles muy transitadas con luces lentas o sin luces. Otro ejemplo: los pares de voluntarios que trabajan en lados opuestos de la misma calle se sentirán más seguros que un voluntario que trabaje solo en esa calle.

MrMeritology
fuente