Sunteți pe pagina 1din 10

INTELIGENŢĂ ARTIFICIALĂ 2011 – 2012

CURS 2

2.4 Metode căutare

2.4.1 Introducere
Fie s nodul iniţial (numit şi rădăcina grafului). Prin aplicarea tuturor regulilor asupra lui s se
crează toţi descendenţii sau succesorii lui s. Metodele de căutare pe care le vom prezenta vor
permite generarea, plecând din s, a unui graf până când apare un nod acceptabil ca soluţie.

Vom face referire la două liste distincte:


¾ Prima se va numi "open list" şi va conţine nodurile pe care metoda trebuie să le
dezvolte (a dezvolta = să găsească descendenţii prin aplicarea regulilor).
¾ Cea de a doua listă "closed list" conţine, prin opoziţie, nodurile care au fost deja
dezvoltate. Toţi succesorii fiecărui nod sunt creaţi prin dezvoltarea unui nod. O metodă de
căutare ("research graph") se poate prezenta într-o formă generală ca mai jos.
Este necesar să se precizeze, pe cât posibil, ce trebuie făcut cu succesorii lui n care se găsesc
deja în listele open sau closed. Procedura este, într-adevăr, generală în măsura în care se
precizează explicit o structură de graf şi nu de arbore.

Fiecare nod va avea un pointer către ascendentul său (dintre mai mulţi posibili) care se găseşte
pe cel mai bun drum care duce de la radacina s la nodul în discuţie (vom preciza ulterior ce
înseamnă "cel mai bun"). Pentru succesorii lui n deja prezenţi în listele open sau closed se
pune problema dacă nu e convenabil să se modifice pointerul asociat. Nu este imposibil să se
găsească ulterior un drum mai convenabil de la s către el. Pentru nodurile deja prezente în
lista closed, şi care deci au fost dezvoltaţi anterior, se poate să se decidă modificarea sau nu a
pointerului către succesori.

PROCEDURE
BEGIN
Se iniţializează listele "open list" şi "closed list"; Se pune s în "open list";
REPEAT
BEGIN
IF ("open list" este vidă)
THEN Eşec;
ELSE BEGIN
n:=primul nod al "open list";
transferă nodul n din "open list" în "closed list";
IF (n=soluţia)
THEN Soluţie;
ELSE BEGIN
Se dezvoltă n;
M:=mulţimea succesorilor lui n;
Identificarea elementelor lui M care nu au apărut încă
nici în "open list" şi nici în "closed list";

CURS 2 IA 2011/2012 1/10


Se introduc aceste elemente în "open list";
Se ordonează "open list";
END;
END;
END;
UNTIL (Eşec sau Soluţie)
END;

2.4.1 Introducere
Pentru ilustrare considerăm un exemplu în continuare, în figurile 2.4 şi 2.5:

Nodurile haşurate sunt în list closed, celelalte în lista open. Săgeţile indică dezvoltarea
nodurilor, iar săgeţile conţinutul pointerilor aşa cum s-a descris anterior. Unicul
succesor al nodului n este a deja prezent în lista închisă. Să presupunem că asociem fiecărui
arc un cost unitar; drumul de la a la s generat anterior avea costul 4; noul drum descoperit prin
dezvoltarea lui n nu are decât un cost 2. Pointerul lui a va fi deci dirijat către n. Pe de altă
parte succesorul b al lui a avea poiterul lui către c în măsura în care costul drumului scb (care
este 4) este mai bun decât costul drumului sab (care este 5). Dar deschiderea drumului sna
repune în discuţie alegerea pentru că oferă un cost de numai 3. La fel se judecă şi pentru nodul
d.

Trebuie să facem trei precizări finale:


