Metoda neinformovaného vyhledávání

Neinformované vyhledávání (též slepé vyhledávání , metoda brute force , angl.  uninformed search, blind search, brute-force search ) je strategie pro hledání řešení ve stavovém prostoru , která nepoužívá dodatečné informace o stavech, kromě těch uvedených v definice úkolu. Jediné, čeho je metoda neinformovaného vyhledávání schopna, je vyvinout nástupce a odlišit cílový stav od necílového [1] [2] [3] .

Algoritmy

Šířka první hledání

Prohledávání do šířky ( BFS ) je strategie prohledávání stavového prostoru, která nejprve rozšiřuje kořenový uzel, poté všechny následníky kořenového uzlu, poté rozšiřuje následníky těchto následníků a tak dále. Před rozbalením uzlů na další úrovni se rozbalí všechny uzly v dané hloubce ve vyhledávacím stromě.

Algoritmus je dokončen. Pokud mají všechny akce stejnou cenu, je optimální vyhledávání na šířku.

Celkový počet vygenerovaných uzlů (časová složitost) je O( b d +1 ), kde b je faktor větvení, d je hloubka vyhledávání. Prostorová složitost je také O( b d +1 ) [1] .

Implementace prohledávání do šířky může používat frontu FIFO . Na začátku fronta obsahuje pouze kořenový uzel. Při každé iteraci hlavní smyčky je uzel curr načten z hlavy fronty . Pokud je uzel curr cílovým uzlem, vyhledávání se zastaví, jinak se uzel curr rozvine a všichni jeho následníci se přidají na konec fronty [4] [5] .

funkce BFS ( v : Node ) : Boolean ; begin enqueue ( v ) ; zatímco fronta není prázdná do begin curr : = dequeue () ; if is_goal ( curr ) then begin BFS := true ; výstup ; konec ; značka ( curr ) ; for next in následníky ( curr ) do if not označené ( next ) then begin enqueue ( next ) ; konec ; konec ; BFS := false ; konec ;

Hledat podle hodnoty

Hledání nákladů (uniform-cost search, UCS ) je zobecněním algoritmu prohledávání do šířky, který bere v úvahu náklady na akce (okraje grafu stavu). Hledání založené na nákladech rozšiřuje uzly ve vzestupném pořadí podle ceny nejkratší cesty z kořenového uzlu. V každém kroku algoritmu je nasazen uzel s nejnižší cenou g ( n ). Uzly jsou uloženy v prioritní frontě [6] .

Tento algoritmus je úplný a optimální, pokud jsou náklady na etapy striktně kladné. Pokud jsou náklady ve všech fázích stejné, je hledání nákladů identické s hledáním do šířky.

Procedura vyhledávání nákladů může vstoupit do nekonečné smyčky, pokud je náhodou nasazen uzel, který má akci s nulovými náklady, která opět ukazuje na stejný stav. Úplnost a optimálnost vyhledávání je možné zaručit za předpokladu, že náklady na všechny úkony jsou striktně kladné [1] .

Hledání založené na nákladech je logicky ekvivalentní algoritmu Dijkstra s jediným zdrojem nejkratší cesty .  Konkrétně oba algoritmy nasazují stejné uzly ve stejném pořadí. Hlavní rozdíl souvisí s přítomností uzlů v prioritní frontě: v Dijkstrově algoritmu jsou všechny uzly přidány do fronty během inicializace, zatímco v nákladovém vyhledávacím algoritmu jsou uzly přidávány „za běhu“ ( eng , on-the-fly, líně ) během vyhledávání. Z toho vyplývá, že Dijkstrův algoritmus je aplikovatelný na explicitní grafy, zatímco UCS algoritmus lze aplikovat na explicitní i implicitní grafy [7] .  

Hloubka první hledání

Depth -first search ( DFS ) je rozhodovací strategie prohledávání stavového prostoru, která vždy rozšiřuje nejhlubší uzel na aktuální periferii vyhledávacího stromu. Hloubkové vyhledávání analyzuje prvního následníka aktuálního uzlu v seznamu, poté jeho prvního následníka atd. Rozšířené uzly jsou odstraněny z periferie, takže další hledání „obnovuje“ od dalšího nejmělčejšího uzlu, který ještě nebyl prozkoumán. nástupci [1] .

Strategie hledání do hloubky může být implementována pomocí zásobníku LIFO nebo pomocí rekurzivní funkce [8] .

funkce DFS ( v : Uzel ; hloubka : Celé číslo ) : Boolean ; begin if is_goal ( v ) then begin DFS := true ; výstup ; konec ; pro další v následcích ( v ) proveďte if DFS ( další , hloubka + 1 ) then begin DFS := true ; výstup ; konec ; DFS := false ; konec ;

Hloubkově omezené hledání

Hloubkově omezené vyhledávání ( DLS ) je varianta hloubkového prohledávání, která používá předdefinovaný hloubkový limit l k vyřešení problému nekonečné cesty.

Hloubkově omezené hledání není kompletní, protože pro l < d nebude cíl nalezen a není optimální pro l > d . Jeho časová složitost je O( b l ) a jeho prostorová složitost je O( b · l ) [1] [9] .

Hloubkově omezené vyhledávání se používá v algoritmu iterativního prohlubování.

