Sunteți pe pagina 1din 16

IASE 1/16 Cap. 4.

Structuri i strategii de cutare

4.
Structuri i strategii de cutare n spaiul de stri

4.1. Inteligena artificial ca reprezentare i cutare


n lucrarea ACM Turing Award Lecture, Newell i Simon (1976) demonstreaz c
activitatea inteligent, uman sau artificial, se realizat prin intermediul:
1. Simbolurilor pentru reprezentarea aspectelor semnificative din domeniul problemei;
2. Operaii pe aceste simboluri pentru generarea unor poteniale soluii ale problemei;
3. Cutarea n vederea selectrii unei soluii dintre aceste posibiliti.
Cu alte cuvinte, trebuie definit o reprezentare simbolic a obiectelor din domeniul
aplicaiei i trebuie definii nite operatori prin care se poate modifica aceast reprezentare.
Rezolvarea unei probleme de ctre o main gnditoare presupune reprezentarea
cunotinelor i cutarea soluiei, cele dou principii fiind ntr-o interdependen reciproc.

4.1.1. Reprezentarea cunotinelor


nainte ca un calculator s poat ncepe soluionarea unei probleme, trebuie ca detaliile
problemei respective s fie reprezentate i codificate ntr-un limbaj neles de calculator.
Programatorul de inteligen artificial trebuie s abstractizeze aceste detalii i s introduc n
calculator numai acele date indispensabile rezolvrii problemei.
Calculul predicatelor definit n capitolele precedente constituie un limbaj adecvat de
reprezentare n inteligena artificial. Expresiile acestui limbaj constituie un instrument de
descriere a obiectelor i a relaiilor dintre acestea, iar regulile de deducie permit inferena
logic a unor cunotine noi. Aceste reguli de inferen genereaz un spaiu, spaiu ce va fi
explorat n vederea gsirii soluiei.

4.1.2 Cutarea
Un al doilea aspect subliniat de Newell i Simon este acela c o problem este soluionat
prin cutarea soluiei printre nite alternative posibile. Acest aspect este susinut de analogia
cu gndirea uman. Omul utilizeaz de asemenea un numr de strategii n modul lui de a
rezolva o problem. De exemplu, un juctor de ah analizeaz un anumit numr de micri
viitoare, alegnd micarea n funcie de un criteriu de eficien, astfel ales nct s-i asigure un
avantaj maxim. Un matematician alege dintre diferite strategii, nu mai puin complexe, pe
acelea care-i permit demonstrarea unei teoreme complexe; un fizician poate investiga un
anumit numr de cauze posibile ale unui anumit fenomen .a.m.d. Acest aspect al inteligenei
contureaz aa numita tehnica de rezolvare prin cutare n spaiul de stri.
Prin stare se nelege o anumit configuraie a problemei investigate. De exemplu, n
jocul de ah o stare este o anumit poziie de pe tabla de ah. n calculator, o poziie este
reprezentat printr-o aa numit baz de date, baz a crei complexitate depinde de natura
problemei abordate, mergnd de la cteva numere pn la o baz de date relaional. n
procesul de rezolvare a unei probleme, omul sau maina poate utiliza anumite reguli, poate
aplica anumite procedee sau artificii sau, n cazul jocurilor, poate efectua anumite mutri. De
exemplu, n jocul de ah poate efectua oricare din mutrile posibile. Aceste reguli, procedee
sau mutri vor produce modificri asupra bazei de date, aceasta reflectnd starea curent a
problemei.
Totalitatea acestor stri vor constitui un spaiu pe care-l vom denumi spaiul de stri.
Dintre acestea, vom deosebi o stare denumit stare iniial reflectnd datele iniiale ale
problemei. De asemenea, strile ce constituie soluii posibile ale problemei vor fi denumite
stri finale.
IASE 2/16 Cap. 4. Structuri i strategii de cutare

Grafurile constituie un instrument practic i eficient de reprezentare a obiectelor i a


relaiilor dintre acestea. Teoria grafurilor a fost introdus la nceputul secolului al XVIII-lea
de matematicianul austriac Leonhard Euler n vederea soluionrii celebrei probleme
cunoscut sub numele de podurile din Knigsberg. Knigsberg este un orel austriac
aezat pe ambele maluri ale rului Pregel, ru care formeaz dou insule. Malurile i cele
dou insule sunt conectate prin sistemul de poduri ilustrat n figura 5.1a. Problema, care a
frmntat multe persoane pn la Euler, este urmtoarea: poate un cltor s parcurg ntregul
orel, trecnd pe fiecare pod, fr s parcurg un pod de dou ori ?
Muli au ncercat s gseasc o soluie, ns fr succes. Euler este acela care a
demonstrat matematic c problema nu are soluie!, imaginnd grafurile pentru reprezentarea
problemei (Fig. 4.1b). Ulterior, teoria grafurilor s-a dezvoltat foarte mult. Problema de mai
sus, cunoscut sub numele de lan eulerian ntr-un graf, nu mai pune azi nici un fel de
probleme, cunoscndu-se faptul c un astfel de drum exist dac numrul nodurilor de
conectivitate impar este 0 sau 2. Problema este cunoscut i sub denumirea de lan (drum)
hamiltonian, Hamilton aducndu-i contribuia la stabilirea unor algoritmi pentru generarea
acestor drumuri. Mai mult, se tie c ntr-un graf exist un circuit eulerian dac i numai dac
graful este conex i pseudosimetric. Un graf este pseudosimetric dac din fiecare vrf pleac
attea arce cte intr n vrful respectiv.
m1 m1
p2 p4
p3 p4
p2 p3
. i2 Pregel i1 p1 i2
i1 p1
. p6
p5 p6 p7
p5 p7
m2 m2
a) Oraul Knigsberg. b) graful asociat
Fig. 4.1.