- pointerii definesc un arbore în graf care indică cel mai bun drum care permite atingerea
diferitelor noduri plecând din rădăcină.
- am indicat că procedura trebuie să testeze prezenţa nodurilor nou dezvoltate în liste; dacă
structurile de date descriind starea curentă a problemei sunt complexe, acest test poate fi
foarte problematic.
- am vorbit de o ordonare a listei open după dezvoltarea nodului curent n. Maniera de
ordonare această listă poate avea o influenţă determinantă asupra eficacităţii întregii
proceduri. Vom examina câteva abordări clasice în acest sens.

s s

n n

c a a
c

b d
b d
Figura 2.5 Exemplu de dezvoltare a unui graf –
Figura 2.4 Exemplu de dezvoltare a unui graf pasul următor celui din figura 2.4

CURS 2 IA 2011/2012 2/10


s Noduri din closed list

Noduri din open list

Limită de profunzime

Noduri inacceptabile ca
soluţie

Figura 2.6 Metoda depth - first

2.4.2 Depth-first (prioritar în profunzime)


Acest mod de căutare constă pur şi simplu în a ordona, în "open list", nodurile în ordinea
descrescătoare a profunzimii lor în graf. Nodurile de aceeaşi profunzime se ordonează
arbitrar. Numele de "depth first" arată tocmai că întotdeauna nodul cu cea mai mare
profunzime din open list va fi dezvoltat.
Pentru a evita ca să se facă căutarea după drumuri care se dovedesc nefructuoase, care nu
conduc rapid la stări acceptabile ca soluţii, se defineşte o profunzime maximă. Aceasta
semnifică că nu se vor dezvolta nodurile care au o profunzime mai mare decät această limită.
Această strategie este de fapt una de tip backtracking, criteriul care declanşează
backtrackingul fiind profunzimea. O astfel de strategie este prezentată în exemplul următor,
figura 2.6:

CURS 2 IA 2011/2012 3/10


s s

Figura 2.7 Metoda breadth - first

2.4.3 Breadth-first (prioritar pe lărgime (orizontală))


Pentru strategia anterioară avem inconvenientul că şi atunci când am găsit o soluţie nu putem
avea certitudinea că am găsit cea mai bună soluţie sau măcar una "bună". Există o alternativă
simplă, numită breadth - first. Metoda constă în a adopta o ordonare inversă pentru nodurile
din open list; în concluzie, acestea sunt ordonate după ordinea crescătoare a profunzimii lor în
graf. Numele de breadth - first vine de la faptul că toate nodurile unui acelaşi nivel sunt
dezvoltate înainte de a trece la nivelul următor. Un exemplu în figura 2.7.

Prin această metodă se asigură găsirea drumului cel mai scurt către soluţie (dacă există) dar cu
preţul dezvoltării unui număr considerabil de noduri. Timpul de calcul şi volumul de memorie
disponibilă devin importante.

2.4.4 Best - first (prioritar cel mai bun)

2.4.4.1 Definiţii

Cele două strategii anterioare sunt strategii foarte generale care nu utilizează nici o informaţie
specifică (numită euristică) despre domeniul de aplicaţie. În acest fel eficacitatea lor este
limitată. Metoda best - first selecţionează la fiecare pas nodul cel mai promiţător din open list
în funcţie de un criteriu euristic ales corespunzător. Această metodă seamănă cu metoda depth
first, dar cu o deosebire esenţială: o ramură puţin promiţatoare nu este abandonată pentru că
se atinge o profunzime limită (destul de greu de predicţionat) a grafului ci pentru că funcţia
euristică de evaluare se degradează pe măsură ce se înaintează pe această ramură. La un
moment dat o altă ramură devine mai atrăgătoare.

CURS 2 IA 2011/2012 4/10


s s
s

(2) (4) (3) (4) (3)

(4) (2)

s s

(4) (3) (4)

(4) (4) (3) (4) (6)

(5) (5)

Figura 2.8 Metoda best - first