funkce DLS ( v : Uzel ; hloubka , limit : Celé číslo ) : Boolean ; begin if ( hloubka < limit ) then begin if is_goal ( v ) then begin DLS := true ; výstup ; konec ; for next in následníky ( v ) do begin if DLS ( další , hloubka + 1 , limit ) then begin DLS := true ; výstup ; konec ; konec ; konec ; DLS := false ; konec ;

Hloubkové vyhledávání s iterativním prohlubováním

Prohledávání do hloubky s iterativním prohlubováním (iterativní prohlubování prohledávání do hloubky, IDDFS , DFID ) je strategie, která vám umožňuje najít nejlepší hloubkový limit pro vyhledávání DLS. Toho je dosaženo postupným zvyšováním limitu l , dokud není nalezen cíl.

Iterativní prohlubování prohledávání kombinuje výhody prohledávání do hloubky (prostorová složitost O( b · l )) a prohledávání do šířky (úplnost a optimalita pro konečné b a nezáporné váhy hran).

I když iterativní hloubkové vyhledávání generuje stejné stavy vícekrát, většina uzlů je ve spodní části vyhledávacího stromu, takže čas strávený opětovným rozšiřováním uzlů lze obvykle ignorovat. Časová složitost algoritmu je O( b l ) [1] [9] [10] .

funkce IDDFS ( v : Uzel ) : Integer ; var lim : Celé číslo ; begin lim := 0 ; zatímco ne DLS ( v , 0 , lim ) do lim := lim + 1 ; IDDFS := lim ; konec ;

Obousměrné vyhledávání

Obousměrné vyhledávání do šířky (nebo hloubky) je sofistikovaný algoritmus vyhledávání do šířky (nebo hloubky), jehož myšlenkou je, že lze provádět dvě vyhledávání současně (v dopředném směru, z počátečního stavu a v opačném směru, od cíl), zastaví se poté, co se dva vyhledávací procesy setkají uprostřed.

Obousměrné vyhledávání může být založeno na iterativní strategii prohlubování. Jedna iterace zahrnuje vyhledávání do hloubky k ve směru dopředu a dvě vyhledávání do hloubky k ak + 1  směrem dozadu. Protože v paměti jsou uloženy pouze stavy nalezené přímým vyhledáváním v hloubce k , je prostorová složitost vyhledávání definována jako O ( b d /2 ). Kontrola, zda uzel nalezený zpětným vyhledáváním patří na periferii dopředného vyhledávacího stromu, může být prováděna v konstantním čase, takže časová složitost obousměrného vyhledávání je definována jako O ( b d /2 ) [1] [9] [ 11] .

Viz také

Poznámky

  1. 1 2 3 4 5 6 7 Stuart Russell, Peter Norvig. Umělá inteligence: Moderní přístup = Artificial Intelligence: A Modern Approach. - 2. vyd. - M. : Williams, 2006. - 1408 s. — ISBN 5-8459-0887-6 .
  2. Stefan Edelkamp, ​​Stefan Schrödl. Heuristické vyhledávání: teorie a aplikace. - Morgan Kaufmann Publishers , 2012. - 712 s. — ISBN 978-0-12-372512-7 .
  3. Hledání hrubou silou  . Články o umělé inteligenci. Získáno 30. července 2013. Archivováno z originálu 29. srpna 2013.
  4. Hledání na prvním  místě . Články o umělé inteligenci. Získáno 30. července 2013. Archivováno z originálu 29. srpna 2013.
  5. ↑ Prohledávání do šířky v grafu a jeho aplikace . MAXimal :: algo. Získáno 30. července 2013. Archivováno z originálu 16. září 2013.
  6. Uniform-Cost  Search . Články o umělé inteligenci. Získáno 30. července 2013. Archivováno z originálu 29. srpna 2013.
  7. Ariel Felner. Poziční dokument: Dijkstrův algoritmus versus jednotné hledání nákladů nebo případ proti Dijkstrově algoritmu. — 2011.
  8. Hloubkové  prohledávání . Články o umělé inteligenci. Získáno 30. července 2013. Archivováno z originálu 29. srpna 2013.
  9. 1 2 3 Korf, RE Iterativní prohlubování na prvním místě: Optimální přípustné stromové vyhledávání  //  Umělá inteligence. - 1985. - Sv. Vol.27 , no. 1 . - str. 97-109 . - doi : 10.1016/0004-3702(85)90084-0 .
  10. ↑ Iterativní prohlubování do hloubky jako první  . Články o umělé inteligenci. Získáno 30. července 2013. Archivováno z originálu 29. srpna 2013.
  11. Obousměrné  vyhledávání . Články o umělé inteligenci. Získáno 30. července 2013. Archivováno z originálu 29. srpna 2013.

Literatura

  • Stuart Russell, Peter Norvig. Umělá inteligence: Moderní přístup = Artificial Intelligence: A Modern Approach. - 2. vyd. - M. : Williams, 2006. - 1408 s. — ISBN 5-8459-0887-6 .
  • Stefan Edelkamp, ​​Stefan Schrödl. Heuristické vyhledávání: teorie a aplikace. - Morgan Kaufmann Publishers , 2012. - 712 s. — ISBN 978-0-12-372512-7 .
  • Richard E. Korf. Algoritmy vyhledávání umělé inteligence. — 1998.

Odkazy