Oinformerad uppslagsmetod

Oinformerad sökning (även blind sökning , brute force method , eng.  uninformed search, blind search, brute-force search ) är en strategi för att hitta lösningar i tillståndsutrymmet , som inte använder ytterligare information om tillstånd, förutom den som presenteras i uppgiftsdefinition. Allt som metoden för oinformerad sökning är kapabel till är att utveckla efterföljare och skilja måltillståndet från det icke-måltillstånd [1] [2] [3] .

Algoritmer

Bredd första sökningen

Bredth-first search ( BFS ) är en sökstrategi för tillståndsrymdlösning som först expanderar rotnoden, sedan alla efterföljare till rotnoden, sedan expanderar efterföljarna till dessa efterföljare, och så vidare. Innan några noder expanderas på nästa nivå, expanderas alla noder på ett givet djup i sökträdet.

Algoritmen är klar. Om alla åtgärder har samma kostnad är bredd-först-sökning optimal.

Det totala antalet genererade noder (tidskomplexitet) är O( bd +1 ), där b är förgreningsfaktorn, d är sökdjupet . Rymdkomplexiteten är också O( b d +1 ) [1] .

En breddförsta sökimplementering kan använda en FIFO- . I början innehåller kön endast rotnoden. Vid varje iteration av huvudslingan hämtas curr- noden från köns huvud . Om noden curr är målnoden stoppas sökningen, annars rullas currnoden upp och alla dess efterföljare läggs till i slutet av kön [4] [5] .

function BFS ( v : Node ) : Boolean ; börja ( v ) ; medan kön inte är tom , börja curr := dequeue () ; om is_goal ( curr ) sedan börja BFS := sant ; avsluta ; slut ; mark ( curr ) ; för nästa i efterföljare ( curr ) gör om det inte är markerat ( nästa ) , börja sedan ( nästa ) ; slut ; slut ; BFS := falskt ; slut ;

Sök efter värde

Kostnadssökning (uniform-cost search, UCS ) är en generalisering av bredd-först-sökningsalgoritmen som tar hänsyn till kostnaden för åtgärder (tillståndsgrafens kanter). Kostnadsbaserad sökning expanderar noder i stigande ordning efter kostnaden för den kortaste vägen från rotnoden. Vid varje steg i algoritmen distribueras noden med lägst kostnad g ( n ). Noder lagras i en prioritetskö [6] .

Denna algoritm är komplett och optimal om kostnaderna för stegen är strikt positiva. Om kostnaderna för alla steg är lika är kostnadssökningen identisk med bredd-första-sökningen.

Kostnadssökningsproceduren kan gå in i en oändlig loop om det råkar ha en nod utplacerad som har en nollkostnadsåtgärd som återigen pekar på samma tillstånd. Det är möjligt att garantera fullständigheten och optimaliteten för sökningen, förutsatt att kostnaderna för alla åtgärder är strikt positiva [1] .

Kostnadsbaserad sökning är logiskt likvärdig med Dijkstras enkällas kortaste vägsalgoritm .  I synnerhet distribuerar båda algoritmerna samma noder i samma ordning. Huvudskillnaden är relaterad till närvaron av noder i prioritetskön: i Dijkstras algoritm läggs alla noder till i kön under initiering, medan i den kostnadsbaserade sökalgoritmen läggs noder till "on-the-fly" ( sv . på-the-fly, lättjefullt ) under sökningen. Av detta följer att Dijkstras algoritm är applicerbar på explicita grafer, medan UCS-algoritmen kan tillämpas på både explicita och implicita grafer [7] .  

Djup första sökning

Depth -first search ( DFS ) är en sökstrategi för tillståndsrymdsbeslut som alltid expanderar den djupaste noden i sökträdets aktuella periferi. Djup-först-sökning analyserar den första efterföljaren till den aktuella noden i listan, sedan dess första efterföljare osv. Utökade noder tas bort från periferin, så ytterligare sökning "återupptas" från den näst ytligaste noden, som fortfarande är outforskad efterträdare [1] .

Sökstrategin för djupet-först kan implementeras med en LIFO - stack eller med en rekursiv funktion [8] .

function DFS ( v : Node ; djup : Heltal ) : Boolean ; börja om is_goal ( v ) sedan börja DFS := sant ; avsluta ; slut ; för nästa i efterföljare ( v ) gör om DFS ( nästa , djup + 1 ) och börja då DFS := true ; avsluta ; slut ; DFS := falskt ; slut ;

Djupbegränsad sökning

Depth -limited search ( DLS ) är en variant av depth-first search som tillämpar en fördefinierad djupgräns l för att lösa problemet med oändlig väg.

Den djupbegränsade sökningen är inte komplett, eftersom för l < d kommer målet inte att hittas och är inte optimalt för l > d . Dess tidskomplexitet är O( b l ), ​​och dess rymdkomplexitet är O( b · l ) [1] [9] .

Djupbegränsad sökning används i den iterativa sökalgoritmen för fördjupning.

