SMA*
ClasseAlgoritmo di ricerca
Struttura datiGrafo
Caso peggiore temporalmente[1]
Caso peggiore spazialmente[2]
Ottimale[3]
Completo[4]

SMA*, acronimo di Simplified Memory-Bounded A*, è un algoritmo euristico per la ricerca del cammino minimo basato sull'algoritmo A*, proposto dall'informatico anglo-statunitense Stuart 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 famiglia memory-bounded A* (o MA*).[5]

Descrizione

modifica

L'idea di algoritmi a "memoria limitata" (bounded-memory) nasce dal fatto che altri algoritmi euristici, come RBFS o IDA*, 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 costo f verranno scartati (o "potati") dalla coda.[7] A questo punto, l'algoritmo adotterà una strategia RBFS,[7] ricordando il costo f 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

Segue una possibile implementazione in pseudocodice:

function SMA_star(problema): cammino
  coda: insieme di nodi, ordinati per il loro costo f;
begin
  coda.insert(problema.nodo-radice);

  while True do begin
    if coda.vuoto() then return fallimento; //nessuna soluzione entra in memoria
    nodo := coda.begin(); // nodo con il più basso costo f
    if problema.soluzione(nodo) then return success;
    
    s := successore(nodo)
    if !problema.soluzione(s) && profondità(s) == massima_profondità then
        f(s) := inf; 
        // non c'è più spazio disponibile in memoria
    else
        f(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 successore
    endif
    if nessun nuovo successore then
       aggiorna costo f di nodo e, se necessario, dei suoi genitori (ricorsivamente)
    
    if node.successori  coda then coda.rimuovi(nodo); 
    // tutti i figli sono già stati aggiunti alla coda tramite un cammino più breve
    if memoria è piena then begin
      nodoPeggiore := nodo più superficiale con il più alto costo f;
      for genitore in nodoPeggiore.genitori do begin
        genitore.successori.rimuovi(nodoPeggiore);
        if needed then coda.inserisci(genitore); 
      endfor
    endif

    coda.inserisci(s);
  endwhile
end

Proprietà

modifica

SMA* è caratterizzato delle seguenti proprietà:

  • Lavora con un euristica, 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
  1. ^ Dove è il fattore di diramazione (branching factor) e è la profondità della soluzione.
  2. ^ Dove è 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. ^ a b 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), su ics.uci.edu, Università della California, Irvine, pp. 31-33. URL consultato il 27 marzo 2020 (archiviato il 3 ottobre 2015).
  7. ^ a b c Russell & 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

Voci correlate

modifica
  Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica

📚 Artikel Terkait di Wikipedia

DNA

macchine astratte, il problema di soddisfacibilità booleana e la versione bounded del problema del commesso viaggiatore. Grazie alla sua compattezza, il

Ada (linguaggio di programmazione)

sono definite in altri package della libreria, e sono Ada.Strings.Bounded.Bounded_String (per stringhe di lunghezza variabile fino ad un valore massimo)

Numero primo

in Nature, 14 maggio 2013, ISSN 0028-0836 (WC · ACNP). ^ Yitang Zhang, Bounded gaps between primes (PDF), in Annals of Mathematics, Princeton University

Poondi Kumaraswamy

applicazioni ingegneristiche. "A generalized probability density function for double-bounded random processes". Journal of Hydrology, 1980 ^ scheda, su fellows

Formula di coarea

la disuguaglianza di Pólya-Szegő. (EN) Ambrosio, Fusco, Pallara, Function of Bounded Variation and Free Discontinuity Problems, Oxford University Press

Sistema dinamico

ad esempio la stabilità esterna, anche detta stabilità BIBO (da Bounded Input, Bounded Output), ovvero la proprietà di avere un'uscita limitata se l'ingresso

Teoria dei giochi

 50, 1982, pp. 97-109. URL consultato il 10 Luglio 2021. Abraham Neyman, Bounded complexity justifies cooperation in the finitely repeated prisoner's dilemma

Waloddi Weibull

Likelihood, rapporto per la USAF, 1967. Composition And Decomposition Of Bounded Variates With Special Reference To The Gamma And The Weibull Distributions