Algoritmi del percorso più breve

Scuola secondaria di secondo gradoInformaticaGrafo a griglia con 4 vicini; le strade costano 1, il fango costa 5 e i muri bloccano il passaggio

Sblocca questo laboratorio con un pass

Un pass dà accesso a tutte le simulazioni del sito, compresa la modalità Presentazione per le lezioni. I materiali didattici qui sotto restano gratuiti per tutti.

Pagamento una tantum, nessun abbonamento.

Informazioni su questo esperimento

I pianificatori di percorsi in mappe, robot e videogiochi risolvono tutti lo stesso problema: trovare il modo meno costoso per andare da una partenza a una meta. Su questa griglia, ogni passo su una strada costa 1, un passo nel fango costa 5 e non è possibile attraversare i muri. Osserva tre algoritmi classici espandersi da S. La ricerca in ampiezza conta i passi e ignora il fango, Dijkstra esplora sempre per prima la cella meno costosa, mentre A* aggiunge una stima della distanza rimanente per dirigersi direttamente verso la meta. Crea le tue mappe e confronta quanto lavoro svolge ciascun algoritmo.

Obiettivi di apprendimento

  • Rappresentare una mappa come un grafo di celle collegate alle celle vicine, con un costo per ogni passo
  • Descrivere come la ricerca in ampiezza esplora ad anelli con lo stesso numero di passi
  • Spiega perché Dijkstra trova il percorso più economico quando i passi hanno costi diversi
  • Spiega come l’euristica A* riduce il numero di celle esplorate senza rinunciare al percorso migliore
  • Confronta gli algoritmi in base al costo del percorso trovato e al lavoro svolto

Come si usa

  1. 1Scegli BFS e premi Cerca. Il percorso trovato passa nel fango? Leggi il costo nella tabella.
  2. 2Scegli Dijkstra e cerca di nuovo. Confronta il percorso e il relativo costo con quelli di BFS.
  3. 3Scegli A*. Il costo del suo percorso è uguale a quello di Dijkstra? Quante celle in meno ha esplorato?
  4. 4Osserva la frontiera blu durante la ricerca. In che modo la sua forma è diversa con Dijkstra e A*?
  5. 5Dipingi un muro per chiudere la strada intorno al fango. Quale algoritmo cambia percorso e perché?
  6. 6Premi Cancella mappa e trascina S e G per allontanarle. Senza ostacoli, quante celle esplora ciascun algoritmo?

Il modello

Il costo minimo per raggiungere una cella è il minimo, tra i suoi vicini, del loro costo più il costo del passo.
A* esplora la cella con il valore f più basso: il costo accumulato g più il costo stimato rimanente h.
Distanza di Manhattan dall’obiettivo. Non sovrastima mai il costo reale, quindi A* continua a trovare il percorso meno costoso.

Ipotesi

  • Ci si può muovere solo in alto, in basso, a sinistra e a destra. Entrare in una cella costa 1 sulla strada e 5 nel fango; non è possibile entrare nei muri.
  • Durante la ricerca, BFS considera ogni passo come se costasse 1, quindi trova il percorso con meno passi. Il costo indicato nella tabella è il costo reale di quel percorso, fango compreso.
  • Se due celle hanno la stessa priorità, viene esplorata per prima quella aggiunta per prima; perciò, con la stessa mappa, ogni esecuzione segue esattamente lo stesso ordine.
  • La ricerca si ferma non appena l’obiettivo viene rimosso dalla frontiera; a quel punto se ne conosce il costo minimo.

Provalo in classe

  1. Q1Perché BFS può trovare un percorso più costoso di Dijkstra, anche se ha meno passi?
  2. Q2Se tutte le celle fossero strade, BFS e Dijkstra troverebbero percorsi con lo stesso costo? Perché?
  3. Q3Cosa succederebbe ad A* se la stima h fosse dieci volte la distanza di Manhattan?
  4. Q4Perché A* esplora meno celle quando l’obiettivo si trova in un’area aperta, ma più o meno tante quante Dijkstra in un labirinto?
  5. Q5Un navigatore trova in meno di un secondo un percorso veloce attraverso un paese con milioni di incroci stradali. Quali idee di questo laboratorio lo rendono possibile?

Domande frequenti

Qual è l’algoritmo migliore?

Dipende dal problema. BFS è semplice e corretto quando ogni passaggio ha lo stesso costo. Dijkstra gestisce costi diversi. A* dà lo stesso risultato di Dijkstra esplorando meno celle, se è disponibile una buona stima della distanza dalla destinazione.

Che cos’è la frontiera?

La frontiera è l’insieme delle celle raggiunte ma non ancora esplorate. Ogni algoritmo rimuove una cella dalla frontiera alla volta; l’unica differenza tra loro è la regola con cui scelgono quale cella rimuovere per prima.

Questi algoritmi possono gestire costi negativi?

Dijkstra e A* presuppongono che nessun passaggio abbia un costo negativo. Con costi negativi, una cella considerata definitiva in precedenza potrebbe poi risultare raggiungibile tramite un percorso meno costoso; serve quindi un altro algoritmo, come Bellman-Ford.