Sunteți pe pagina 1din 14

Inteligenta artificiala

Strategii de cutare informate


Laboratorul 3&4

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.

Strategiile de cutare informate sunt:

1. Heuristic Function Search


a. Greedy Best First Search
b. A* Search
c. Iterative Deepening A* Search (IDA*)
2. Recursive Best First Search (RBFS)
3. Simplified Memory- Bounded A* (SMA)
Strategia de cutare Best First

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.

1. Greedy Best First Search

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

insert(state=initial_state, h=initial_heuristic, counter=0) into search_queue;

while search_queue not empty do

current_queue_entry=pop item from front of search_queue;

current_state= state from current_queue_entry;

2
current_heuristic=heuristic from current_queue_entry;

applicable_actions = array of actions applicable in current_state;

for all index ?i in applicable_actions>= starting_counter do

current_action= applicable_actions[?i];

successor_state=current_state.apply(current_action);

if successor_state is goal then

return plan and exit;

end if

successor_heuristic= heuristic value of successor_state;

if successor_heuristic< current_heuristic then

insert(current_state, successor_heuristic,?i+1) at front of search_queue;

insert(successor_state, successor_heuristic,0) at front of search_queue;

break for;

else

insert(successor_state, successor_heuristic,0) into search_queue;

end if

end for

end while

exit no plan found;

3
Exemplu

Proprietati ale algoritmului Greedy Best First Search

Complexitate de timp i spaiu


Complexitatea de timp a strategiei Greedy este tot T= O (bd) n cel mai nefavorabil caz.
La fel i complexitatea de spaiu S = O (bd). n practic ns, de cele mai multe ori nu ne
confruntm cu cazuri nefavorabile pentru Greedy i timpul de calcul respectiv spaiul sunt
mult mai mici.
Completitudine i optimalitate

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

Greedy se implementeaza identic cu strategia cu cost uniform, doar c nodurile sunt


pstrate n list ordonate dup euristic i nu dup cost. Se poate ns implementa i pe
paradigma de la cutarea n adncime, folosindu-se o stiv i pstrndu-se un consum mai
mic memorie dar conducnd mai ncet spre soluie.

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

Strategia A* poate fi vzut ca o combinaie ntre strategia de cutare greedy i strategia de


cutare cu cost uniform, A* combinnd cele mai bune caracteristici ale acestora. Pentru aceasta
A* utilizeaz funcia de evaluare a nodului: f(n)=g(n)+h(n) unde g(n) este costul de la starea
iniial la starea curent (funcia de la cutarea cu cost uniform) iar h(n) este costul celui ieftin
drum de la starea curent la starea final (euristica de la cutarea Greedy).

Pseudocod

Put node_start in the OPEN list with f(node_start) = h(node_start) (initialization)

while the OPEN list is not empty {

Take from the open list the node node_current with the lowest

f (node_current) = g(node_current) + h(node_current)

if node_current is node_goal we have found the solution; break

Generate each state node_successor that come after node_current

for each node_successor of node_current {

Set successor_current_cost = g(node_current) + w(node_current, node_successor)

if node_successor is in the OPEN list {

if g(node_successor) successor_current_cost continue (to line 20) }

else if node_successor is in the CLOSED list {

if g(node_successor) successor_current_cost continue (to line 20)

Move node_successor from the CLOSED list to the OPEN list }

else {

Add node_successor to the OPEN list

Set h(node_successor) to be the heuristic distance to node_goal }

5
Set g(node_successor) = successor_current_cost

Set the parent of node_successor to node_current }

Add node_current to the CLOSED list }

if(node_current != node_goal) exit with error (the OPEN list is empty)

Exemplu

Proprietati ale algoritmului A* Search

6
Complexitate de timp i spaiu

Complexitatea de spaiu n cel mai ru caz este exponenial i la A* dac nu este


respectat condiia: |h(n)-h*(n)|<O(lg(h*(n))) (h*(n) este costul real pn la starea
final). Totui pentru marea parte a situailor practice A* solicit resurse mai mici dect
ceilali algoritmi de complexitate exponenial.

Completitudine i optimalitate

A* este complet i este optimal cu condiia ca euristica h(n) s fie admisibil. O


euristic se numete admisibil dac nu supraestimeaz costul atingerii strii finale
plecnd din starea curent. Eurisiticile admisibile se mai numesc i euristici optimiste
deoarece ntodeauna estimeaz c este mai uor de a ajunge la final dect este n realitate.
n baza discuiei din capitolul anterior se poate utiliza h(n)=max(h1,h2,...,hm) iar dac
fiecare din euristicile hi ste admisibil atunci i h(n) este adimisibil.

Implementare

A* se implementeaz folosind o list sortat cresctor dup funcia f.

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*.

3. Iterative Deepening A* Search ( 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

node current node


g the cost to reach current node
f estimated cost of the cheapest path (root..node..goal)
h(node) estimated cost of the cheapest path (node..goal)
cost(node, succ) step cost function
is_goal(node) goal test
successors(node) node expanding function

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

function search(node, g, bound)


f := g + h(node)
if f > bound then return f
if is_goal(node) then return FOUND
min :=
for succ in successors(node) do
t := search(succ, g + cost(node, succ), bound)
if t = FOUND then return FOUND
if t < min then min := t
end for
return min
end function

8
Exemplu

Proprietati ale algoritmului Iterative Deepening A* Search (IDA*)

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.

4. Recursive Best First Search (RBFS)

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)

Complexitatea timpului n cel mai rau caz este O(b2d-1)


Complexitatea spatiului este O(bd)

5. Simplified Memory- Bounded A* (SMA)

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.

Proprietati ale algoritmului Memory-Bounded A* (SMA)

Acesta funcioneaz cu o euristic, la fel ca A *


Este complet dac memoria permis este suficient de mare pentru a stoca soluia puin
adnc
Este optim dac memoria permis este suficient de mare pentru a stoca soluia optim
puin adnc, n caz contrar se va returna cea mai bun soluie care se potrivete n
memoria permis
Evit repetarea strilor, atta timp ct memoria permite
Acesta va folosi toat memoria disponibil
Marirea limitei de memorie a algoritmul va accelera doar calcul
Atunci cnd memoria disponibil este suficient pentru a conine tot arborele de cutare,
atunci calcul are o vitez optima

Tema

1. Aplicati algoritmul Simplified Memory Bounded A* pe urmatoarea


problema(memorie 4 noduri): Start: S; Final: G.

13
2. Aplicati algoritmii studiati pe un exemplu ales de voi.
3. Implementati 3 din cei 5 algoritmi cu interfata grafica.

14

S-ar putea să vă placă și