Algoritmo para determinar la ruta más rápida?


17

Digamos que vamos del 1 al 5. La ruta más corta será 1-4-3-5 (total: 60 km).

Grafico

Podemos usar el algoritmo de Dijkstra para hacer eso.

Ahora el problema es que la ruta más corta no siempre es la más rápida debido a los atascos de tráfico u otros factores.

Por ejemplo:

  • Se sabe que 1-2 tiene atascos frecuentes, por lo que debe evitarse.
  • De repente, se produce un accidente automovilístico a lo largo de 4-3, por lo que también debe evitarse.
  • Etc ...

Entonces, probablemente podamos acelerar en la ruta 1-4-5, debido a que no hay atascos / accidentes, por lo que llegaremos a 5 más rápido.

Bueno, esa es la idea general, y aún no he pensado en más detalles.

¿Hay algún algoritmo para resolver este problema?


3
¿Es esta tarea? ¿No es esto solo en.wikipedia.org/wiki/Travelling_salesman_problem para atravesar un gráfico ponderado?
StuperUser

9
@StuperUser: No, TSP es un circuito de todos los nodos sin duplicados. En el caso de muestra, no es necesario golpear el nodo 2, por ejemplo.
David Thornley

2
@DavidThornley ya veo. Entonces, ¿Dijkstra es la ruta más corta en un gráfico ponderado? ¿Y TSP es transversal visitando cada nodo?
StuperUser

1
@Stuper: El recorrido más corto, sí
BlueRaja - Danny Pflughoeft

2
@StuperUser, solo para su información, TSP es un problema fuertemente NP-completo sin solución que pueda ejecutarse en tiempo polinómico. ... Entonces ya lo sabes.
Riwalk

Respuestas:



49

Sí: Dijkstra

Dijkstra funciona igual de bien para esta situación.
Simplemente usa el tiempo en lugar de la distancia como el peso de cada arco.


9
Por lo general, la 'distancia' en Dijkstra se ponderaría para todo tipo de cosas, costo / peajes, preferencia de autopista, límites de velocidad: usar solo la distancia es solo el enfoque más simple. Esto es lo que hace que el algoritmo sea tan inteligente
Martin Beckett

66
Aunque Dijsktra lo hará, generalmente elegiría A * para cualquier trabajo serio de búsqueda de caminos; La heurística ayudará mucho.
Mircea Chirea

66
Enlace: A * algoritmo de búsqueda . Es una extensión del método de Dijkstra.
mgkrebbs

Mientras haya una heurística aplicable, A * será superior a la de Dijkstra (en términos de rendimiento).
bummzack

Una heurística admisible sería algo difícil de encontrar aquí teniendo en cuenta que parece que tenemos en cuenta muchos factores (como los atascos de tráfico).
pwny

16

Si. El algoritmo de Dijkstra resolverá este problema.

El problema en su caso es que automáticamente asume que la ruta más corta equivale a la distancia recorrida, cuando en realidad equivale más apropiadamente al COSTO de tomar una ruta.

Si una ruta tiene un obstáculo, su COSTE debería ser mayor, y el algoritmo aún se aplica.


Sí, lo siento si no usé la redacción correcta. Lo que quiero decir es la 'ruta más conveniente' (costo mínimo más
grande

11

Debería poder reemplazar su distancia con el tiempo entre nodos y resolverla de la misma manera.


10

Dijkstra

Como se dijo antes, no solo se usa para la distancia más corta. Creo que esta animación da una buena comprensión del "poder" (a falta de una palabra mejor) de Dijkstra:

Dijkstra

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.