Revenind la problema podurilor din Knigsberg, baza de cunotine se poate reprezenta


utiliznd un predicat denumit leaga i utiliznd dou astfel de predicate pentru fiecare pod:
leaga(i1,i2,p1). leaga(i2,i1,p1).
leaga(m1,i1,p2). leaga(i1,m1,p2).
leaga(m1,i1,p3). leaga(i1,m1,p3).
leaga(m1,i2,p4). leaga(i2,m1,p4).
leaga(m2,i1,p5). leaga(i1,m2,p5).
leaga(m2,i1,p6). leaga(i1,m2,p6).
leaga(m2,i2,p7). leaga(i2,m2,p7).
unde, s-a notat prin: i1, i2 - cele dou insule; m1, m2 - cele dou maluri ale rului;
p1,p2,p3,p4,p5,p6,p7- cele apte poduri.
Considernd dif(p,q) predicatul care exprim faptul p i q reprezint dou poduri diferite,
n limbajul de calcul al predicatelor, existena unui drum eulerian s-ar putea reprezenta prin
expresia urmtoare:
X1( X2( X3( X4( X5( X6( X7(
leaga(X1,X2,P1)leaga(X2,X3,P2)leaga(X3,X4,P3)leaga(X4,X5,P4)
leaga(X5,X6,P5)leaga(X6,X7,P6)leaga(X7,X,P7)dif(P1,P2)dif(P1,P3)dif(P1,P4)
dif(P1,P5)dif(P1,P6)dif(P1,P7)dif(P2,P3)dif(P2,P4)dif(P2,P5)
dif(P2,P6)dif(P2,P7)dif(P3,P4)dif(P3,P5)dif(P3,P6)dif(P3,P7)
dif(P4,P5)dif(P4,P6)dif(P4,P7) dif(P5,P6)dif(P5,P7)dif(P6,P7)
) ) ) ) ) ) ) exista_lant_eulerian.
Domeniul variabilelor: X1..X7 {i1, i2, m1, m2}.
IASE 3/16 Cap. 4. Structuri i strategii de cutare

Fr a avea pretenia c este cea mai simpl forma de soluionare a problemei, dac un
astfel de drum exist, predicatul: exista_lant_eulerian va avea valoarea true.
Exerciiul 4.1 Transpunei n LPA PROLOG problema podurilor din Knigsberg,
definind predicatele descrise mai sus i chestionai ulterior sistemul asupra existenei soluiei.
Simplificai acest program prin utilizarea listelor.
O implementare eficient a unui algoritm de cutare cere programatorului s analizeze i
s prevad comportarea algoritmului, acesta fiind confruntat cu urmtoarele probleme:
conduce algoritmul respectiv la o soluie?
algoritmul conduce la o soluie ntr-un numr finit (rezonabil) de pai sau poate
intra ntr-un ciclu infinit?
dac o soluie este gsit este aceasta optim?
ct de amplu este procesul de cutare n termenii timpului de calcul consumat i al
memoriei afectate?

Grafurile ofer un instrument ideal de reprezentare al spaiului de stri al unei probleme.


Astfel, nodurile vor reprezenta strile distincte ale problemei, iar arcele regulile, operaiile
sau mutrile efectuate n procesul de rezolvare al problemei. La un astfel de graf deosebim un
nod corespunztor strii iniiale, nod ce va constitui rdcina grafului. De asemenea, graful
va conine cel puin un nod care va constitui starea final sau soluia problemei (evident, n
ipoteza c problema are soluie). Acest astfel de nod este denumit nod final sau goal.
Utiliznd grafurile pentru reprezentarea spaiului de stri, rezolvarea problemei se reduce
la cutarea n graful asociat a unui drum de la nodul iniial la unul din nodurile finale.

Definiie. Prin cutare n spaiul de stri se nelege o cvadrupl (N,A,S,F), n care:


N reprezint mulimea nodurilor unui graf, sau totalitatea strilor posibile ale problemei
n cauz;
A este mulimea arcelor grafului. Arcele corespund cu paii parcuri n cadrul
procesului de rezolvare al problemei;
S este o mulime nevid, SN, coninnd strile iniiale ale problemei;
F este o mulime nevid, FN, coninnd strile finale ale problemei. Aceste stri pot fi
definite n dou moduri:
- o proprietate a strilor generate n procesul de cutare;
- o proprietate a drumului (lanului) generat n procesul de cutrii;

