Digamos que vamos de 1 a 5. O caminho mais curto será 1-4-3-5 (total: 60 km).
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?
Respostas:
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.
fonte
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.
fonte
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.
fonte
Você deve poder substituir sua distância pelo tempo entre os nós e resolvê-lo da mesma maneira.
fonte
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:
fonte