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.


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)


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.


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 .


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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.