Exemplul 5.1 S considerm jocul tic-tac-toe, jucat de majoritatea copiilor, joc ce se


desfoar pe o tabl cuprinznd 33 ptrele de forma urmtoare:

Iniial tabla este goal, aceast stare de fapt corespunznd strii iniiale. O stare final
corespunde poziiei n care o linie, o coloan sau o diagonal conine trei x-uri:

o o x
x o
x x o
IASE 4/16 Cap. 4. Structuri i strategii de cutare

Drumul de la nodul rdcin la nodul soluie (sau goal) nu este altceva dect seria de
micri ce vor conduce primul juctor la ctigul jocului. Spaiul de stri va conine toate
configuraiile posibile pe care tabla de joc le poate avea. Desigur, dei sunt 39 posibiliti de a
aeza unul din caracterele {blank, x, o} n cele 9 csue, multe dintre acestea nu se pot
produce n cadrul jocului. Aceasta deoarece arcele sunt generate de micrile regulamentare
ale jocului, alternnd ntre plasarea unui x i plasarea unui o ntr-o locaie neutilizat.
Digraful astfel generat nu este un arbore deoarece strile de nivel mai mare sau egal cu trei
pot fi generate n moduri diferite, dar este un digraf aciclic DAG (Directed Acyclic Graph).
n ceea ce privete complexitatea problemei, se poate observa c prima mutare poate fi
aleas din 9 posibile, a doua din 8, .a.m.d. Altfel spus, se vor investiga 9! drumuri n digraful
asociat n vederea gsirii strategiei care s conduc primul juctor la ctig. Mai exact,
juctorul va alege mutarea corespunztoare primului arc al unui drum din starea curent spre
una din strile de ctig.
Dei n acest caz investigarea exhaustiv a celor 9!=362880 de drumuri n graf nu
constituie o problem pentru calculatorul electronic, creterea factorial sau exponenial a
timpului de calculator necesar fac ca aceste metode de cutare exhaustiv s fie aplicabile
doar la problemele de talie relativ redus. n jocul de ah spre exemplu, numrul de stri ceva
de genul 10120 i o astfel de cutare nu s-ar termina practic niciodat.

Exemplul 4.2 Este foarte cunoscut aa numitul joc 15-Puzzle constituit din 15 jetoane
ptrate numerotate de la 1 la 15 dispuse ntr-un chenar, jucat de majoritatea copiilor. Fie,
pentru simplitatea reprezentrii, un joc 8-puzzle:

1 2 3
8 4
7 6 5

Cteva aspecte interesante privitoare la procesul de rezolvare a problemelor pot fi


evideniate pe acest joc.
Dei micrile fizice sunt efectuate prin mutarea micilor jetoane numerotate de la 1 la 8,
este mult mai simplu s ne imaginm c mutm spaiul liber reprezentat prin ptrelul negru.
Astfel, urmtoarele mutri sunt permise:
mutarea ptrelului negru n sus
mutarea ptrelului negru la dreapta
mutarea ptrelului negru n jos
mutarea ptrelului negru la stnga
Pentru a aplica aceste mutri, trebuie avut grij ca ptrelul negru s nu prseasc tabla
de joc. Prin urmare, nu toate dintre cele patru mutri sunt aplicabile la un moment dat. De
exemplu, cnd ptrelul negru este ntr-unul din coluri numai dou din micri sunt posibile.
Dac se specific o stare iniial i una final, se poate reprezenta graful de cutare
propriu problemei propuse. Strile se pot reprezenta ca tablouri 33. Utiliznd calculul
predicatelor, o stare, sau baza de date curent se poate reprezenta printr-un predicat stare
coninnd 9 argumente. De exemplu, starea iniial poate fi reprezentat utiliznd predicatul
stare(1,4,3,7,0,6,5,8,2)
unde s-a notat cu 0 ptrelul negru.
Patru proceduri, definind cele patru micri posibile vor defini arcele grafului de
reprezentare a spaiului de stri. Ca i n cazul precedent, multe stri pot avea diferii
descendeni, prin urmare digraful asociat nu este o arborescen. Un drum de la starea iniial
la starea final n digraful astfel generat nu reprezint altceva dect strategia sau secvena de
micri care conduce la rezolvarea problemei. Trebuie de remarcat c n acest caz digraful
IASE 5/16 Cap. 4. Structuri i strategii de cutare

generat nu mai este aciclic, o anumit configuraie a dispunerii celor 8 numere putndu-se
repeta n cadrul jocului. Dar, dac n graful generat exist un drum de la starea iniial la cea
de goal atunci exist sigur i un drum elementar ntre cele dou stri. Explornd numai
drumurile elementare riscul ca algoritmul de cutare s pice ntr-un ciclu infinit este exclus.

1 4 3
7 6
5 8 2

up left down right

1 3 1 4 3 1 4 3 1 4 3
7 4 6 7 6 7 8 6 7 6
5 8 2 5 8 2 5 2 5 8 2

left right up down left right up down