Fie f(n) această funcţie reală, euristică de evaluare pentru nodul n (măsoară cât de promiţător
este acest nod). În principiu această funcţie poate fi oricare. Ordonarea nodurilor în open list
dinaintea dezvoltării se face în ordinea crescătoare a valorilor lui f (care este deci asimilată
unui cost). În figura 2.8 se prezintă un exemplu de aplicaţie cu acest tip de strategie. Pentru
fiecare nod, între paranteze, este trecută valoare lui f.

2.4.4.2 Algoritmii A şi A*

Vom alege o funcţie de evaluare particulară: se va estima costul celui mai bun drum (deci
celui de cost minim) care pleacă din nodul rădăcină s şi conduce la nodul soluţie, trecând prin
nodul n. Funcţia nu e definită pentru nodurile pentru care un astfel de drum nu există. În
aceste puncte presupunem că f are valori infinite.

Această funcţie poate fi definită ca o sumă de doi termeni:

f(n)=g(n)+h(n)
unde:
ƒ g(n) este o estimare a costului g* a celui mai bun drum de la s la n, iar
ƒ h(n) este o estimare a costului h* a celui mai bun drum de la n la nodul soluţie.

O bună aproximaţie a lui g* este suma costurilor asociate arcelor de-alungul drumului de la s
la n în structura arborescentă generată prin procedura de căutare în graf (graph search). Acest
drum este cel mai bun drum dintre toate drumurile găsite deja până în acest moment prin
aplicarea procedurii. Această valoare g(n) poate, pentru anumite noduri, să descrească, să se

CURS 2 IA 2011/2012 5/10


micşoreze, prin continuarea aplicării procedurii. Revenind la estimarea g(n), avem deci
întotdeauna, pentru orice n:

g(n) ≥ g*(n)

Din contră, pentru estimarea h(n) a lui h*(n), trebuie să ne bazăm pe informaţii euristice,
adică specifice domeniului aplicaţiei.

Procedura de căutare în graf care utilizează o astfel de funcţie de evaluare f(n) pentru a ordona
nodurile din open list este numită "algoritm A".

Se observă că dacă pentru un drum costul este chiar lungimea lui, măsurată în număr de
segmente, atunci g(n) ≡ profunzimea nodului n în graf şi h(n) ≡ 0 atunci algoritmul A
corespunde strategiei breadth first.

Se poate arăta că dacă h(n) este un prag inferior lui h*(n), deci dacă:

h(n) ≤ h*(n), ∀ n,

atunci algoritmul A (care se numeşte acum algoritmul A*) furnizează un drum optim către
soluţie.

Cum h(n) ≡ 0 este cu siguranţă un prag cu proprietatea de mai sus demonstraţia va fi în egală
măsură valabilă şi pentru strategia breadth-first (acolo "optimal" va însemna "cel mai scurt").

Fie f*(s) este costul unui drum optimal conducând la soluţie. În orice moment există în open-
list cel puţin un nod care aparţine drumului optimal. Fie n* nodul cel mai apropiat de s dintre
aceste noduri. Avem:

f(n*)=g(n*)+h(n*)

Ştim acum că A* a găsit drumul optimal de la s la n* şi că toţi ascendenţii lui n*, de pe acest
drum, sunt în closed list. Ca urmare:

g(n*)=g*(n*)
şi
f(n*)=g*(n*)+h(n*)

Prin definiţia algoritmului A* ştim că:

h(n*) ≤ h*(n*)
Deci:
f(n*) ≤ g*(n*) + h*(n*)
Şi
f(n*) ≤ f*(n*).
Dar
f*(n*)=f*(s) pentru că n* şi s aparţin drumului optimal.

Rezultă atunci că:

f(n*) ≤ f* (s).

CURS 2 IA 2011/2012 6/10


Sfârşitul procedurii A* nu are loc decât dacă graful este finit, ceea ce şi presupunem. Acest
sfârşit poate fi EŞEC sau SOLUŢIE. În acest ultim caz se poate demonstra că drumul găsit
este cu siguranţă optimal.

