Iterativní prohlubování A * - Iterative deepening A*
Třída | Vyhledávací algoritmus |
---|---|
Datová struktura | Strom , graf |
Nejhorší prostorová složitost |
Algoritmy pro vyhledávání grafů a stromů |
---|
Výpisy |
související témata |
Iterativní prohlubování A * ( IDA * ) je algoritmus pro procházení grafu a hledání cesty , který může najít nejkratší cestu mezi určeným počátečním uzlem a jakýmkoli členem sady uzlů cíle ve váženém grafu. Jedná se o variantu iterativního prohlubování hloubkového hledání, která si vypůjčuje myšlenku použít heuristickou funkci k vyhodnocení zbývající ceny, aby se z vyhledávacího algoritmu A * dostal k cíli . Jelikož se jedná o algoritmus pro vyhledávání do hloubky, jeho využití paměti je nižší než v A *, ale na rozdíl od běžného iterativního prohlubujícího se vyhledávání se soustředí na prozkoumání nejslibnějších uzlů, a tudíž nechodí do stejné hloubky všude ve stromu vyhledávání. Na rozdíl od A * IDA * nevyužívá dynamické programování, a proto často končí zkoumáním stejných uzlů mnohokrát.
Zatímco standardní iterativní prohlubování hloubka-první vyhledávání používá hloubku vyhledávání jako mezní pro každou iteraci, IDA * používá více informativní , kde jsou náklady na cestu od kořene k uzlu a je heuristický odhad nákladů na konkrétní problém cestovat z do cíle.
Algoritmus poprvé popsal Richard Korf v roce 1985.
Popis
Iterative-deepening-A * funguje následovně: při každé iteraci proveďte hloubkové prohledávání, odřízněte větev, když její celková cena překročí danou hranici . Tato prahová hodnota začíná odhadem nákladů v počátečním stavu a zvyšuje se pro každou iteraci algoritmu. Při každé iteraci je prahovou hodnotou použitou pro další iteraci minimální cena všech hodnot, které překročily aktuální prahovou hodnotu.
Stejně jako v A * musí mít heuristika určité vlastnosti, aby byla zaručena optimalita (nejkratší cesty). Viz Vlastnosti níže.
Pseudo kód
path current search path (acts like a stack) node current node (last node in current path) g the cost to reach current node f estimated cost of the cheapest path (root..node..goal) h(node) estimated cost of the cheapest path (node..goal) cost(node, succ) step cost function is_goal(node) goal test successors(node) node expanding function, expand nodes ordered by g + h(node) ida_star(root) return either NOT_FOUND or a pair with the best path and its cost procedure ida_star(root) bound := h(root) path := [root] loop t := search(path, 0, bound) if t = FOUND then return (path, bound) if t = ∞ then return NOT_FOUND bound := t end loop end procedure function search(path, g, bound) node := path.last f := g + h(node) if f > bound then return f if is_goal(node) then return FOUND min := ∞ for succ in successors(node) do if succ not in path then path.push(succ) t := search(path, g + cost(node, succ), bound) if t = FOUND then return FOUND if t < min then min := t path.pop() end if end for return min end function
Vlastnosti
Stejně jako A * je IDA * zaručeno, že najde nejkratší cestu vedoucí z daného počátečního uzlu k libovolnému cílovému uzlu v problémovém grafu, pokud je přípustná heuristická funkce h , tj.
pro všechny uzly n , kde h * je skutečná cena nejkratší cesty od n k nejbližšímu cíli („dokonalá heuristika“).
IDA * je výhodné, když je problém omezen pamětí. Hledání * udržuje velkou frontu neprozkoumaných uzlů, které mohou rychle zaplnit paměť. Naproti tomu IDA * si nepamatuje žádný uzel kromě těch na aktuální cestě , vyžaduje množství paměti, které je pouze lineární v délce řešení, které vytváří. Jeho časovou složitost analyzuje Korf et al. za předpokladu, že heuristický odhad nákladů h je konzistentní , což znamená, že
pro všechny uzly n a všechny sousedy n‘ o n ; docházejí k závěru, že ve srovnání s vyhledáváním stromu hrubou silou přes problém s exponenciální velikostí dosahuje IDA * menší hloubky vyhledávání (o konstantní faktor), ale ne menšího větvícího faktoru.
Rekurzivní nejlepší vyhledávání je další paměťově omezená verze vyhledávání A *, která může být v praxi rychlejší než IDA *, protože vyžaduje méně regenerace uzlů.
Aplikace
Aplikace IDA * se nacházejí v takových problémech, jako je plánování .