Tájékozatlan keresési módszer

A tájékozatlan keresés (a vakkeresés is , brute force method , eng. informed search, blind search, brute-force search ) az állapottérben történő megoldáskeresési stratégia , amely nem használ további információkat az állapotokról, kivéve azokat, amelyeket a feladat meghatározása. A tájékozatlan keresés módszere csak arra képes, hogy utódokat fejlesszen ki, és megkülönböztesse a célállapotot a nem célállapottól [1] [2] [3] .  

Algoritmusok

Szélesség első keresés

A Breadth-first keresés ( BFS ) egy állapottér-megoldás-keresési stratégia, amely először a gyökércsomópontot bontja ki, majd a gyökércsomópont összes utódját, majd az utódokat, és így tovább. Mielőtt bármelyik csomópontot kiterjesztené a következő szintre, a keresési fa adott mélységében lévő összes csomópont kibővül.

Az algoritmus kész. Ha minden műveletnek azonos a költsége, a szélesség-első keresés az optimális.

A generált csomópontok teljes száma (időbonyolultsága) O( b d +1 ), ahol b az elágazási tényező, d a keresési mélység. A térkomplexitás is O( b d +1 ) [1] .

A szélességi első keresés megvalósítása használhat FIFO - sort . Kezdetben a sor csak a gyökércsomópontot tartalmazza. A fő hurok minden iterációja során a curr csomópont lekérésre kerül a sor fejéből . Ha a curr csomópont a célcsomópont, akkor a keresés leáll, ellenkező esetben a curr csomópont le lesz tekerve , és az összes utódja a sor végére kerül [4] [5] .

függvény BFS ( v : Csomópont ) : Logikai ; start enqueue ( v ) ; míg a sor nem üres , kezdje el curr : = dequeue () ; if is_goal ( curr ) , akkor kezdődik BFS := true ; kilépés ; vége ; mark ( curr ) ; a következőhöz az utódokban ( curr ) tegye, ha nincs megjelölve ( következő ) , akkor kezdje el a sorbanállást ( következő ) ; vége ; vége ; BFS := false ; vége ;

Keresés érték szerint

A költségkeresés (uniform-cost search, UCS ) a szélesség-első keresési algoritmus általánosítása, amely figyelembe veszi a műveletek költségét (az állapotgráf élei). A költségalapú keresés a csomópontokat a gyökércsomóponttól induló legrövidebb út költségének növekvő sorrendjében bővíti ki. Az algoritmus minden lépésében a legalacsonyabb g ( n ) költségű csomópont kerül telepítésre. A csomópontok egy prioritási sorban [6] vannak tárolva .

Ez az algoritmus akkor teljes és optimális, ha a szakaszok költsége szigorúan pozitív. Ha az összes szakasz költsége egyenlő, akkor a költségkeresés megegyezik a szélességi kereséssel.

A költségkeresési eljárás egy végtelen hurokba léphet, ha történetesen olyan csomópont van telepítve, amely nulla költségű művelettel ismét ugyanabba az állapotba mutat. A keresés teljessége és optimálissága garantálható, feltéve, hogy minden akció költsége szigorúan pozitív [1] .

A költségalapú keresés logikailag egyenértékű a Dijkstra egyforrású legrövidebb útvonalú algoritmusával .  Konkrétan mindkét algoritmus ugyanazokat a csomópontokat telepíti ugyanabban a sorrendben. A fő különbség a csomópontok jelenléte a prioritási sorban: a Dijkstra algoritmusában az összes csomópont hozzáadódik a sorhoz az inicializálás során, míg a költségalapú keresési algoritmusban a csomópontok „on-the-fly” ( engl . . menet közben, lustán ) keresés közben. Ebből következik, hogy Dijkstra algoritmusa explicit gráfokra, míg az UCS algoritmus explicit és implicit gráfokra egyaránt alkalmazható [7] .  

Mélység első keresés

A mélység - első keresés ( DFS ) egy állapottér-döntési keresési stratégia, amely mindig kiterjeszti a keresési fa aktuális perifériájának legmélyebb csomópontját. A mélyreható keresés elemzi a lista aktuális csomópontjának első utódját, majd az első utódját, stb. A kibővített csomópontok eltávolításra kerülnek a perifériáról, így a további keresés a következő legsekélyebb csomóponttól folytatódik, amely még mindig feltáratlan. utódai [1] .

A mélységi keresési stratégia megvalósítható LIFO veremmel vagy rekurzív függvénnyel [8] .

függvény DFS ( v : csomópont ; mélység : egész ) : Logikai ; begin if is_goal ( v ) then begin DFS := true ; kilépés ; vége ; for next in utódokban ( v ) do if DFS ( következő , mélység + 1 ) , akkor kezdődik a DFS := igaz ; kilépés ; vége ; DFS := false ; vége ;

Mélységben korlátozott keresés

A mélységkorlátozott keresés ( DLS ) a mélység -első keresés egy olyan változata, amely előre meghatározott l mélységhatárt alkalmaz a végtelen út probléma megoldására.

A mélységben korlátozott keresés nem teljes, mert l < d esetén a cél nem található, és l > d esetén nem optimális . Időbonyolultsága O( b l ), ​​térbeli összetettsége O( b · l ) [1] [9] .

Az iteratív mélyítő keresési algoritmusban a mélységben korlátozott keresést használják.

