Algoritmo per determinare il percorso più veloce?


17

Supponiamo di andare da 1 a 5. Il percorso più breve sarà 1-4-3-5 (totale: 60 km).

Grafico

Possiamo usare l'algoritmo di Dijkstra per farlo.

Ora il problema è che il percorso più breve non è sempre il più veloce, a causa di ingorghi o altri fattori.

Per esempio:

  • 1-2 è noto per avere frequenti ingorghi, quindi dovrebbe essere evitato.
  • Improvvisamente si verifica un incidente d'auto lungo 4-3, quindi dovrebbe essere evitato anche.
  • Eccetera...

Quindi probabilmente possiamo accelerare sul percorso 1-4-5, a causa di ingorghi / incidenti, quindi arriveremo a 5 più velocemente.

Bene, questa è l'idea generale, e non ho ancora pensato a maggiori dettagli.

Esiste un algoritmo per risolvere questo problema?


3
Sono compiti a casa? Non è solo en.wikipedia.org/wiki/Travelling_salesman_problem per attraversare un grafico ponderato?
StuperUser,

9
@StuperUser: No, TSP è un circuito di tutti i nodi senza duplicati. Nel caso di esempio, non è necessario colpire il nodo 2, ad esempio.
David Thornley,

2
@DavidThornley Capisco. Quindi Dijkstra è il percorso più breve su un grafico ponderato? E TSP sta attraversando visitando ogni nodo?
StuperUser,

1
@Stuper: traversal più corto, sì
BlueRaja - Danny Pflughoeft

2
@StuperUser, solo FYI, TSP è un problema fortemente NP-completo senza soluzione che può essere eseguita in tempo polinomiale. ... Quindi adesso lo sai.
riwalk

Risposte:


5

Dato che hai portato la congestione nella foto, fai attenzione a non farti catturare dal paradosso di Braess . Se tutti scelgono il percorso ottimale, si traduce in tempi di viaggio peggiori per tutti.


49

Sì: Dijkstra

Dijkstra funziona altrettanto bene per questa situazione.
Basta usare il tempo anziché la distanza come il peso di ciascun arco.


9
In genere la "distanza" in Dijkstra sarebbe ponderata per ogni genere di cose, costi / pedaggi, preferenza dell'autostrada senza pedaggio, limiti di velocità - usare solo la distanza è solo l'approccio più semplice di niave. Questo è ciò che rende l'algoritmo così intelligente
Martin Beckett il

6
Anche se Dijsktra lo farà, generalmente sceglierei A * per qualsiasi serio lavoro di ricerca di percorsi; l'euristica aiuterà molto.
Mircea Chirea,

6
Link: un algoritmo di ricerca * . È un'estensione del metodo di Dijkstra.
mgkrebbs,

Finché esiste un'euristica applicabile, A * sarà superiore a quello di Dijkstra (in termini di prestazioni).
Bummzack,

Un euristico ammissibile sarebbe alquanto stimolante da trovare qui, considerando che sembriamo prendere in considerazione molti fattori (come gli ingorghi).
pwny

16

Sì. L'algoritmo di Dijkstra risolverà questo problema.

Il problema nel tuo caso è che tu presumi automaticamente che il percorso più breve equivale alla distanza percorsa, mentre in realtà equivale in modo più appropriato al COSTO di prendere un percorso.

Se un percorso ha un roadblock, il suo COST dovrebbe essere più elevato e l'algoritmo si applica comunque.


Sì scusa se non ho usato la parola giusta. Quello che intendo è il "percorso più conveniente" (il costo minimo)
anta40

11

Dovresti solo essere in grado di sostituire la distanza con il tempo tra i nodi e risolverlo allo stesso modo.


10

Dijkstra

Come detto prima, non viene utilizzato solo per la distanza più breve. Credo che questa animazione dia una buona comprensione del "potere" (per mancanza di una parola migliore) di Dijkstra:

Dijkstra

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.