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.
algorithms
McGovernTheory
fonte
fonte
Respostas:
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)
fonte
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.
fonte
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 .
fonte
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.
fonte