függvény DLS ( v : csomópont ; mélység , határ : egész ) : Logikai ; begin if ( mélység < limit ) then begin if is_goal ( v ) then begin DLS := true ; kilépés ; vége ; for next in utódokban ( v ) kezdődjön if DLS ( következő , mélység + 1 , határ ) , majd kezdődik DLS := igaz ; kilépés ; vége ; vége ; vége ; DLS := false ; vége ;

Mélység-első keresés iteratív elmélyítéssel

A mélység-első keresés iteratív elmélyítéssel (iteratív-mélyítő mélység-első keresés, IDDFS , DFID ) egy olyan stratégia, amely lehetővé teszi a legjobb mélységhatár megtalálását a DLS-kereséshez. Ezt úgy érjük el, hogy az l határértéket fokozatosan növeljük, amíg meg nem találjuk a célt.

Az iteratív mélyítő keresés egyesíti a mélység-első keresés (térbonyolultság O( b · l )) és a szélesség-első keresés (teljesség és optimalitás véges b és nem negatív élsúlyok esetén) előnyeit.

Bár az iteratív mélykeresés többször generálja ugyanazokat az állapotokat, a legtöbb csomópont a keresési fa alján található, így a csomópontok újrabővítésére fordított idő általában figyelmen kívül hagyható. Az algoritmus időbonyolultsága O( b l ) [1] [9] [10] .

függvény IDDFS ( v : csomópont ) : egész szám ; var lim : Integer ; kezdés lim := 0 ; míg nem DLS ( v , 0 , lim ) do lim := lim + 1 ; IDDFS := lim ; vége ;

Kétirányú keresés

A szélességi (vagy mélységi) kétirányú keresés egy kifinomult szélességi (vagy mélységi) keresési algoritmus, amelynek az az ötlete, hogy egyszerre két keresés hajtható végre (előre, a kezdeti állapotból, és ellenkező irányban, cél), megállva, miután a két keresési folyamat középen találkozik.

A kétirányú keresés egy iteratív elmélyítési stratégián alapulhat. Egy iteráció tartalmaz egy keresést a k mélységig előrefelé, és két keresést a k mélységig és a k  + 1-et hátrafelé. Mivel csak a k mélységben közvetlen kereséssel talált állapotok tárolódnak a memóriában , a keresés térbonyolultságát O ( b d /2 )-ként definiáljuk. Annak ellenőrzése, hogy egy visszafelé irányuló kereséssel talált csomópont egy előrefelé irányuló keresési fa perifériájához tartozik-e, konstans időben elvégezhető, így a kétirányú keresés időbonyolultsága O ( b d /2 ) [1] [9] [ 11] .

Lásd még

Jegyzetek

  1. 1 2 3 4 5 6 7 Stuart Russell, Peter Norvig. Mesterséges intelligencia: modern megközelítés = Artificial Intelligence: A Modern Approach. - 2. kiadás - M. : Williams, 2006. - 1408 p. — ISBN 5-8459-0887-6 .
  2. Stefan Edelkamp, ​​​​Stefan Schrödl. Heurisztikus keresés: elmélet és alkalmazások. - Morgan Kaufmann Publishers , 2012. - 712 p. — ISBN 978-0-12-372512-7 .
  3. Brute force  keresés . Cikkek a mesterséges intelligenciáról. Letöltve: 2013. július 30. Az eredetiből archiválva : 2013. augusztus 29..
  4. Szélesség-első  keresés . Cikkek a mesterséges intelligenciáról. Letöltve: 2013. július 30. Az eredetiből archiválva : 2013. augusztus 29..
  5. ↑ Szélesség – első keresés a grafikonon és alkalmazásaiban . MAXimális :: algo. Letöltve: 2013. július 30. Az eredetiből archiválva : 2013. szeptember 16..
  6. Egységes  költségkeresés . Cikkek a mesterséges intelligenciáról. Letöltve: 2013. július 30. Az eredetiből archiválva : 2013. augusztus 29..
  7. Ariel Felner. Állásfoglalás: Dijkstra algoritmusa az egységes költségkereséssel szemben vagy a Dijkstra algoritmusa elleni eset. – 2011.
  8. Mélységi  keresés . Cikkek a mesterséges intelligenciáról. Letöltve: 2013. július 30. Az eredetiből archiválva : 2013. augusztus 29..
  9. 1 2 3 Korf, RE Depth-first iterative-deeping: Optimálisan elfogadható fakeresés  //  Artificial Intelligence. - 1985. - 1. évf. Vol.27 , no. 1 . - 97-109 . o . - doi : 10.1016/0004-3702(85)90084-0 .
  10. Mélység-első iteratív  elmélyülés . Cikkek a mesterséges intelligenciáról. Letöltve: 2013. július 30. Az eredetiből archiválva : 2013. augusztus 29..
  11. Kétirányú  keresés . Cikkek a mesterséges intelligenciáról. Letöltve: 2013. július 30. Az eredetiből archiválva : 2013. augusztus 29..

Irodalom

  • Stuart Russell, Peter Norvig. Mesterséges intelligencia: modern megközelítés = Artificial Intelligence: A Modern Approach. - 2. kiadás - M. : Williams, 2006. - 1408 p. — ISBN 5-8459-0887-6 .
  • Stefan Edelkamp, ​​Stefan Schrödl. Heurisztikus keresés: elmélet és alkalmazások. - Morgan Kaufmann Publishers , 2012. - 712 p. — ISBN 978-0-12-372512-7 .
  • Richard E. Korf. Mesterséges intelligencia keresési algoritmusai. – 1998.

Linkek