1 3 1 3 4 3 1 4 3 1 4 3 1 4 3 1 4 1 4 3
7 4 6 7 4 6 1 7 6 5 7 6 7 8 6 7 8 6 7 6 3 7 6 2
5 8 2 5 8 2 5 8 2 8 2 5 2 5 2 5 8 2 5 8

Fig. 5.2. Spaiul de stri n cazul unui 8-puzzle

4.2. Strategii de cutare


Definiia 1. Se numete problem de cutare n spaiul de stri un sistem de forma
PC = (S, T, , , s0, F), n care:
S reprezint totalitatea strilor posibile ale problemei n cauz, denumit spaiul
strilor;
T mulimea operatorilor de tranziie, T = {ti | ti : S S};
ST precondiia de aplicabilitate a operatorilor: t aplicabil n starea s (s, t);
S este o postcondiie de aplicare a operatorilor i definete mulimea strilor
acceptate; (s)=1 dac starea obinut sS i 0 n caz contrar.
s0 starea iniial (datele iniiale ale probleme);
F este o mulime nevid, FS, coninnd strile finale ale problemei.

Definiia 2. Fie PC = (S, T, , , s0, F) i sS o stare. Starea dS este un succesor al


strii s dac exist un operator tT aplicabil n starea s, adic (s, t) i d = t(s) S.
t
Convenim s
d (s td, s d). s se numete printele lui d.

Definiia 3. Fie PC o problem de cutare PC = (S, T, , , s0, F). Numim soluia PC o


secven de operatori de tipul ti1, ti2, ..., tin T astfel nct:
ti1 ti 2
s0 s j1 L t
s j2 s jn F
i2n
IASE 6/16 Cap. 4. Structuri i strategii de cutare

n
s0 s jn (sjn este derivabil din s0), n lungimea soluiei.
Exemplu: Problema fermierullupulcapravarza.
F L C V
s/d s/d s/d s/d

Spaiul de stri S cuprinde |S| = 24 = 16 stri posibile.


Mulimea operatorilor de tranziie T = {tf, tfl, tfc, tfv}.
t
(s, tfl): s
fl
s ' , (s).

Starea final sau soluia problemei poate fi definit:


- explicit (atunci cnd este cunoscut aceast stare);
- implicit (printr-o proprietate a acesteia, prin intermediul unui predicat al strii finale);
La conceperea unui algoritm de cutare se va lua n considerare:
dimensiunea spaiului de cutare: flcv16 stri, tic-tac-toe 9! stri,
ah10120 stri.
conduce algoritmul respectiv la o soluie (este concesibil)?
dac o soluie este gsit este aceasta optim (admisibilitate, algoritm defensibil)?
dac resursele de memorie i de timp de calcul sunt acceptabile?
Se noteaz cu S mulimea tuturor strilor generate de algoritmul de cutare,
S = {sS | s0s}. Proprieti:
1. s0 S ;
2. Dac s S i sd d S.

Clasificarea algoritmilor de cutare


1. Direcia de cutare
cutare direct (forward chaining, data driven): se pornete de la starea
iniial i se identific drumul ctre starea final.
cutare invers (forward chaining): se pornete de la goal i ajunge n starea
iniial.
cutare mixt: cutare n ambele direcii.
2. Spaiul de cutare
cutare complet (exhaustiv), pe ntreaga mulime S.
cutare incomplet, pe o mulime S S. Este cercetat numai un subspaiu al
mulimii S (hill climbing, beam search).
3. Strategia de cutare
irevocabil (fr revenire, metode de gradient).
cu revenire sau backtracking.
4. Exploatarea informaiei stocate n starea curent (informativitate)
cutare oarb sau neordonat blind search).
cutare euristic (informat), estimeaz distana de la starea curent la soluie n
vederea selectrii celui mai promitor descendent.

4.2.1. Algoritmi de cutare exhaustiv

Cutarea pe ntreg spaiul de stri poate fi implementat cu ajutorul a doi algoritmi


reprezentativi:
1. Depth First (cutare n adncime);
2. Breadth First (cutare pe nivel).
n implementarea celor dou metode de cutare se utilizeaz dou liste:
IASE 7/16 Cap. 4. Structuri i strategii de cutare

s0 s0

s1 s1
s8 s9 s2 s3

s2 s4
s6 s7 s5 s6

s3 s7
s4 s5 s8 s9

Depth First Breadth First


Lista Open conine strile care urmeaz a fi expandate (explodate, cercetate);
Lista Close conine strile care au fost deja cercetate.
Elementele acestor liste sunt de forma (s, p).

4.2.1.1. Algoritmul Depth-First

procedure DepthFirst
begin
Open [(s0 nil)];
Close [ ];
while Open [ ] do
begin
extract ((s, p), Open) {Extrage primul element al listei Open}
insert ((s, p), Close) {insereaz primul element n lista Close}
if goal (s) then begin
compune_solutia; exit/continue;
end;
t
D {d S | s d , t T}
for d in D do
if ((d, _) Open) ((d, _) Close) then insert ((d,s), Open);
end;
writeln(Problema nu are soluie)
end;
Start
Problem: Goal

12
10 11 1
9 2 3 4
8 7 6 5

Ordinea operatorilor:
Open: {12}
Close: {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}
IASE 8/16 Cap. 4. Structuri i strategii de cutare

