ALGORITAM A ALGORITAM A PRETRAGA ILI ALGORITAM A
- Slides: 14
ALGORITAM A*
ALGORITAM A* PRETRAGA ILI ALGORITAM A* Jedan od fundamentalnih i najpopularnijih algoritama veštačke inteligencije za određivanje najkraćeg puta između dva čvora grafa. Zasnovan na korišćenju heuristika Ima svojstvo potpunosti i optimalnosti Algoritam A* je varijanta algoritma Prvo najbolji u kojoj se koristi funkcija evaluacije f definisana na sledeći način: f(n) = g(n) + h(n) gde je g(n) cena puta od polaznog čvora do čvora n, a h(n) je procenjena(heuristička) cena najjeftinijeg puta od čvora n do ciljnog čvora.
OSOBINE Dok se traga za najkraćim putem, uvek se zna tekuća minimalna cena od polaznog čvora do čvora n tj. tekuća vrednost g(n), ali se vrednost h(n) može samo procenjivati. Od kvaliteta heuristike zavisi ponašanje i efikasnost algoritma. Izbor kvalitetne heuristike jedan je od najvažnijih izazova u dizajniranju konkretnih implementacija algoritma A*.
OSOBINE ALGORITMA Algoritam A* traži optimalno rešenje , tj. otkriva najbolji put do ciljnog čvora i zato za svaki čvor na koji naiđe proverava da li je do njega ranije već bio pronađen neki lošiji put i , ako jeste, zamenjuje ga novim, boljim putem. Ovakva provera je u algoritmu Prvo najbolji bila opciona, a u algoritmu A* je obavezna.
A* VS DEJKSTRIN ALGORITAM Algoritam A* je uopštenje Dejkstrinog algoritma Čvorovi koje tek treba obraditi čuvaju se u listi, sortiranoj prema nekom kriterijumu. Često ispituje manje čvorova nego Dejkstrin algoritam Smanjenje proističe iz korišćenja heuristike koja procenjuje donju granicu daljine do ciljnog čvora Dejkstrin algoritam uzima u obzir samo cenu od polaznog do tekućeg čvora – vrednost g(m), a A* koristi vrednost funkcije evaluacije f(m)=g(m)+h(m)
ALGORITAM A* Ulaz : Graf G, polazni čvor i ciljni čvor Izlaz: najkraći put od polaznog do ciljnog čvora (ako postoji put između ova dva čvora) 1. Zatvorena lista je inicijalno prazna, a otvorena lista sadrži samo polazni čvor 2. Izvršavaj dok god ima elemenata u otvorenoj listi: Izaberi čvor n (tekući čvor) iz otvorene liste koji ima najbolju ocenu f(n) Ako je n ciljni čvor, izvesti o uspehu i vrati rešenje konstruišući put od polaznog do ciljnog čvora (idući unazad)
NASTAVAK. . . Za svaki čvor m koji je direktno dostupan iz n uradi sledeće: Ako m nije ni u otvorenoj ni u zatvorenoj listi, dodaj ga u otvorenu listu i označi n kao njegovog roditelja. Izračunaj i pridruži vrednost f(m) čvoru m Inače, proveri da li je put od polaznog čvora do čvora m preko čvora n bolji (kraći ili jeftiniji) od postojećeg puta do m (trenutna vrednost g(m)). Ako jeste, promeni informaciju o roditelju čvora m na čvor n i ažuriraj vrednosti f(m), a ako je m bio u zatvorenoj listi, prebaci ga u otvorenu Izbaci n iz otvorene liste i dodaj ga u zatvorenu 3. Izvesti da traženi put ne postoji (otvorena lista je prazna i uspeh nije prijavljen)
TOK ALGORITMA Prilikom dodavanja čvora m u otvorenu listu vrednost g(m) može se izračunati na efikasan način: Vrednost g(m) jednaka je zbiru vrednosti funkcije g za roditelja čvora m i ceni puta od roditelja do m Ako algoritam naiđe na čvor m koj je već u otvorenoj ili zatvorenoj listi, to znači da je pronađen novi put do čvora m. Proverava se da li je put od polaznog čvora do već posećenog čvora m preko čvora n bolji od postojećeg puta. Ako jeste bolji, potrebno je ažurirati vrednost g(m). Ovo može da se desi i za čvor m koji pripada zatvorenoj listi, pa je potrebno čvor m ponovo ispitati kao otvoreni čvor.
SVOJSTVA ALGORITMA A* Može se dokazati da je algoritam A* potpun i da je pod određenim uslovima optimalan.
POTPUNOST Ako su broj čvorova i broj akcija konačni, ako postoji put između dva čvora, algoritam A* će , kao i svaki Prvo najbolji algoritam, naći jedan takav. Čak i ako je heuristička funkcija veoma loša, ciljni čvor će biti dostignut u konačnom broju koraka.
OPTIMALNOST Od svih puteva između dva data čvora, algoritam A* vratiće najkraći, tj. vratiće optimalno rešenje ako je funkcija h dopustiva. Funkcija h je dopustiva ako nikada ne precenjuje stvarno rastojanje između tekućeg i ciljnog čvora, tj. ako za svaki čvor važi : 0 ≤ h(n )≤ h*(n) gde je h*(n) cena optimalnog puta od čvora n do ciljnog čvora.
KONZISTENTNOST FUNKCIJE Funkcija h je konzistentna ako ima vrednost 0 za ciljni čvor i za bilo koja dva susedna čvora m i n važi: c(n, m) + h(m) ≥ h(n) gde je c(n, m) cena pridružena grani (n, m). Svaka konzistentna funkcija je dopustiva, ali obratno ne važi. Ako je funkcija h konzistentna, nije potrebno proveravati da li je put preko tekućeg čvora do jednom zatvorenog čvora bolji od postojećeg, jer sigurno nije. Ako je funkcija h konzistentna algoritam A* je optimalan i još jednostavniji nego u opštem slučaju.
ZADATAK U sledećem grafu zadatak je naći najkraći put od A do E. Pored čvorova grafa zapisane su procenjene dužine puta do čvora E, tj. vrednosti funkcije h.
REŠENJE Tekući čvor Stanje otvorene liste [čvor (roditelj, g+h )] U zatvorenu listu se dodaje A(-, 0+6) A(6) D(A, 6+5), G(A, 5+6) A(-) D(11) G(A, 5+6), F(D, 9+3), H(D, 9+4), C(D, 10+6) D(A) G(11) F(D, 9+3), H(D, 9+4), C(D, 10+6) G(A) F(12) B(F, 12+1), H(D, 9+4), C(D, 10+6) F(D) B(13) H(D, 9+4), E(B, 14+0, ) C(D, 10+6) B(F) H(13) B(H, 11+1), E(B, 14+0), C(D, 10+6) H(D) B(12) E(B, 13+0), C(D, 10+6) B(H) E(13) C(D, 10+6)