Să presupunem prin reducere la absurd că A* termină căutarea într-un nod t soluţie, fără a
găsi drumul optimal.

Avem deci:

f(t)=g(t) > f*(s)

Şi deci:

f(n*) ≤ f*(s) < f(t)

unde n* este un nod al drumului optimal şi care se găseşte obligatoriu în open list. Această
ultimă inecuaţie conduce la o concluzie absurdă pentru că A* ar fi selecţionat mai degrabă pe
n* decât pe t din open list.

2.4.4.3 Algoritmul AO*

Pentru a rezolva problemele complexe care pot fi descompuse într-o mulţime de probleme
mai simple, este interesant să se utilizeze reprezentarea prin grafuri AND/OR (ŞI/SAU). În
grafurile SAU (folosite până acum) nodurile reprezintă diferitele stări ale problemei în timp ce
arcele (direcţionale) indică operatorii care pot fi aplicaţi în fiecare nod. În conformitate cu
filozofia grafurilor SAU se caută un drum, deci o secvenţă de aplicări ale operatorilor, de la o
stare iniţială către o stare finală, care este soluţia. Aceasta semnifică că în fiecare nod
aparţinând respectivului drum, se aplică unul din operatorii disponibili.

În grafurile ŞI/SAU se are în vedere reducerea complexităţii problemei de rezolvat.


Descompunerea unei probleme complexe în subprobleme mai simple dă naştere la arce,
numite arce ŞI, în măsura în care rezolvarea problemei complexe impune rezolvarea
simultană a problemelor mai simple (vezi figura 2.9).

P P – Problema iniţială
SPi – Subprobleme mai simple

SP1 SP2 SP3

Figura 2.9 Descompunerea problemei iniţiale

Arcul ŞI se mai numeşte şi k conector dacă există k descendenţi şi se figurează ca o linie care
conectează componentele sale. Un graf ŞI/SAU este deci un graf SAU generalizat în care se
găsesc k conectori (k ≥ 1), şi nu numai 1 conectori ca în cazul clasic (figura 2.10). Algoritmul
A*, descris anterior, nu convine pentru căutarea soluţiei într-un astfel de graf ŞI/SAU.
Inconvenientul este acela că un arc care pleacă de la un nod la altul nu poate fi considerat
independent de celelalte arce cu care face parcte dintr-un arc ŞI. Pentru a exemplifica această
remarcă vom considera figura 2.11.

CURS 2 IA 2011/2012 7/10


P

SP1 SP2 SP3 SP4 SP5

Figura 2.10 Graf ŞI/SAU

a b c
(6) (3) (3)

Figura 2.11 Arce dependente

S
(16)
16
21

a b c
(15) (8) (11)

d e i j k l
(6) (7) (3) (3) (4) (5)

Figura 2.11 Exemplu de calcul al costurilor (15+1 de la arc=16; 8+11+2 de la arce=21)

Între paranteze este scrisă valoarea lui h pentru fiecare nod. Atunci când costul pentru fiecare
arc simplu în parte este 1 şi costul unui arc ŞI este suma costurilor componentelor se poate
uşor calcula valoarea corespunzătoare a lui f. Se presupune h monotonă. Pentru A* s-ar fi
selecţionat nodul b pentru că f(b) are doar valoarea 3+1=4, dar în acelaşi timp va trebui
dezvoltat şi nodul c ceea ce va conduce la un cost global de 9. Deci e mai bine să fie dezvoltat
nodul a în ciuda faptului că f(a)=7.

Un alt exemplu este dat în figura 2.12, în care este indicat la nivelul lui s costul celor două
drumuri posibile. Se observă că i şi j trebuie rejectate deşi au valori mici pentru f, funcţia de
evaluare, şi deşi ascendentul lor direct este şi el bine plasat din acest punct de vedere.

În astfel de grafuri este necesar să se respecte următoarele principii:


¾ Operaţia TOP-DOWN (descendentă, de sus în jos)
ƒ plecând din nodul iniţial s şi urmărind cel mai bun drum curent (în sensul lui f) se
detectează nodurile care încă n-au fost dezvoltate.
ƒ printre aceste noduri se selecţionează şi se dezvoltă un nod. Succesorii sunt adăugaţi în
graf şi valorile lor corespunzătoare, h, sunt calculate euristic.

CURS 2 IA 2011/2012 8/10


S S
(3) (4)
(3) (6)

(4) (4)
a b c a b c
(2) (1) (1) (5) (1) (1)

S
(5) d e
(6) (4) (5)

(5)
a b c
(5) (2) (1)

(3) (2)

d e i j K
(4) (5) (2) (0) (0)

S
(5)
(6)

(5)
a b c
(5) (2) (1)
(5)
(6) (3) (2)

d e i j K
(4) (5) (2) (0) (0)

Figura 2.13 Arce dependente

¾ operaţia BOTOM-UP (ascendentă, de jos în sus)


ƒ se modifică valoarea lui h asociată unui nod pe baza informaţiilor oferite de succesori.
Această informaţie se propagă spre rădăcina grafului şi se marchează, în fiecare nod întâlnit,
conectorul cel mai promiţător care a fost depistat. Această operaţie ascendentă va modifica cel
mai bun drum găsit, adică secvenţa conectorilor marcaţi.
ƒ procedura se opreşte de îndată ce un astfel de drum selecţionat întâlneşte un nod
soluţie, acceptabilă pentru problemă.

Exemplificăm prin figura 2.13, unde conectorii făcând parte din cel mai bun drum sunt
marcaţi cu săgeţi. Fiecare nod are valoarea h corespunzătoare înscrisă între paranteze. O
soluţie pentru această problemă este producţia simultană a stărilor j şi k. În finalul acestei
scurte descrieri a algoritmului AO*, este interesant să arătăm un caz în care drumul către
soluţie nu este optimal: este cazul unor subprobleme interactive, în figura 2.14.

CURS 2 IA 2011/2012 9/10


s

c
Figura 2.14 Exemplu de soluţie AO neoptimală

În exemplul de mai sus se presupune că se poate ajunge la soluţie şi prin a şi prin c. Dacă din
neşansă valoarea lui h din c este întotdeaina inferioară lui h din a, algoritmul se va propaga
prin a şi prin c, când este clar că ar fi suficient să meargă numai prin a.

2.4.5 Means-end (means=mijloc, intermediar, end=sfärşit)


S-au prezentat strategii care lucrează în sens direct sau invers. Pentru probleme netriviale este
indicată o metodă combinată. Analiza "means-end" este bazată pe măsurarea diferenţelor între
starea curentă şi starea finală. Aceste diferenţe sunt calificate şi cuantificate, se caută
operatorul (printre cei disponibili) susceptibil de a reduce aceste diferenţe cu cât mai mult.

Dar acest operator, în cele mai multe din cazuri, nu va fi direct aplicat în situaţia curentă,
decât în măsura în care precondiţia lui va fi îndeplinită:
¾ Din alegerea acestui operator se crează deci o subproblemă care constă în a produce
starea unde operatorul este aplicabil.
¾ Pe de altă parte operatorul nu furnizează cu necesitate exact starea finală dorită. Se
crează astfel o a doua subproblemă care constă în trecerea de la starea produsă de operator
(când acesta va fi aplicabil) la starea finală.

Fiecare dintre aceste subprobleme este, dacă operatorul este bine ales, mai simplă decât
problema iniţială. Se aplică acum recursiv metoda "means-end" la fiecare dintre aceste două
subprobleme. Se pot da priorităţi diferite la diferenţele măsurate în timpul aplicării
procedurii, în aşa fel încät să se obţină cele mai mari reduceri.

CURS 2 IA 2011/2012 10/10

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