Movatterモバイル変換


[0]ホーム

URL:


Vai al contenuto
WikipediaL'enciclopedia libera
Ricerca

SMA*

Da Wikipedia, l'enciclopedia libera.
SMA*
ClasseAlgoritmo di ricerca
Struttura datiGrafo
Caso peggiore temporalmenteO(|E|)=O(bd){\displaystyle O(|E|)=O(b^{d})}[1]
Caso peggiore spazialmenteO(n){\displaystyle O(n)}[2]
Ottimale[3]
Completo[4]
Manuale

SMA*, acronimo diSimplified Memory-Bounded A*, è unalgoritmo euristico per la ricerca delcammino minimo basato sull'algoritmo A*, proposto dall'informatico anglo-statunitenseStuart Russell nel 1992.[5]

Il vantaggio principale di SMA* è l'uso limitato della memoria, al contrario di A* che ha bisogno, nel caso peggiore, di uno spazio esponenziale. Tutte le altre caratteristiche di SMA* derivano direttamente da A*, incluse le prestazioni in termini di tempo, che nel caso peggiore rimangono esponenziali.[6] Come si evince anche dal nome, questo tipo di ricerca fa parte della famigliamemory-bounded A* (o MA*).[5]

Descrizione

[modifica |modifica wikitesto]

L'idea di algoritmi a "memoria limitata" (bounded-memory) nasce dal fatto che altri algoritmi euristici, comeRBFS oIDA*, usano fin troppa poca memoria,[7] a danno delle prestazioni di velocità. SMA* usa dunque un algoritmo sostanzialmente identico a A* fino a quando la memoria assegnatagli sarà sufficiente, dopodiché gli stati con il maggior costof verranno scartati (o "potati") dalla coda.[7] A questo punto, l'algoritmo adotterà una strategia RBFS,[7] ricordando il costof migliore relativo ad ogni ramo potato (al posto del costo del nodo da cui il ramo parte). Quando tutti i rami esplorati sembreranno peggiori di quello dimenticato, quest'ultimo verrà ri-esplorato più in profondità.[8]

Implementazione

[modifica |modifica wikitesto]

Segue una possibile implementazione inpseudocodice:

functionSMA_star(problema):camminocoda:insiemedinodi,ordinatiperillorocostof;begincoda.insert(problema.nodo-radice);whileTruedobeginifcoda.vuoto()thenreturnfallimento;//nessuna soluzione entra in memorianodo:=coda.begin();// nodo con il più basso costo fifproblema.soluzione(nodo)thenreturnsuccess;s:=successore(nodo)if!problema.soluzione(s)&&profondità(s)==massima_profonditàthenf(s):=inf;// non c'è più spazio disponibile in memoriaelsef(s):=max(f(node),g(s)+h(s));// il costo f del successore è il valore massimo fra//      il costo f del genitore//      il costo per raggiungere il successore + il costo predetto (euristico) del successoreendififnessunnuovosuccessorethenaggiornacostofdinodoe,senecessario,deisuoigenitori(ricorsivamente)ifnode.successoricodathencoda.rimuovi(nodo);// tutti i figli sono già stati aggiunti alla coda tramite un cammino più breveifmemoriaèpienathenbeginnodoPeggiore:=nodopiùsuperficialeconilpiùaltocostof;forgenitoreinnodoPeggiore.genitoridobegingenitore.successori.rimuovi(nodoPeggiore);ifneededthencoda.inserisci(genitore);endforendifcoda.inserisci(s);endwhileend

Proprietà

[modifica |modifica wikitesto]

SMA* è caratterizzato delle seguenti proprietà:

  • Lavora con uneuristica, esattamente come A*.
  • È completo se la soluzione più superficiale entra in memoria.
  • È ottimale se la soluzione più superficiale entra in memoria, altrimenti restituisce la soluzione migliore che è riuscito a trovare.
  • Evita di esplorare più volte lo stesso stato finché la memoria premette di farlo.
  • Usa tutta la memoria a disposizione.
  • L'uso della memoria è proporzionale alla velocità di esecuzione dell'algoritmo. Avendo abbastanza memoria da ospitare l'intero albero di esecuzione, la velocità di esecuzione sarà ottimale.

Note

[modifica |modifica wikitesto]
  1. ^Doveb{\displaystyle b} è ilfattore di diramazione (branching factor) ed{\displaystyle d} è la profondità della soluzione.
  2. ^Doven{\displaystyle n} è il numero di nodi che entrano in memoria.
  3. ^Se la soluzione più superficiale entra in memoria, altrimenti restituisce la soluzione migliore che è riuscito a trovare.
  4. ^Se la soluzione più superficiale entra in memoria.
  5. ^ab Rong Zhou e Eric A. Hansen,Memory-Bounded A* Graph Search (PDF),Proceedings of the Fifteenth International Florida Artificial Intelligence Research Society Conference, Pensacola Beach, Florida, 2002, pp. 203-209.URL consultato il 29 marzo 2020(archiviato dall'url originale l'8 settembre 2017).
  6. ^(EN) Max Welling,Informed search algorithms (PDF), suics.uci.edu,Università della California, Irvine, pp. 31-33.URL consultato il 27 marzo 2020(archiviato il 3 ottobre 2015).
  7. ^abcRussell & Norvig, 2009, p. 101.
  8. ^ S. Russell,Efficient memory-bounded search methods, a cura di Neumann B.,Proceedings of the 10th European Conference on Artificial intelligence, Vienna, Austria, John Wiley & Sons, New York, NY, 1992, pp. 1-5.

Bibliografia

[modifica |modifica wikitesto]

Voci correlate

[modifica |modifica wikitesto]
V · D · M
Algoritmi di ricerca sugrafi edalberi
RicercaPotatura alfa-beta ·Algoritmo di Bellman-Ford ·Algoritmo di Tarjan ·Bidirectional search ·D* ·Depth-limited search ·Algoritmo di Dijkstra ·Algoritmo di Floyd-Warshall ·Hill climbing ·Iterative deepening depth-first search ·Algoritmo di Johnson ·Lexicographic breadth-first search ·Ricerca in ampiezza ·Ricerca in profondità ·Uniform-cost search ·Ricerca ad albero Monte Carlo (MCTS)
Ricerca informataAlgoritmo A* ·Algoritmo B* ·Beam search ·Best-first search ·Iterative deepening A* ·Ricerca best-first ricorsiva ·Memory-bounded A* (SMA*)
Voci correlateProgrammazione dinamica
  Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica
Estratto da "https://it.wikipedia.org/w/index.php?title=SMA*&oldid=144066353"
Categorie:

[8]ページ先頭

©2009-2025 Movatter.jp