funktion DLS ( v : Nod ; djup , gräns : heltal ) : Boolean ; börja if ( djup < gräns ) sedan börja om is_goal ( v ) sedan börja DLS := sant ; avsluta ; slut ; för nästa i efterföljare ( v ) börjar om DLS ( nästa , djup + 1 , gräns ) sedan börjar DLS : = sant ; avsluta ; slut ; slut ; slut ; DLS := falskt ; slut ;

Djup-första sökning med iterativ fördjupning

Djup-först-sökning med iterativ fördjupning (iterative-deepening depth-first search, IDDFS , DFID ) är en strategi som låter dig hitta den bästa djupgränsen för DLS-sökning. Detta uppnås genom att stegvis öka gränsen l tills målet hittas.

Iterativ fördjupningssökning kombinerar fördelarna med djup-först-sökning (rymdkomplexitet O( b · l )) och bredd-först-sökning (fullständighet och optimalitet för finita b och icke-negativa kantvikter).

Även om iterativ djupsökning genererar samma tillstånd flera gånger, är de flesta av noderna längst ner i sökträdet, så den tid som går åt till att återexpandera noder kan vanligtvis ignoreras. Algoritmens tidskomplexitet är O( b l ) [1] [9] [10] .

function IDDFS ( v : Node ) : Heltal ; var lim : Heltal ; börja lim := 0 ; medan inte DLS ( v , 0 , lim ) gör lim := lim + 1 ; IDDFS := lim ; slut ;

Dubbelriktad sökning

Bredth (eller djup) dubbelriktad sökning är en sofistikerad bredd (eller djup) sökalgoritm, vars idé är att två sökningar kan utföras samtidigt (i framåtriktningen, från initialtillståndet och i motsatt riktning, från mål), stoppas efter att de två sökprocesserna möts i mitten.

Den dubbelriktade sökningen kan baseras på en iterativ fördjupningsstrategi. En iteration inkluderar en sökning till djup k i riktning framåt och två sökningar till djup k och k  + 1 i riktning bakåt. Eftersom endast tillstånden som hittas genom direktsökning på djupet k lagras i minnet definieras sökningens rymdkomplexitet som O ( bd / 2 ). Att kontrollera om en nod som hittas av en bakåtsökning tillhör periferin av ett framåtsökträd kan utföras i konstant tid, så tidskomplexiteten för en dubbelriktad sökning definieras som O ( b d /2 ) [1] [9] [ 11] .

Se även

Anteckningar

  1. 1 2 3 4 5 6 7 Stuart Russell, Peter Norvig. Artificiell intelligens: ett modernt tillvägagångssätt = Artificial Intelligence: A Modern Approach. - 2:a uppl. - M. : Williams, 2006. - 1408 sid. — ISBN 5-8459-0887-6 .
  2. Stefan Edelkamp, ​​​​Stefan Schrödl. Heuristisk sökning: teori och tillämpningar. - Morgan Kaufmann Publishers , 2012. - 712 sid. — ISBN 978-0-12-372512-7 .
  3. Brute force  search . Artiklar om artificiell intelligens. Hämtad 30 juli 2013. Arkiverad från originalet 29 augusti 2013.
  4. Bredd-första  sökning . Artiklar om artificiell intelligens. Hämtad 30 juli 2013. Arkiverad från originalet 29 augusti 2013.
  5. ↑ Bredd - första sökning i en graf och dess tillämpningar . MAXimal :: algo. Hämtad 30 juli 2013. Arkiverad från originalet 16 september 2013.
  6. Uniform-Cost  Search . Artiklar om artificiell intelligens. Hämtad 30 juli 2013. Arkiverad från originalet 29 augusti 2013.
  7. Ariel Felner. Positionspapper: Dijkstras algoritm kontra enhetlig kostnadssökning eller ett fall mot Dijkstras algoritm. — 2011.
  8. Djup-första  sökning . Artiklar om artificiell intelligens. Hämtad 30 juli 2013. Arkiverad från originalet 29 augusti 2013.
  9. 1 2 3 Korf, RE Djup-första iterativ-fördjupning: En optimal tillåten trädsökning  //  Artificiell intelligens. - 1985. - Vol. Vol.27 , nr. 1 . - S. 97-109 . - doi : 10.1016/0004-3702(85)90084-0 .
  10. Djup-Första iterativa  fördjupning . Artiklar om artificiell intelligens. Hämtad 30 juli 2013. Arkiverad från originalet 29 augusti 2013.
  11. Dubbelriktad  sökning . Artiklar om artificiell intelligens. Hämtad 30 juli 2013. Arkiverad från originalet 29 augusti 2013.

Litteratur

  • Stuart Russell, Peter Norvig. Artificiell intelligens: ett modernt tillvägagångssätt = Artificial Intelligence: A Modern Approach. - 2:a uppl. - M. : Williams, 2006. - 1408 sid. — ISBN 5-8459-0887-6 .
  • Stefan Edelkamp, ​​Stefan Schrödl. Heuristisk sökning: teori och tillämpningar. - Morgan Kaufmann Publishers , 2012. - 712 sid. — ISBN 978-0-12-372512-7 .
  • Richard E. Korf. Sökalgoritmer för artificiell intelligens. — 1998.

Länkar