Strategia Depth First se pate utiliza mpreun cu un criteriu de


limitare a adncimii; la atingerea nivelului maxim se va fora revenirea
prin backtraking la examinarea unei noi variante. Problema cea mai
delicat const n anticiparea lungimii soluiei. x y
Exemplu: (d, p, 2) starea d are printele p i adncimea 2.
Dac o stare s este generat a doua oar, se verific adncimea
curent. Dac aceast adncime este mai mic, atunci se va actualiza
n lista Close printele i adncimea. s
(s, x, 3) se modific n lista Close cu (s, y, 2)
Varianta cu controlul lungimii soluiei
procedure DepthFirst
begin
Open [(s0 nil, 0)]
Close [ ]
while Open [ ] do
begin
extract ((s, p, g), Open) {Extrage primul element al listei Open}
insert ((s, p, g), Close) {insereaz primul element n lista Close}
if goal (s) then begin
compune_solutia; exit/continue;
end;
t
D {d S | s d , t T}
gc g+1;
for d in D do
case d of
(d, pe, ge)Open:
if gc<ge then
begin
remove ((d, pe, ge), Open);
insert ((d, pc, gc), Open);
end;
(d, pe, ge)Close:
if gc<ge then
begin
remove ((d, pe, ge), Close);
insert ((d, pc, gc), Open);
end;
else insert ((d, pc, gc), Open)
end; {case}
end;
writeln(Problema nu are soluie)
end;

Dezavantajele cutrii de tip Depth First:


nu gsete n general soluia optim;
algoritmul se poate pierde n explorarea unor ramuri foarte lungi, programul putnd
fi ntrerupt datorit depirii resurselor de memorie.
Soluii:
limitarea adncimii; este greu de estimat lungimea soluiei.
metoda lui KORF.
Exerciiu: S se descrie evoluia listelor Open i Close n problema de cutare
reprezentat mai jos, prin algoritmul Depth First.
IASE 9/16 Cap. 4. Structuri i strategii de cutare

a 1

2
b
5 e 9

i
3 4 6 10 11
j k
c d f

7 8
g h
goal
Open =[ a], Close =[ ] Dx= d, f; % d nu se mai examineaz
Open =[ ], x = a Open =[ f, i],
Dx=b, e, i; x = f, Open =[ i], Close =[ a, b, c, d, e, f],
Close =[ a], Open =[ b, e, i], Dx= g, h;
x = b, Open =[ e, i], Open =[ g, h, i],
Dx=c, d; x = g, Open =[h, i], Close =[ a, b, c, d, e, f, g].
Close =[ a, b], Open =[ c, d, e, i], n lista Close se regsesc perechile (S, P)
x = c, Open =[ d, e, i], Close =[ a, b, c], (Stare, Printe)
x = d, Open =[ e, i], Close =[ a, b, c, d], (b, a), (c, b), (d, b), (e, a), (i, a), (f, e), (g, f).
x = e, Open =[ i], Close =[ a, b, c, d, e], Soluia problemei: aefg.

4.2.1.2. Algoritmul Breadth-First


Dac algoritmul Depth First implementeaz o strategie de tip stiv (LIFO), algoritmul
Breadth First are la baz o strategie de tip coad (FIFO).
Lista Close
Lista Close

Lista Open Lista Open

Algoritmul Depth First Algoritmul Breadth First

Avantaj: gsete soluia de lungime minim.


Dezavantaj: resursele de memorie necesare sunt foarte mari, acestea crescnd
exponenial cu nivelul de adncime explorat.

breadth_first:-
retract(OpenL(S/P)),
assert(CloseL(S/P)),
(goal(S), !, compune_solutia (L), afisare_solutie(L);
generare_succesor(S), breadt_first
).
IASE 10/16 Cap. 4. Structuri i strategii de cutare

0
s

1 2 3 s
Close
4 5 6 7 8 9 10 11 12

d1 d2 d3

13 14

breadth_first:-
write(Problema nu are solutie!), nl.
generare_succesori(S):-
object(R), % Obstacole
( move(S,D,T), not member(D,R), % nu e un obstacol
assertn(D/S),
fail ;
true
).
assertn(D/S):-
(openL(D/_); closeL(D/_)), !
;
assert(openL(D/S)). % assert sau asertz
% cu asserta algoritmul se transforma intr-un algoritm DepthFirst !
afisare_solutia([]).
afisare_solutia([H|T]):- write(H), nl, afisare_solutia(T).
compune_solutia(L):- goal(G), compune_solutia(G,[G],L).
compune_solutia(nil,[H|X],X).
compune_solutia(S,L,X):- closeL(S/P), compune_solutia(P,[P|L],X).

