Algoritmo para determinar a rota mais rápida?


17

Digamos que vamos de 1 a 5. O caminho mais curto será 1-4-3-5 (total: 60 km).

Gráfico

Podemos usar o algoritmo de Dijkstra para fazer isso.

Agora, o problema é que a rota mais curta nem sempre é a mais rápida, devido a congestionamentos ou outros fatores.

Por exemplo:

  • Sabe-se que o 1-2 tem congestionamentos frequentes, por isso deve ser evitado.
  • De repente, um acidente de carro acontece ao longo de 4-3, por isso deve ser evitado também.
  • Etc ...

Então, provavelmente, podemos acelerar na rota 1-4-5, por causa de nenhum engarrafamento / acidente, por isso chegamos às 5 mais rapidamente.

Bem, essa é a ideia geral, e ainda não pensei em mais detalhes.

Existe algum algoritmo para resolver esse problema?


3
Isso é lição de casa? Isso não é apenas en.wikipedia.org/wiki/Travelling_salesman_problem para percorrer um gráfico ponderado?
StuperUser

9
@StuperUser: Não, o TSP é um circuito de todos os nós sem duplicatas. No caso de amostra, não há necessidade de acessar o nó 2, por exemplo.
David Thornley

2
@DavidThornley eu vejo. Então Dijkstra é a rota mais curta em um gráfico ponderado? E o TSP é transversal visitando todos os nós?
StuperUser

1
@Stuper: Travessia mais curta, sim
BlueRaja - Danny Pflughoeft

2
@StuperUser, apenas FYI, TSP é um problema fortemente NP-Complete, sem solução que possa ser executada em tempo polinomial. ... Então agora você sabe.
riwalk

Respostas:


5

Como você trouxe congestionamento para a foto, tenha cuidado para não ser pego pelo paradoxo de Braess . Se todos escolherem o caminho ideal, isso resultará em um tempo de viagem pior para todos.


49

Sim: Dijkstra

Dijkstra funciona tão bem quanto nesta situação.
Você apenas usa o tempo, e não a distância, como o peso de cada arco.


9
Normalmente, a 'distância' em Dijkstra seria ponderada para todos os tipos de coisas, custo / pedágio, preferência por rodovias e limites de velocidade - usar apenas a distância é apenas a abordagem mais simples. Isto é o que torna o algoritmo tão inteligente #
Martin Beckett

6
Embora Dijsktra funcione, eu geralmente escolheria A * para qualquer trabalho sério de busca de caminhos; heurísticas ajudará muito.
Mircea Chirea

6
Link: um algoritmo de busca * . É uma extensão do método de Dijkstra.
mgkrebbs

Enquanto houver uma heurística aplicável, A * será superior à de Dijkstra (em termos de desempenho).
bummzack

Uma heurística admissível seria um pouco difícil de encontrar aqui, considerando que parecemos levar em consideração muitos fatores (como engarrafamentos).
pwny

16

Sim. O algoritmo de Dijkstra resolverá esse problema.

O problema no seu caso é que você assume automaticamente que o caminho mais curto equivale à distância percorrida, quando na verdade equivale mais apropriadamente ao CUSTO de fazer uma rota.

Se um caminho possui um roadblock, seu COST deve ser maior e o algoritmo ainda se aplica.


Sim, desculpe se eu não usei as palavras corretas. O que quero dizer é a 'rota mais conveniente' (custo mínimo)
anta40 20/12/2011

11

Você deve poder substituir sua distância pelo tempo entre os nós e resolvê-lo da mesma maneira.


10

Dijkstra

Como dito anteriormente, ele não é usado apenas para a menor distância. Eu acredito que esta animação oferece uma boa compreensão do "poder" (por falta de uma palavra melhor) do Dijkstra:

Dijkstra

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.