80 likes | 241 Views
Algoritmus A *. 1. Daj s do OTVOR 2. Ak OTVOR je prázdny, skonči s neúspechom. 3. V OTVOR nájdi n , pre ktoré f(n) je minimálne a presuň ho do ZATVOR 4. Ak n je koncový vrchol, skonči úspešne s riešením, ktoré získaš spätne pomocou smerníkov z n do s .
E N D
Algoritmus A* 1. Daj s do OTVOR 2. Ak OTVOR je prázdny, skonči s neúspechom. 3. V OTVOR nájdi n, pre ktoré f(n) je minimálne a presuň ho do ZATVOR 4. Ak n je koncový vrchol, skonči úspešne s riešením, ktoré získaš spätne pomocou smerníkov z n do s. 5. Inak expanduj n a pridaj všetkým synom smerník na n. Pre každého syna n´ vrcholu n:
Algoritmus A* II a. ak n´ nie je ani v OTVOR ani v ZATVOR, odhadni h(n´) (to je odhad ceny najlepšej cesty z n´ do niektorého koncového vrcholu) a vypočítaj f(n´) = g(n´) + h(n´), kde g(n´) = g(n) + c(n, n´) a g(s) = 0. b. ak n´ je alebo v OTVOR alebo ZATVOR, nasmeruj smerník na tú cestu, ktorá poskytuje najnižšie g(n´). c. ak n´ vyžadovalo zmenu smerníka podľa bodu b. a bolo v ZATVOR, daj ho do OTVOR. 6. Choď na 2
Algoritmus A* III • Algoritmus Z* má rovnaké kroky ako A*, okrem kroku 5a, kde výpočet f(n´) môže byť ľubovoľná funkcia v tvare F[E(n), f(n), h(n´)] • Podobne v kroku 5b. presmeruje algoritmus Z* smerník na najnižšie f(n) namiesto g(n). • Ak h =0 a c(n, n´) =1, dostaneme z A* hľadanie do šírky • Ak h = 0, dostaneme stratégiu rovnomernej ceny • Hľadanie do hĺbky dostaneme zo Z* , ak nastavíme f(n´) = f(n) – 1 a f(s) = 0.
Algoritmus AO* 1. Vytvor prehľadávací graf G´, ktorý na začiatku obsahuje ibavrchol s. Daj s do OTVOR. Nech G0 obsahuje na začiatku iba s. 2. Sleduj označené spojenia grafu G0(ktorý zodpovedá nasľubnejšej báze riešenia a ktorého spojenia sú označené v kroku 7) a preskúmaj jeho koncové vrcholy 3. Ak prienik OTVOR a G0 prázdny, skonči s G0 ako riešením. 4. S použitím f2 vyber vrchol n, ktorý je v OTVOR a v G0, zober ho z OTVOR a daj ho do ZATVOR.
Algoritmus AO* II 5. Expanduj n a daj jeho synov do OTVOR a do grafu G´ spolu so smerníkom na n. 6. Pre každého neterminálneho syna n´ vypočítaj heuristický odhad prínosu h(n´). Ak n´ je terminálny s cenou v(n´), nastav h(n´) = v(n´) a presuň n´ z OTVOR do ZATVOR. Ak n´ je neriešiteľný, nastav h(n´) na mínus nekonečno. Ak n´ je už v G´, tak nastav h(n´) = e(n´). 7. Zmeň ohodnotenie e(.) pre vrchol n a všetkých jeho predkov s použitím spätnej funkcie F.
Algoritmus AO* III Označ najlepšiu hranu pre každý vrchol typu ALEBO so zmenenou hodnotou na identifikáciu G0 8. Ak e(s) je zmenené na mínus nekonečno, skonči s neúspechom. Inak odstráň z G´ všetky vrcholy, ktoré viac nemôžu ovplyvniť hodnotu s. 9. Choď na 2.
Algoritmus AO* IV • Algoritmus skončí, keď súčasné G0nemá viac koncových vrcholov v zozname OTVOR, t.j., keď všetky koncové vrcholy sú označené ako terminál-ne (ak by bol hociktorý z nich neriešiteľný, tak s bude označené ako mínus nekonečno). • Ak boli váhy grafu riešenia počítané rekurzívne a odhady h(n) sú optimistické, potom AO* skončí s riešením optimálnej váhy • Odstraňovanie vrcholov v kroku 8 je bezpečné vtedy, ak sú neriešiteľné, inak nie.