Como você cria uma lista de caminhada otimizada, dadas as coordenadas de longitude e latitude?

10

Estou trabalhando em uma campanha política na qual dezenas de voluntários farão promoções batendo nas portas nas próximas semanas. Dada uma lista com nomes, endereços e coordenadas longas / latinas, quais algoritmos podem ser usados ​​para criar uma lista de caminhada otimizada.

McGovernTheory
fonte
3
A postagem cruzada parece estar em má forma. Por que isso está marcado com SQL?
Air
Resolver o (aproximado) problema do caixeiro viajante (TSP) ...
Debasis
Além da latitude, como é a geografia? Uma cidade cercada? Um subúrbio quase em forma de árvore com estradas menores que levam a becos sem saída? Tem uma influência maciça.
#

Respostas:

6

Como Steve Kallestad disse, este é um problema de TSP, e existem ótimos solucionadores gratuitos para encontrar soluções aproximadas.

Pode ser muito trabalhoso para o que você está procurando, mas você pode tentar usar um desses solucionadores em combinação com a API do Google Maps, para encontrar distâncias reais a pé entre suas coordenadas: https://developers.google.com/maps / documentation / directions / # DirectionsRequests

(Eu nunca usei essa API, então não sei quão fácil ou eficaz seria)

Juan Ignacio Gil
fonte
4

As pessoas veem algo relacionado ao Problema do Vendedor Viajante e pensam que ele não pode ser resolvido.

Muito trabalho foi realizado sobre esse tópico e nem tudo indica que uma solução não está disponível. Dependendo dos parâmetros e da solução desejada, você poderá encontrar algo que funcione.

Você pode dar uma olhada na biblioteca python do OpenOpt .

Outro recurso a ser analisado seria o TSP Solver and Generator .

Se você estiver usando R, há um pacote TSP disponível .

A implementação de uma solução para o seu problema é um pouco demais para ser abordada aqui, mas isso deve fornecer um bom ponto de partida. Dentro desses pacotes e na documentação dos links que forneci para você, você encontrará uma variedade bastante ampla de estratégias algorítmicas disponíveis. Você tem uma pequena região geográfica e um pequeno conjunto de "vendedores"; portanto, o poder computacional necessário para calcular uma estratégia dentro de um prazo razoável deve estar disponível na sua área de trabalho.

Em termos práticos, você não precisa encontrar a estratégia absolutamente ideal. Você só precisa de um muito bom. Escolha um pacote TSP que pareça menos impressionante e experimente.

Steve Kallestad
fonte
Concordo com Steve K que a chave para lidar com isso é procurar estratégias de rota aproximadamente ótimas ou apenas boas. Muitas vezes a diferença entre "melhor" e "bom o suficiente" não é grande.
MrMeritology
É claro que o melhor pode ser encontrado, pode levar mais tempo que a idade do universo para percorrer todas as possibilidades. Sua resposta não menciona isso.
#
2

Como o @SpacedMan observou em um comentário , o layout da rua terá uma influência enorme na otimização da lista de caminhada. Você incluiu apenas "latitude e longitude" no título da sua pergunta; mas resolver esse problema não leva a uma "lista de caminhada", mas a uma "lista do tipo" mosca-do-corvo ".

Olhar para o seu layout de rua como um gráfico, com pesos das arestas descrevendo as distâncias e tentando encontrar a menor distância entre todos os endereços necessários, levará você a pensar no seu problema como um " Problema de caminho mais curto ". O algoritmo de Dijkstra é a solução mais conhecida (existem outras); em sua implementação ingênua, converge em O (n 2 ) , o que pode ser aceitável se suas listas de endereços forem de tamanho moderado. Caso contrário, procure versões otimizadas nos links acima.

Quanto às bibliotecas e recursos para começar a resolver o problema, como você não especifica idiomas ou plataformas, deixe-me apontar para a compilação de solucionadores de roteamento no wiki do Open Street Maps e, em geral, na página de estruturas e bibliotecas .

logc
fonte
1

Aqui está uma idéia maluca: converse com os voluntários que conhecem os bairros e que já fizeram trabalho de porta em porta antes. Obtenha seus conselhos e idéias. Eles provavelmente terão idéias que nenhum algoritmo produzirá e essas modificações serão valiosas para qualquer lista de rotas gerada por computador. Um exemplo: Evitar atravessar ruas muito movimentadas com luzes lentas ou sem luzes. Outro exemplo: pares de voluntários que trabalham em lados opostos da mesma rua se sentirão mais seguros do que um voluntário que trabalha nessa rua sozinho.

MrMeritology
fonte