Cuprins

Laborator 13: Best-first search și A*

1.1 Noţiuni introductive

Definiţie BFS(Best First)

În sensul cel mai general, putem spune că un algoritm de căutare este de tipul Best-First dacă păstrează o evidenţă cu candidaţii şi alege să verifice mereu candidaţii cu potenţial mai mare înainte de a-i verifica pe cei cu potenţial mai mic(cu alte cuvinte, verifică întâi candidatul cel mai bun - cu cel mai mare potenţial).

Cum definim potenţialul?

1.2 Greedy vs. Dijkstra

Folosind noţiunile de mai sus, încercăm să identificăm funcţiile de cost potenţial pentru următoarea problemă: găsirea unui drum de cost minim de la un nod sursă(S) la un nod destinaţie(D) într-un graf.

Greedy

Definim funcţia de cost potenţial h(N) = posibilul cost din nodul curent(C), prin nodul vecin(N), până la nodul destinaţie(D)

Metoda Greedy construieşte soluţia alegând mereu optimul local, cu alte cuvinte

Dijkstra

Definim funcţia de cost potenţial g(N) = costul minim al drumului din punctul iniţial(S) până în nodul N

Algoritmul lui Dijkstra actualizează costul minim al drumului de la S la fiecare punct pe măsură ce explorează graful. Presupunem că actualizăm, în acelaşi timp, şi costul potenţial.

Observaţii

Costul potenţial are rol doar în etapa de explorare a grafului. Pentru extragerea nodurilor ce formează drumul de cost minim, nu interpretăm costul potenţial. Este mult mai uşor să reţinem, într-un vector de părinţi, nodul „curent“ din care am ajuns la nodul „următor“, în momentul în care actualizăm costul potenţial al nodului următor.

Performanţe

Propunere

1.3 Algoritmul A*

Algoritmul A* este definit, în sens general, ca fiind un algoritm de căutare de tip BFS(Best-First) ce foloseşte funcţia de cost potenţial

f(N) = g(N) + h(N), unde
g(N) = costul minim pentru un drum de la S la N
h(N) = estimarea pentru costului minim pentru un drum de la N la D

Definirea funcţiei g nu ridică probleme(putem folosi aceeaşi funcţie ca la algoritmul lui Dijkstra), dar, din punct de vedere al funcţiei h, numită funcţie euristică, distingem câteva cazuri:

Concluzie

O estimare iniţială bună creşte performanţa algoritmului şi păstrează rezultatul optim.

Este uşor să alegem o funcţie euristică bună atunci când avem informaţii suplimentare despre graf. Dacă ştim că există nişte proprietăţi particulare, ne putem folosi de ele.

2. Exemple

Problema taxiului

Presupunem următoarul caz:

Cerinţa

Dacă putem reduce orice intersecţie la un punct, găsiţi drumul cel mai scurt pe care poate merge un taxi din S în D(fără a trece prin intersecţiile blocate)

Rezolvare