Documente Academic
Documente Profesional
Documente Cultură
Euristica este valoarea estimat a distanei de la starea curent la starea final, iar funcia care
evalueaz acest lucru o notm n general cu h, i.e.
h(n) = costul estimat al celei mai ieftine ci de la nodul dat la nodul soluie
Deci euristica este o funcie care se aplic unui nod dintr-un arbore de cutare, mai exact strii
asociate lui, i se folosete la ordonarea nodurilor n lista de noduri ce urmeaz a fi explorate.
Astfel, lista este ordonat dup euristic n cazul cutrii Greedy respectiv dup cost plus euristic
n cazul cutrii A*, aa cum se va vedea n cele ce urmeaz.
Pentru ilustrarea mai clar a conceptului de euristic iat cteva exemple de euristici:
Pentru explorarea unei hrti funcia h(n) poate fi distana n linie dreapt de la punctul
current la punctul final (numit i Straight Line Distance Heuristic h SLD).
Pentru umplerea unui rucsac cu obiecte: h(n) poate fi spaiul liber care rmne n rucsac
(sau invers volumul/greutatea obiectului ales).
Pentru un puzzle h(n) poate fi numrul de piese aflate n pozitii greite sau suma
distanelor pieselor pn la poziia lor final, sum evaluat ca suma distanelor
Manhattan a fiecrei piese pn la poziia ei final (distana Manhattan se mai numete
i city block distance i este distana n linie dreapt fr a merge n diagonal).
Diferenta dintre ce nseamn un cost i ce nseamn o euristic este, dac un cost ajut strategia
la a gsi soluia de cost optim euristica aduce avantaje n necesitile de timp i necesitile de
spaiu.
Strategia Best-First este un simplu model teoretic i idealizat de strategie de cutare euristic.
Aceasta presupune explorarea nodului i alegerea ca successor a celui mai bun nod. Sigur acest
lucru este imposibil de realizat n general pentru c este necesar o funcie care evalueaz care
este nodul cel mai bun, iar dac o astfel de funcie ar exista nici nu mai am avea nevoie de un
arbore de cutare pentru c strategia de cutare ar merge direct ctre soluie avnd complexitate
de timp i spaiu liniar. Deci noiunea de cutare best-first rmne doar ca model idealizat al
strategiilor euristice.
Strategia greedy alege spre explorare ntotdeauna nodul care este cel mai apropiat de starea final,
deci cel cu cea mai bun euristic. n acest sens se poate face o analogie cu strategia cu cost
uniform care alegea ntotdeauna nodul cu costul cel mai bun. Dac strategia de cutare cu cost
uniform pstra o list sortat dup valoarea costului, Greedy va pstra o list sortat dup valoarea
euristicii.
Pseudocod
2
current_heuristic=heuristic from current_queue_entry;
current_action= applicable_actions[?i];
successor_state=current_state.apply(current_action);
end if
break for;
else
end if
end for
end while
3
Exemplu
Strategia greedy nu este complet n arbori infinii, ciclurile conducnd evident la blocaje.
Dac se folosesc mecanisme de evitare a ciclurilor, strategia este complet. Totodat,
strategia nu este nici optimal deoarece nu ine cont de costuri.
Implementare
4
Avantaje i dezavantaje
Avantajul major este c strategia greedy ofer rapid soluii i n practic greedy se
dovedete a fi o alegere foarte bun atunci cnd nu se dorete gsirea unei soluii optimale.
Dezavantajul este c strategia nu este complet i nici optimal, deasemenea cnd se
implementeaz identic cu uniform-cost poate conduce la necesiti de memorie ridicate.
2. A* Search
Pseudocod
Take from the open list the node node_current with the lowest
else {
5
Set g(node_successor) = successor_current_cost
Exemplu
6
Complexitate de timp i spaiu
Completitudine i optimalitate
Implementare
Avantaje i dezavantaje
A* este cea mai bun strategie de cutare, se poate demostra chiar c este optimal-
eficient, adic orice alt strategie care exploreaz mai puine noduri dect A* risc s nu
gseasc cea mai bun soluie. Dezavantajul este c necesit resurse de memorie relative
ridicate. Pentru a nltura acest dezavantaj o potenial soluie este combinarea lui A* cu
Iterative Deepening combinaie cunoscut sub numele de Iterative Deepening A* sau
IDA*.
Iterative Deepening A* Search este un algoritm de cautare intr-un graf care poate gsi calea cea
mai scurt dintre un nod de start desemnat i orice membru al unui set de noduri tinta ntr-un
graf ponderat. Este o variant a cutarii n adncime iterative care mprumut ideea de a utiliza
o funcie euristic pentru a evalua costul rmas cu scopul de a ajunge la o tinta, din algoritmul
de cutare A*. Deoarece este un algoritm de cutare n adncime, utilizarea memoriei sale este
mai mic dect n A *, dar spre deosebire de cutare obinuit iterative deepening, se
concentreaz pe explorarea nodurile cele mai promitoare i, prin urmare, nu merge pna la
aceeai adncime peste tot n arborele de cutare . Spre deosebire de A*, IDA * nu utilizeaz
programarea dinamic i, prin urmare, de multe ori se se ntampla sa se exploreze aceleai noduri
de mai multe ori.
n timp ce cutarea n adncime iterativa folosete adncimea de cutare ca fiind cutoff pentru
fiecare iteraie, IDA * folosete f (n) = g (n) + h (n), unde g (n) este costul s se deplaseze de la
7
rdcin la nodul n i h (n) este o estimare euristic specific a costului s se deplaseze de la n la
soluie.
Pseudocod
procedure ida_star(root)
bound := h(root)
loop
t := search(root, 0, bound)
if t = FOUND then return bound
if t = then return NOT_FOUND
bound := t
end loop
end procedure
8
Exemplu
IDA * este garantat pentru a gsi calea cea mai scurt care duce de la nodul de start dat
spre orice nod tinta din graful problem, n cazul n care funcia euristic h este
admisibil, adic, h(n) h*(n) pentru toate nodurile n, unde h* este costul celui mai scurt
drum de la n la cel mai apropiat obiectiv (o "euristice perfect")
IDA * nu-i amintete nici un nod, cu excepia celor de pe calea sa curenta, avnd nevoie
de o cantitate de memorie, care este liniara cu lungimea soluiei pe care-o construiete.
Complexitatea sa de timp este analizata n ipoteza c euristica estimata a costurilor h este
consecventa, ceea ce nseamn c h(n)cost(n.n') + h(n') pentru toate nodurile n i toi
vecinii n ' ai lui n; IDA * realizeaz o cutare n adncime mai mic (cu un factor
constant), dar nu are un factor de ramificare mai mic.
Recursiv best-first search este o cautare best-first care se execut ntr-un spaiu liniar cu
adncimea maxim de cutare, indiferent de funcia de cost utilizata. Chiar i cu o funcie de cost
acceptabila, recursive best first search genereaz mai puine noduri dect IDA *, i este n general
superioar IDA *, cu excepia unei mici creteri a costului per generaie asupra unui nod.
Algoritmul limiteaza recursivitatea prin pastrarea f-value a celei mai bune alternative pornind de
la oricare din nodurile succesoare. Daca valoarea nodului current depaseste aceasta valoare se
revine la drumul alternativ. n acest caz f-value este nlocuit cu cea mai buna valoare a fiului
(permitnd astfel posibilitatea de a ne ntoarce mai trziu sa extindem acea cale).
9
Pseudocod
Exemplu
10
Proprietati ale algoritmului Recursive Best First Search (RBFS)
SMA* este un algoritm bazat pe algoritmul de drum cel mai scurt A*. Avantajul principal al
SMA* este c se folosete o memorie mrginita, n timp ce algoritmul A* ar putea avea nevoie
de memorie exponenial. Toate celelalte caracteristici ale SMA* sunt motenite de la A*. La fel
ca A*, se extind ramurile cele mai promitoare n conformitate cu euristicile asociate. Ce
deosebeste algoritmul SMA* este c nlatura nodurile a cror expansiune este mai putin
promitoare dect era de ateptat. Abordarea permite algoritmului s exploreze ramuri i apoi sa
se ntoarca pentru a explora alte ramuri. Extinderea i tierea nodurilor are ca scop pstrarea a
dou valori f pentru fiecare nod. Nodul x stocheaz o valoare f (x), care estimeaz costul atingerii
obiectivului prin parcurgerea caii prin acel nod. Cu ct valoarea este mai mica cu att prioritatea
este mai mare. La fel ca n A* aceast valoare este iniializat cu f(x)= h (x) + g (x), dar v-a fi
apoi actualizata pentru a reflecta modificrile aduse acestei estimri atunci cnd fii si sunt
extinsi. Un nod extins complet va avea o valoare f cel puin la fel de mare ca cea a succesorilor
si. n plus, nodul stocheaz valoarea f a succesorului uitat. Aceast valoare este restabilit n
cazul n care succesorul uitat se dovedete a fi cel mai promitor succesor.
Pseudocod
11
Exemplu
1. La fiecare etap, se adaug un succesor ce are cel mai mic f-cost de pe cel mai de jos
situat nod care are succesori ce nu sunt n prezent n arbore. Fiul stng B se adaug la
rdcina A.
2. f (A) este nc 12, aa c am aduga fiul drept G (f = 13). Dupa ce am descoperit toti
fii lui A, putem actualiza f-cost ul cu valoare minima dintre costurile fiilor si,
adic 13. Memoria este acum plin.
12
3. G este desemnat acum pentru expansiune (avnd f-costul cel mai mic), dar mai nti
trebuie sa eliminam un nod din memorie. Eliminam frunza cu f-cost-ul cel mai mare,
care este B, dar pastram f-costul nodului pentru a ne putea ntoarce daca este necesar
pe acea cale. Apoi adugm H, cu f (H) = 18. H nu este un nod gol, dar calea spre H
folosete toat memoria disponibil. Prin urmare, nu exist nici o modalitate de a gsi
o soluie prin H, asa ca am stabilit f (H) = infinit.
4. G este extins din nou. l stergem pe H i adugam I cu f (I) = 24. n acest moment
avem ambii succesori ai lui G, cu valori infinit i 24, astfel nct f (G) devine 24. f(A)
devine 15, minimul dintre 15 (valoare succesorului uitat) i 24. Observai c I este
un nod gol, dar s-ar putea s nu fie cea mai bun soluie, deoarece f-cost lui A este
de numai 15.
5. A este, din nou, cel mai promitoare nod, deci B este generat pentru a doua oar. Am
descoperit ca drumul prin G nu a fost att de bun pn la urm.
6. C, succesorull lui B, nu este un nod tinta si se afla la adncimea maxim, astfel nct
setam f (C) = infinit.
7. Pentru putea acceasa al doilea succesor, D, v-a trebui sa renuntam la C. Apoi, f (D) =
20, iar acesta valoare este motenit de B i A.
8. Acum nodul de pe nivelul cel mai de jos si cu valoarea f-cost cea mai mica este, prin
urmare, D. D este ales i pentru c acesta este un nod tinta, cutarea se termin.
Tema
13
2. Aplicati algoritmii studiati pe un exemplu ales de voi.
3. Implementati 3 din cei 5 algoritmi cu interfata grafica.
14