Documente Academic
Documente Profesional
Documente Cultură
IA03 - Cautare Informata
IA03 - Cautare Informata
49
Căutarea informată (euristică)
Factorii de ramificare mari sunt o problemă
serioasă
Este necesară o modalitate de a reduce numărul
de noduri vizitate
Metodele de căutare euristică încearcă alegerea
„inteligentă” a nodurilor care trebuie expandate
2
Euristică
εὑρίσκειν = a găsi, εὕρηκα/evrika = am găsit
O euristică este o metodă care furnizează rapid o
soluție, nu neapărat optimă
Este o metodă aproximativă, spre deosebire de un
algoritm exact optim
Deși nu garantează găsirea soluției optime, metodele
euristice găsesc de obicei o soluție acceptabilă și
deseori chiar soluția optimă
3
Metode neinformate vs.
metode informate
Metodele neinformate (oarbe)
Nu exploatează semnificațiile stărilor pentru a ordona
nodurile din frontieră
Exploatează doar pozițiile nodurilor în arbore
Tratează toate problemele la fel
Metodele informate (euristice)
Ordonează nodurile frontierei în funcție de semnificațiile
stărilor
Cele mai promițătoare noduri sunt plasate la începutul
frontierei
Utilizează cunoștințe specifice fiecărei probleme
4
Căutarea best-first
Evaluează cât de bun (promițător) este un nod
Utilizează o funcție de evaluare f care atribuie
fiecărui nod n un număr real f(n) 0
f(n) este un cost estimat
Cu cât este mai mic f(n), cu atât este mai bun nodul n
Căutarea best-first sortează frontiera în ordinea
crescătoare a lui f
Pentru f egale, se poate decide în mod aleatoriu
5
Definirea lui f
Funcții utilizate în general
g(n) este costul căii de la nodul inițial la n
Este cunoscută
h(n) este estimarea costului căii de la n la nodul scop
Este o estimare euristică
Căutarea de cost uniform (neinformată)
f(n) = g(n)
Căutarea greedy
f(n) = h(n)
Căutarea A*
f(n) = g(n) + h(n)
Reunește ideile căutărilor de cost uniform și greedy
Problema principală: găsirea celei mai bune funcții h
6
Exemplu: căutarea greedy
(Arad – București)
7
Căutarea greedy
Iași – Făgăraș: prin Piatra Neamț
Dacă se permite revizitarea stărilor, apare o buclă infinită
9
Caracteristicile căutării greedy
Nu este optimă
Nu este completă
10
Calitatea căutării este dată de h
Când h = costul până la scop
Sunt expandate doar nodurile de pe calea corectă
Se găsește soluția optimă
11
Euristici admisibile
Fie h*(n) costul căii optime de la n la nodul scop
Funcția euristică h(n) este admisibilă dacă:
0 h(n) h*(n)
Dacă G este scopul, atunci h(G) = 0
O funcție euristică admisibilă este întotdeauna
optimistă (niciodată nu supraestimează)
12
Căutarea A*
f(n) = g(n) + h(n), unde:
g(n) = costul celei mai bune căi găsite până la n
h(n) = o funcție euristică admisibilă
Presupunem că: p, c, : cost(p, c) > 0
Între două noduri diferite există întotdeauna un cost pozitiv
Căile infinite au cost infinit
Folosește două liste: lista deschisă și lista închisă
Mulțimea nodurilor din lista deschisă reprezintă frontiera,
iar cele din lista închisă, nodurile deja vizitate
13
Greedy vs. A*
f(n) = g(n) + h(n)
f(B) = 15 + 20 + 30 = 65
f(C) = 15 +10 + 35 = 60
14
Structuri de date
15
Structuri de date
16
Pseudocod A* simplificat
17
Pseudocod A* optimizat
18
Pseudocod A* optimizat
19
Important: Algoritmul A* nu
expandează nodurile arborelui în
mod greedy, ci după valorile
funcției f ale nodurilor din lista
deschisă. Deoarece aceasta este
o listă de priorități, căutarea
poate „sări” dintr-un subarbore
în altul, de exemplu, Râmnicu
Vâlcea – Făgăraș. A se vedea și
exemplul următor.
20
Revizitarea stărilor
Euristica h este
c=1 2 admisibilă
h = 100 1
21
Revizitarea stărilor
c=1 2
f = 1+100 2+1
h = 100 1
2
1
90 4+90
100
?
0 104
1 2
1+100 2+1
100 1
2
1
90 2+90 4+90
100
0 102 104
23
Cum funcționează A*
Iterația 1
A open list: A (0+0:0)
1 closed list:
2 expand A (0+0:0)
successor(A): B (1+100:101)
add to open list: B (1+100:101)
100 B C 1
successor(A): C (2+1:3)
add to open list: C (2+1:3)
2
1 add to closed list: A (0+0:0)
D. 90
Iterația 2
open list: C (2+1:3) B (1+100:101)
100 closed list: A (0+0:0)
expand C (2+1:3)
successor(C): A (4+0:4)
E. 0 skip: parent pruning
successor(C): D (4+90:94)
add to open list: D (4+90:94)
add to closed list: C (2+1:3)
24
Cum funcționează A*
Iterația 3
A open list: D (4+90:94) B (1+100:101)
1 closed list: A (0+0:0) C (2+1:3)
2 expand D (4+90:94)
successor(D): B (5+100:105)
skip: lower G in open list
100 B C 1
successor(D): C (6+1:7)
skip: parent pruning
2
1 successor(D): E (104+0:104)
D. 90 add to open list: E (104+0:104)
add to closed list: D (4+90:94)
100 Iterația 4
open list: B (1+100:101) E (104+0:104)
closed list: A (0+0:0) C (2+1:3) D (4+90:94)
E. 0 expand B (1+100:101)
successor(B): A (2+0:2)
skip: parent pruning
successor(B): D (2+90:92)
add to open list: D (2+90:92)
add to closed list: B (1+100:101)
25
Cum funcționează A*
Iterația 5
A open list: D (2+90:92) E (104+0:104)
1 closed list: A (0+0:0) C (2+1:3) D (4+90:94) B (1+100:101)
2 expand D (2+90:92)
successor(D): B (3+100:103)
skip: parent pruning
100 B C 1
successor(D): C (4+1:5)
skip: lower G in closed list (& parent pruning)
2
1 successor(D): E (102+0:102)
D. 90 add to open list: E (102+0:102)
replace in closed list: D (2+90:92)
100 Iterația 6
open list: E (102+0:102) E (104+0:104)
closed list: A (0+0:0) C (2+1:3) D (2+90:92) B (1+100:101)
E. 0 expand E (102+0:102)
solution: A - B - D - E
26
Euristici monotone
p
O euristică h este monotonă cost(p,c)
(sau consistentă) dacă:
p un nod și c un fiu al lui p: c h(p)
2
1
Ecuația pathmax: la generarea unui nod fiu c al lui p D. 90
f(c) = max( f(p), g(c) + h(c) ) 100
În exemplul anterior: nodul D
E. 0
f(D) = max( f(C), g(D) + h(D) ) = max(3, 94) = 94
f(D) = max( f(B), g(D) + h(D) ) = max(101, 92) = 101
Ecuația pathmax face ca valorile lui f să fie monoton
nedescrescătoare pe căile traversate din arborele de căutare
Dacă există mai multe căi prin care se poate ajunge la scop,
valorile f pot rămâne nemonotone pentru căile netraversate încă
28
Exemplul anterior: comparație
A
1 2
100 B C 1
2
1
D. 90
Fără pathmax Cu pathmax
Iterația 4
100
Iterația 4
open list: B (1+100:101) E (104+0:104) open list: B (1+100:101) E (104+0:104)
closed list: A (0+0:0) C (2+1:3) D (4+90:94)
E. 0 closed list: A (0+0:0) C (2+1:3) D (4+90:94)
expand B (1+100:101) expand B (1+100:101)
successor(B): A (2+0:2) successor(B): A (2+0:101)
skip: parent pruning skip: parent pruning
successor(B): D (2+90:92) successor(B): D (2+90:101)
add to open list: D (2+90:92) add to open list: D (2+90:101)
add to closed list: B (1+100:101) add to closed list: B (1+100:101)
29
Efectul euristicilor monotone
30
Proprietăți
A* este complet și optim dacă nodurile care
revizitează stările nu sunt eliminate
Timp: calitatea euristicii h scade timpul necesar
Cazul cel mai favorabil: h este perfectă, O(d)
Cazul cel mai defavorabil: h = 0, O(bd) ~ BFS
Spațiu
Cazul cel mai defavorabil: O(nS), unde nS este numărul de
stări
31
Cazul cel mai defavorabil
Exemplu de caz cel mai defavorabil pentru A* cu
euristici inconsistente: familia Martelli – G5
O(2n) expandări de noduri pentru găsirea soluției pentru
calea de la n5 la n0
În noduri: h()
Pe arce: cost()
32
După expandarea lui n5 (fără pathmax), lista deschisă este:
n1 (11+0), n2 (9+3), n3 (6+7), n4 (1+13)
Înainte de găsirea soluției, lista deschisă este: n0 (23+0), n0 (24+0),
n0 (26+0), n0 (27+0), n0 (28+0), n0 (29+0), n0 (30+0)
Soluția: n5 - n4 - n3 - n2 - n1 - n0 , 17 noduri expandate
Cu pathmax, după expandarea lui n5, lista deschisă este:
n1 (11+0:23), n2 (9+3:23), n3 (6+7:23), n4 (1+13:23)
Dacă ordinea în care sunt adăugați în listă succesorii este cea mai
favorabilă (n4, n3, n2, n1), soluția este găsită doar cu 6 noduri
expandate
*2011_Felner - Inconsistent heuristics in theory and practice.pdf
33
Optimizări
Optimizarea listelor
Căutarea celui mai bun nod, de fiecare dată, este ineficientă
Lista deschisă trebuie să fie o listă sortată sau un arbore heap*
Lista închisă poate fi un tabel de hash (hashtable**)
Optimizarea spațiului de căutare
Cel mai simplu caz: parent pruning – evitarea expandării ca succesor a
părintelui unui nod, prin care s-ar reveni în starea imediat anterioară
Dacă se ignoră succesorii care au o stare deja vizitată, nu se mai
garantează optimalitatea algoritmului
* Un heap este un arbore “binar” complet care are proprietarea că valoarea fiecărui vârf este mai mare sau egală cu valoarea
fiecărui fiu al său.
** Tabela hash este o structură de date prin care valorile cu care lucrăm sunt transformate în valori numerice dintr-un interval
numeric stabilit printr-un algoritm unidirecțional, numit funcție de dispersie, și adăugate într-o structură de date care de regulă
are dimensiuni mici și care este identificată prin valoarea funcției de dispersie. Astfel, mulțimea valorilor este partiționată astfel
încât toate valorile dintr-o submulțime a partiției dau aceiași valoare prin funcția de dispersie. 34
Optimizări
Aplicarea pe grid, de exemplu pentru jocuri, este costisitoare.
Factorul de ramificare este mare: 4, 8 sau 6 pentru grid
hexagonal. Există foarte multe stări dacă gridul este mare
Multe căi au aceeași lungime. A* le poate explora pe toate.
Când valorile f sunt egale, se compară după valorile h
Altă metodă pentru departajare: se preferă căile apropiate de
linia dreaptă între starea inițială și starea scop
h poate fi mărită puțin, devenind neadmisibilă. Dacă funcția
rezultată h’ supraestimează rareori funcția h* cu o valoare mai
mare decât v, atunci algoritmul va găsi rareori o soluție al cărei
cost este mai mare cu v decât costul optim
35
Algoritmul HPA*
A* ierarhic cvasi-optim (Near-Optimal Hierarchical
Pathfinding) - Botea_Near Optimal Hierarchical Path-Finding.pdf
HPA* (Hierarchical Path-Finding A*) = abordare ierarhică pentru
reducerea complexității problemelor de căutare a traseelor pe hărți
bazate pe grile
tehnica abstractizează o hartă în clustere locale legate între ele
la nivel local, distanțele optime pentru traversarea fiecărui cluster sunt
calculate în prealabil și stocate în memoria cache
la nivel global, clusterele sunt traversate într-un singur pas mare
36
Algoritmul IDA*
Căutarea iterativă în adâncime A* (Iterative
Deepening A*)
Principiu similar cu acela al căutării iterative în
adâncime (neinformate)
În loc de niveluri în arbore, se folosesc contururi de
cost ale funcției f
În cadrul unui contur, se face o căutare în adâncime
37
Algoritmul MM
Algoritm euristic bidirecțional în care căutările se întâlnesc
garantat la mijloc (Bidirectional Search that Is Guaranteed
to Meet in the Middle)
Algoritmul face două căutări similare cu A* din starea
inițială, respectiv finală, deschizând la un moment dat
nodul cu prioritatea cea mai mică din cele două cozi
Prioritatea este definită drept: pr(n) = max(f(n), 2g(n))
Termenul 2g împiedică nodurile să se depărteze foarte
mult de starea inițială, favorizând intersectarea la mijlocul
distanței
38
Crearea de euristici
O euristică admisibilă poate fi costul soluției optime a
unei probleme relaxate prin eliminarea
constrângerilor
De exemplu, pentru navigare:
Distanța Manhattan* corespunde
eliminării obstacolelor
Distanța euclidiană corespunde
eliminării obstacolelor și a
constrângerilor de mișcare pe grid
* https://ro.wikipedia.org/wiki/Distan%C8%9B%C4%83_Manhattan
39
Euristici pentru 8-puzzle
1 2 3
Starea
curentă 4 5 6
7 8 11 22 33
Numărul de căsuțe
diferite (fără a 44 55 66
include spațiul) 1 2 3
Starea
77 8 8
scop
4 5 6
7 8
N N N
Doar 8 este plasat diferit, deci funcția
euristică este evaluată la 1 N N N
Euristica ne spune că o soluție ar putea fi N D
găsită în (cel puțin) o mutare: h(scrt) = 1
40
Euristici pentru 8-puzzle
3 2 8 3 3
Starea
curentă 4 5 6 2 spații
Distanța 7 1
Manhattan (fără
a include spațiul) 8
1 2 3
Starea 3 spații
scop
4 5 6
8
7 8
1
Doar căsuțele 3, 8 și 1 sunt plasate greșit, deci
funcția euristică întoarce 8 3 spații
Euristica ne spune că o soluție ar putea fi 1
găsită în cel puțin 8 mutări: h(scrt) = 8
Total 8
41
Modalități suplimentare de
alegere a funcției euristice
Abordarea maximă, cu m euristici diferite
h(n) = max( h1(n), … , hm(n) )
Abordarea statistică
De exemplu, dacă în 90% din cazuri când h(n) = 14,
h*(n) = 18, atunci când valoarea lui h(n) este 14,
returnăm 18
Complexitatea euristicii nu trebuie să afecteze
eficiența căutării
42
Concluzii
Metodele neinformate nu utilizează cunoștințe
specifice fiecărei probleme și deci tratează toate
problemele la fel
Metodele informate sau euristice utilizează cunoștințe
specifice fiecărei probleme și expandează mai întâi
cele mai promițătoare noduri
Funcțiile euristice care direcționează căutarea pot fi
construite prin simplificarea problemei inițiale, adică
eliminarea unor constrângeri
43