retract elimin din baza de date prima clauz unifiabil cu predicatul citat ca argument;
totodat are loc i instanierea corespunztoare a variabilelor. Dac n baza de date nu exist
nici o clauz unifiabil cu predicatul citat, atunci predicatul retract este inconsistent.
goal(S) testeaz dac starea S este soluie. Dac DA, toate informaiile necesare
construciei soluiei se afl n lista Close.
go:-
start(Start),
goal(Goal),
assert(openL(Start/nil)),
breadth_first([Start/nil], [ ]).
breadth_first([ ], _ ):-
write(Problema nu are solutie!), nl.
breadth_first([S/Cum| Tail0 ], CloseL ):-
( goal(S), !, explica()S/Cum|CloseL]));
(findall(D/T, succesor(S, D, T, Tail0, CloseL),L),
append(Tail0, L, NewOpenL),
breadth_first(NewOpenL, [S/Cum|CloseL]).
succesor ([S, D, C, OpenL, CloseL ):-
object(R),
move(S, D,C),
\+ member(D, R), \+ member(D/_, OpenL), \+ member(D/_, CloseL).
IASE 11/16 Cap. 4. Structuri i strategii de cutare

Exerciiu: S se descrie evoluia listelor Open i Close n problema de cutare prezentat


mai sus (v. algoritmul Depth First) pentru cazul aplicrii algortimului Breadth First.

4.2.2. Algoritmi de cutare euristic


George Polya asocia termenul euristic semnificaia de studiu al metodelor i regulilor
descoperirii i inventicii. n dicionarul limbii romne contemporane euristic = adjectiv al
procedeelor metodologice cu semnificaia care servete la descoperirea unor soluii noi.
Lenat (1982): prin euristic definea acel tip de cunoatere avnd caracterul de
raionament bazat pe experien, specializare, generalizare i analogie cu ajutorul cruia se
efectueaz o interpretare, se ia o decizie sau se acioneaz n vederea atingerii unui obiectiv.
Euristic = euristico = a descoperi <<EUREKA>>
n IA, cutarea euristic se utilizeaz n 2 sisteme de baz:
1. Problema nu are soluie exact datorit inerentelor ambiguiti din datele problemei. Un
diagnostic medical poate fi un exemplu n acest sens: aceleai simptome pot avea la baz
mai multe cauze. Un medic utilizeaz o euristic pentru stabilirea celui mai probabil
diagnostic.
2. Problema are o soluie exact, dar resursele necesare determinrii acesteia pot fi
inaccesibile sau insurmontabile. Ex: jocul de ah are 10120 stri.
Fie S spaiul strilor i f : S + (N ) denumit euristic care face o evaluare a strilor
avnd sS, f(s) desemnnd ansa sau probabilitatea ca s s se gseasc pe drumul cel mai
scurt spre soluia problemei.
Funcia f se mai numete i funcie cost sau lungime. O stare este cu att mai bun cu ct f
este mai mic. Se calculeaz min f(di) pentru 1 i k, adic se alege descendentul de la care
costul determinrii soluiei este cel mai mic. Se spune c descendentul dmin are anse mai mari
sau se gsete cu o probabilitate mai mare pe drumul optim de la starea s la soluia problemei.

s s

d1 d2 dk d1 d2 dk
dj
f(dj)=min f(d)
decendenii cu valorile f minimale
Algoritmul Hill Climbing Algoritmul Beam search

Atunci cnd spaiul strilor este foarte mare, acesta nu poate fi memorat sau parcurs
ntr-un timp rezonabil.
Cutarea euristic este incomplet, dar informaional. Avnd n vedere caracterul
incomplet al cutrii, un algoritm de cutare euristic poate conduce la o soluie suboptimal
sau poate chiar eua, n sensul c nu poate determina o soluie. Cu toate acestea, n multe
situaii cutarea euristic constituie singurul mod de rezolvare a unei mod a unei probleme.
Cutarea euristic poate fi:
complet sau incomplet. Cele incomplete pot fi cu 1 descendent (Hill Climbing)
sau cu civa (cei mai buni Beam search);
cu revenire sau fr revenire (Hill Climbing).
Exemplul 1: TICTACTOE
Se consider c maina (calculatorul) joac prima (cu simbolul ), iar juctorul cu
caracterul o. Euristica se definete astfel: unei stri oarecare i se atribuie ca valoare euristic
numrul posibilelor combinaii (linii+coloane+diagonale) ctigtoare ale calculatorului, deci
numrul liniilor/coloanelor/diagonalelor care conin i nu conin simbolul o.
IASE 12/16 Cap. 4. Structuri i strategii de cutare

Maina

Jucatorul A o o

o o o o o o o o


3 4 4 5 5 4 4 4
Exemplul 2: 8 puzzle
h1(s) numrul jetoanelor care nu se gsesc pe poziia corect.
h2(s) suma deplasrilor jetoanelor spre poziia corect.
h1(s) = 8. Starea s
h2(s) = 1+1+3+3+1+1+3+3 = 16. 1 2 3 8 1 6
4 5 6 3 2 7
Notaii i noiuni utilizate 4
7 8 5
PC = (S, T, , , s0, F) problema de
cutare;
Soluia: (ti1, ti2, ..., tin), tik T, k = 1..n;
ti1 ti 2
s0 s j1 L t
s j2 s jn F
i2n

n
s0 s jn , sjn derivabil n n pai din starea s0.
n lungimea soluiei.
Spunem c starea s are adncimea n dac aceasta a fost derivat (generat) printr-o
derivaie de lungime n. n unele situaii este posibil s definim o funcie cost: cost:T R +.
n
n astfel de cazuri: C(s)=cost(ti1, ti2, ..., tin)= cost (tik ) pentru soluia s:
k =1
ti1 ti 2 ti 2 n
s0 s j1 s j 2
L
s jn = s .
Definiia 1: Un algoritm de cutare denumit admisibil dac n orice context garanteaz
gsirea soluiei de cost minim.
Definiia 2: Un algoritm de cutare denumit defensibil dac acesta garanteaz gsirea
soluiei de lungime minim.
Definiia 3: Un algoritm de cutare denumit concesibil dac acesta garanteaz gsirea
unei soluii indiferent dac este minimal sau nu (evident, dac problema are soluie).
Observaie: Dac operatorilor de tranziie nu li s-a asociat un cost, atunci conceptele de
admisibilitate i defensibilitate coincid. n acest caz putem presupune c fiecare operator este
de cost unitar: C(ti)=1, tiT.
IASE 13/16 Cap. 4. Structuri i strategii de cutare

4.2.2.1. Algoritmul Hill climbing


A fost propus i aplicat de Pearl n 1984. Este un algoritm fr revenire i cu o strategie
incomplet. Este aplicabil n probleme de optimizare utiliznd metoda gradientului.
Se urmrete optimizarea funciei f(x1, x2,..., xn), n sensul determinrii max f, i fie
vectorul soluie Xk la pasul k ,
( ) ( )
X k x1k , x2k , K, xnk X k +1 x1k +1 , x2k +1 , K, xnk +1 .
Soluia la pasul k+1 se stabilete astfel:
X k +1 = X k +
xi
(
f k k
x1 , x2 , K, xnk . )
n acest mod, mergnd pe gradient, se asigur traseul ctre valoarea de max (local sau
global) a funciei f.
Cutare oarb: crtorul este nerbdtor i orb. Se alege panta cea mai abrupt pn
cnd se ajunge la un punct de la care nu se mai poate continua: s-a atins soluia sau s-a ajuns
la un maxim local. Cutarea poate s eueze. Samuel Pearl a utilizat cu succes acest algoritm
n implementarea jocului de dame.

4.2.2.2. Algoritmul Beam search


Este un algoritm cu revenire (backtracking), cu cutare incomplet. Din mulimea
succesorilor se rein numai aceia cu anse maxime (i relativ apropiate) de a figura pe drumul
optim.

4.2.2.3. Algoritmul BEST FIRST (cu revenire)


Acest algoritm se obine din algoritmul Depth First cu
s
amendamentul c descendenii strii curente sunt ordonai
cresctor, prin funcia de evaluare, nainte ca acetia s fie s
depui la nceputul listei Open.
Euristica f este conceput n modul urmtor: Close
f(s) = g(s) + h(s),
g(s) adncimea strii s;
h(s) estimare euristic a lungimii (costului) soluiei d1 d2 d3
pornind de la starea s.
procedure BestFirstSearch Ordonare
begin
Open := [(s nil, 0, h(s)]; Close := [ ];
while Open [ ] do
begin
extract ((s, p, g, h), Open)
insert ((s, p, g, h), Close)
if goal (s) then begin
compune_solutia (Close); exit;
end;
t
D:={d S | s d , t T}
for d in D do
begin
gc := g + Cost(t); fc := gc + h(d);
end;
case d of
(d, _, _, _)Open Close: insert ((d, s, gc, fc), Open);
(d, pe, ge, fe)Open:
if fc<fe then
begin
IASE 14/16 Cap. 4. Structuri i strategii de cutare

remove ((d, pe, ge, fe), Open);


insert ((d, pc, gc, fc), Open);
end;
(d, pe, ge, fe)Close:
if fc<fe then
begin
remove ((d, pe, ge, fe), Close);
insert ((d, pc, gc, fc), Open);
end;
end; {case}
Ordoneaz(Open); { f minimal pe prima poziie}
end; {while}
writeln(Problema nu are soluie)
end;

Exemplul 1: 8 puzzle
h(s) numrul pieselor care nu se gsesc n poziia corect (fr a include spaiul liber);
Funcia de evaluare va fi de forma f(s) = g(s) + h(s):
g(s) adncimea sau costul cu care a fost generat starea s;
h(s) estimare euristic a costului soluiei pornind din starea s.
Starea curent Starea final (goal)

2 8 3 1 2 3
1 6 4 8 4
7 5 7 6 5


h=5 h=3 h=5
f=6 f=4 f=6
g=1
2 8 3 2 8 3 2 8 3
1 6 4 1 4 1 6 4
7 5 7 6 5 7 5


h=4 h=3 h=3
f=6 f=5 f=5
g=2
2 8 3 2 3 2 8 3
1 4 1 8 4 1 4
7 6 5 7 6 5 7 6 5


h=2 h=4
f=5 f=7
g=3
2 3 2 3
1 8 4 1 8 4
7 6 5 7 6 5
IASE 15/16 Cap. 4. Structuri i strategii de cutare

Exemplul 2: Cutare ntr-un spaiu cu obstacole


Euristica: f(s) = f(x, y) = |xgx| + |ygy|. f(s) = 5.
q n
g h f i 3 6 9
p m
g r
j 3 4 7
j Operatori s 0 5 5
k 3 6 9
e a f i
a 1 4 5
l 3 4 7
b 1 4 5
b
s d
c 1 6 7 m 4 3 7
c
l
h
n 5 4 9
k d 1 6 7
p 5 2 7
e 2 3 5
f 2 5 7 r 6 1 7
h 2 5 7 q 6 2 8
g 7 0 7

4.3. Admisibilitatea, local admisibilitatea, monotonia i


informativitatea algoritmilor BEST FIRST (BF)
Se consider euristica f:
f(s) = g(s) + h(s), (1)
g(s) costul prin care a fost generat starea s;
h(s) estimare euristic a lungimii (costului) soluiei pornind de la starea s.
Definiia 1: Un algoritm BF care utilizeaz o funcie euristic de forma (1) se numete
algoritm A.
Pentru a discuta admisibilitatea, se vor introduce urmtoarelor notaii:
f*(s) = g*(s) + h*(s), sS. (2)
g*(s) costul minim (teoretic) cu care poate fi generat starea s;
h*(s) costul minim (teoretic) cu care poate fi obinut soluia pornind din starea s;
f*(s) costul minim (teoretic) al unei soluii care include starea s.
Teorema 1: Un algoritm BF care utilizeaz drept euristic funcia f dat n rel. (2) este
admisibil.
Demonstraie: Rezolvarea este o aplicaie direct a principiului de optimabilitate al lui
Bellman Kalaba din programarea dinamic (o soluie optim este compus din subsoluii
optimale):
cost(s) costul minim al soluiei,
cost ( s ) = min {cost (t d ) + cost (d )}
tT , ( s ,t )
d =t ( s )
f*(s) = g*(s) + h*(s),
g(s) g*(s),
g(s) g*(s) (3)
h*(s) nu se tie sau este foarte greu de stabilit. n schimb se poate aprecia dac:
h(s) h*(s). (4)
Ex. Puzzle 33, h1(s) h*(s), sS.
Definiia 2: Un algoritm A (BF) a crui component h satisface proprietatea (4) este
denumit algoritm A*.
Teorema 2: Orice algoritm A* este admisibil.
Corolar 1: Algoritmul Breadth First este admisibil.
Demonstraie: Breadth First este un algortim BF pentru care euristica este identic egal cu 0.
IASE 16/16 Cap. 4. Structuri i strategii de cutare

Remarc: O euristic h cu proprietatea (4) se numete euristic A* admisibil.


Dei admisibil, un algoritm BF nu genereaz de fiecare dat stare s cu un cost minim. n
final, dup ce soluia a fost obinut, fiecare stare component este generat cu cost minim .
Definiia 3: Un algoritm A*, care genereaz fiecare stare sS cu proprietatea c un cost
g(s) = g*(s), se numete local admisibil.
Admisibilitatea nu implic n general local admisibilitatea.
Definiia 4: O euristic h este denumit monoton dac sunt ndeplinite urmtoarele
condiii:
1) Oricare ar fi strile si, sj S astfel nct sj este un descendent al lui si, s avem:
h(si) - h(sj) cost(si, sj) = h*(si, sj).
2) h(g) = 0, g soluia problemei.
Teorema 3: Un algoritm BF, care utilizeaz o funcie de evaluare f(s) = g(s) + h(s) a crei
component h este monoton, este admisibil.
Demonstraie:
s0, s1, ..., sn = g
h(s0) - h(s1) cost(s0, s1)
h(s1) - h(s2) cost(s1, s2)
....................................................
h(sn-1) - h(sn) cost(sn-1, sn)
_________________________
h(s0) cost(s0, sn) = h*(s0) algoritmul este admisibil (rel. 4).
Teorema 4: Un algoritm A* a crei funcie h este monoton, este local admisibil.
Exemplul 1: B, sj
h(si) = AC; h(sj) = BC; h(g) = OC.
h(si) - h(sj) = ACBC < AB = h(sisj) cost(si,
s j)
h monoton local admisibil.
Definiia 5: Fie h1 i h2 dou euristici A*
admisibile. Se spune c h1 este mai informaional OC, g A, si
(informativ) dect h2 dac pentru sS avem
h2 h1 .
Teorema 5: Fie h1 i h2 dou euristici
Timp de rezolvare problem
A* admisibile astfel nct h2 h1, sS
(h1 mai informaional dect h2), atunci
spaiul strilor cercetate de algoritmul cu
h1 este un subspaiu al strilor cercetate de
algoritmul cu h2.
Timp

Sc(h1) Sc(h2), h2 h1 h*.


Corolar 2: Algoritmul BF este cel mai Timp evaluare
slab algoritm admisibil (are euristica 0). funcie euristic
Timp de cutare
n practic este necesar aplicarea unui
compromis ntre complexitatea funciei
euristice i dimensiunea spaiului de
cutare, astfel nct timpul de cutare s Informativitate
fie minim.

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