KERESÉS (SEARCH)
Keresés – módszeres próbálkozás Problémák: Mit kell tudni egy feladat megoldásához? – akciók, állapotok, célok Hogyan kell az ismereteket leírni? – MI-ben: reprezentáció Hogyan kell a megoldást keresni? – MI-ben: keresés Reprezentáció: állapottér (state space), kezdeti- és célállapotok reprezentálása: gráf (graph) csomópont (node) - állapot (state) él (arc) - művelet (action) probléma redukció – részfeladatokra bontás reprezentálása: gráf csomópont – problémaleírás él - művelet (probléma részproblémává redukálása)
KERESÉS Reprezentációs gráf keresés közben építjük fel (implicit leírás) irányított ciklusmentes gráf (egyszerűsítés: fává alakítjuk)
KERESÉS Keresési probléma: A keresés folyamata: A keresés technikája: kezdeti állapot, operátorok, célteszt/ célállapot, költségek A keresés folyamata: állapottér, út, megoldás kiterjesztés, stratégia A keresés technikája: keresési fa, csomópont, gyökér, levél keresési algoritmus: melyik csomópontot érdemes kiterjeszteni? Keresés hatékonyságának mérése: talál-e megoldást? talált megoldás jó megoldás-e? (alacsony költségű – útköltség) keresési eljárás költsége (idő- és memóriaigény) keresés költsége: út költsége + keresési eljárás költsége
MISSZIONÁRIUSOK ÉS KANNIBÁLOK PROBLÉMÁJA kezdeti állapot … célállapot … útköltség ... Modell: híd, lyukas csónak, evező … frame probléma Reprezentáció: node ?? - nevek ?? – bal part:(3M, 3K, Cs) akció ?? - ki merre megy a csónakban – (1M), (1K), (1M 1K), (2M), (2K) Keresés: megszorítások az operátorok alkalmazására: – csak legális állapotba – csak új állapotba
HANOI TORNYAI reprezentáció … állapottér modell állapot - melyik korong melyik rúdon, pl. (1, 1, 1, 1) művelet - korong áthelyezése i. rúdról j. rúdra (1 i, j 3)
HANOI TORNYAI Hipotetikus megoldás Probléma redukció
4 x 4-es PUZZLE reprezentáció állapotok – lapok helyzete – 4 x 4 -es mátrix állapottér – elérhetőség ! akció - ? adott lap mozgatása fel, le, jobbra, balra lyuk mozgatása (4 lehetséges akció) költség – az akciók száma (az út hossza) megoldás – minimális költségű út a kezdeti és a célállapot között céltól való távolság hány lépés van a célig (S) – nem tudjuk becslés rossz helyen levő lapok száma (H1) Manhattan távolság (H2) H1, H2: alsó becslések H2 H1 H2 jobban informált becslés
N KIRÁLYNŐ PROBLÉMA reprezentáció állapot – egy állás (N x N-es mátrix) állapottér – lehetséges állások 1..N királynővel – mezők megcímkézése (KN, ütésben, szabad) nem lehetnek ütésben álló KN-k KN=N esetén célállapot művelet – 1 KN elhelyezése ütésben álló mezők száma nő korlátozás kielégítés (constraint satisfaction) költség – minden megoldás költsége azonos (N hosszú műveletsorozat) kezdőállapot – üres tábla célállapot – N királynő a táblán
N KIRÁLYNŐ PROBLÉMA reprezentációs gráf – inkrementális megfogalmazás
LEFEDÉSI PROBLÉMA "bamba módszer" : próbálgatás lehetséges állapotok száma igen nagy elágazási tényező nagy MI-t csak akkor szabad használni, ha a természetes kifogy!
CSELEKVÉSTERVEZÉS lehet-e ezt keresési feladatként felfogni? akciósorozat (akciósorrend??) kezdőállapot célállapot (forward reasoning) - itt reménytelen célhoz hiányzó feltételek célállapot kezdőállapot (backward reasoning)
CSELEKVÉSTERVEZÉS
ÁLTALÁNOS KERESÉSI ALGORITMUS adott: kezdeti állapot célteszt/ célállapot műveletek keresési algoritmus: Legyen L a kezdeti állapoto(ka)t tartalmazó lista. Ha L üres, akkor leállás - a keresés sikertelen; egyébként legyen n egy csomópont L-ből. Ha n célállapot, akkor leállás - eredmény megadása; egyébként n törlése L-ből, n gyermekeinek előállítása, n gyermekeinek hozzáadása L-hez, visszalépés 2-re.
ÁLTALÁNOS KERESÉSI ALGORITMUS keresőgráf (search graph) nyílt csúcsok (open nodes) kiterjesztés (extension) sikertelen keresés több célállapot melyik nyílt csúcsot válasszuk ???
PÉLDA: ÁLTALÁNOS KERESŐ JÁTÉK adott: két kétjegyű szám (kiindulási- és célszám) feladat: eljutni a kiindulási számtól a célszámig akció: egy számjegy növelése vagy csökkentése, kétszer nem lehet ugyanazt a számjegyet változtatni, 0-t csökkenteni, 9-t növelni nem lehet Pl. kiindulási szám 25, célszám 44 L={25} n=25 L={15 (25), 35 (25), 24 (25), 26 (25)} n=15 L={35 (25), 24 (25), 26 (25), 14 (15|25), 16 (15|25)} … melyik számot választjuk a listáról? hova, milyen sorrendben tesszük a gyerekeket? célfüggvény
VAK KERESÉSEK (BLIND SEARCH)
SZÉLESSÉGI KERESÉS (BREADTH-FIRST SEARCH) A keresési fában mindig a legmagasabb szinten lévő csomópontok valamelyikét terjeszti ki open lista (L): A B C C D E D E F G E F G H I J F G H I J G H I J H I J K L I J K L M J K L M N O K L M N O A C B D E F G H I J K L M N O
SZÉLESSÉGI KERESÉS (BREADTH-FIRST SEARCH) Az általános keresési algoritmus módosítása: n az első csomópont L-ből n gyermekeinek hozzáadása L végéhez Az algoritmus tulajdonságai: memóriaigény: bd időigény: 1 + b + b2 + ... + bd bd teljes optimális
MÉLYSÉGI KERESÉS (DEPTH-FIRST SEARCH) A keresési fában mindig a legmélyebben lévő csomópontok valamelyikét terjeszti ki A open lista (L): A B C D E C H I J E C M I J E C I J E C N O J E C C B D E F G H I K L J M N O
MÉLYSÉGI KERESÉS (DEPTH-FIRST SEARCH) Az általános keresési algoritmus módosítása: n az első csomópont L-ből n gyermekeinek hozzáadása L elejéhez Az algoritmus tulajdonságai: memóriaigény - megoldás méretével arányos - b*d időigény: bd nem teljes (végtelen ág lehet) nem optimális
KORLÁTOZOTT MÉLYSÉGŰ KERESÉS (DEPTH-LIMITED SEARCH) Mélységi keresés mélységi korláttal. A keresési fában mindig a legmélyebben lévő csomópontok valamelyikét terjeszti ki, feltéve, hogy az nincs egy előre adott mélységi korlát (l) alatt. Az algoritmus tulajdonságai: memóriaigény: b*l időigény: bl teljes (ha l nagyobb, mint a megoldás mélysége, d) nem optimális Hogyan válasszuk meg előre a mélységi korlátot?
ITERATÍV MÉLYÍTÉS (ITERATIVE DEEPENING) Megkerüli a mélységi korlát meghatározását. Korlátozott mélységű keresés egyre növekvő l = 0, 1, 2, ... mélységi korlát mellett. Mintha a csomópontoknak a mélységi korlát alatt nem lehetnének leszármazottai. Ha a célt nem sikerült így elérni, eggyel növeli a korlátot és újraindítja az egész keresést. Az algoritmus tulajdonságai: memóriaigény: megoldás méretével arányos – b*d időigény: bár redundáns (a fa „teteje” ismétlődik) – bd teljes optimális
ITERATÍV MÉLYÍTÉS (ITERATIVE DEEPENING) open lista (L): l=3 A B C D E C H I J E C I J E C J E C E C C F G G K L open lista (L): l=0 A l=1 A B C C l=2 A D E C E C F G G A C B E F G D H I K L J M N O
ITERATÍV MÉLYÍTÉS (ITERATIVE DEEPENING) redundáns - Nagy teher ez? Lásd az alábbi példát: Legyen b = 10, d = 5. Ekkor a csomópontok száma: 1 + 10 + 100 + 1 000 + 10 000 + 100 000 = 111 111 A legalsó szinten a csomópontokat egyszer kell kiterjeszteni, eggyel magasabb szinten kétszer, stb. Azaz a kiterjesztések teljes száma: 6*1 + 5*10 + 4*100 + 3*1 000 + 2*10 000 + 100 000 = 123 456 Ebben a példában ez a szükségesnél 11% -kal több kiterjesztést jelent. Előnyei: mélységi keresés csekély memóriaigénye szélességi keresés teljessége biztosítja, hogy a keresési fa nem lesz mélyebben feltárva, mint amilyen mélyen maga a cél található
EGYENLETES KERESÉS (UNIFORM-COST SEARCH) A keresési fában mindig a pillanatnyilag legkisebb költségű csomópontok valamelyikét terjeszti ki open lista (L): A(0) B(3) C(4) C(4) D(5) E(7) D(5) E(7) F(7) G(7) I(6) E(7) F(7) G(7) J(7) H(8) E(7) F(7) G(7) J(7) H(8) N(8) O(8) F(7) G(7) J(7) H(8) N(8) O(8) G(7) J(7) H(8) N(8) O(8) J(7) H(8) N(8) O(8) K(9) L(10) H(8) N(8) O(8) K(9) L(10) N(8) O(8) K(9) L(10) M(11) A 3 4 C B 3 3 2 4 D E F G 3 2 2 3 1 H I J K L 2 2 M N O
EGYENLETES KERESÉS (UNIFORM-COST SEARCH) Az általános keresési algoritmus módosítása: n az első csomópont L-ből n gyermekeinek hozzáadása L-hez, majd L rendezése a csomópontok növekvő költsége szerint. Az algoritmus tulajdonságai: memóriaigény: bd időigény: bd teljes optimális speciális változata: szélességi keresés (élek egységnyi költségűek)
VAK KERESÉSI STRATÉGIÁK ÖSSZEHASONLÍTÁSA teljesség időigény memóriaigény optimalitás szélességi igen bd egyenletes mélységi nem b*d korlátozott mélységű ha d ≤ l bl b*l iteratív mélyítés b: elágazási tényező d: megoldás mélysége l: mélységi korlát
HEURISZTIKUS KERESÉSEK (HEURISTIC SEARCH)
HEURISZTIKUS KERESÉSEK vak keresési algoritmusok hatékonyságának javítása feladatmegoldások számításigényének csökkentése keresés korlátozott erőforrások mellett feladathoz kapcsolódó információk figyelembe vétele Heurisztika általános jelentés: bármely tanács, mely gyakran hatékony, ám nem biztos hogy minden esetben érvényes technikai jelentés: heurisztikus kiértékelő függvény, amely a probléma egy állapotához egy számot rendel (pl. sakk: egy pozíció ereje)
HEURISZTIKUS KERESÉSEK Heurisztika a keresésben: A még ki nem terjesztett csomópontok (L) kiértékelése: mennyire van közel a célhoz? Algoritmus típusok legjobbat-először keresés: a legjobbnak tűnő csomó- pont kiterjesztése (előretekintő keresés, A*, IDA*) iteratív javítás: elmozdulás a legjobbnak tűnő irányba (hegymászó keresés, szimulált hűtés, genetikus algoritmus) A legjobb csomópont megtalálása elvben nem könnyebb, mint maga a keresési feladat!
HEURISZTIKUS KERESÉSEK Heurisztikus kiértékelő függvény Célja: a feladat megoldásával járó számításigény csökkentése adott erőforrás használat mellett a lehető legjobb megoldás megtalálása Kompromisszum a számításigény és a megoldás minősége között Már kevés alkalmazás-függő szakismeret is nagyban segíthet akár 1), akár 2) célok érdekében. Gyakori heurisztikus kiértékelő függvény: Annak a költségnek a becslése, mely egy célállapotnak a pillanatnyi állapotból való elérésével jár. (pl. 4x4-es játék, útkeresés városok között, 8-királynő)
HEGYMÁSZÓ KERESÉS (HILL-CLIMBING SEARCH) A keresés során egy csomópont közvetlen leszármazottjait vizsgálja csak, és ezek közül mindig a legjobbat választja Algoritmus Legyen n a kezdeti állapot. Ha n egy célállapot, akkor állj le és add vissza eredményként. Egyébként állítsd elő n valamennyi n’ leszármazottját; legyen n = a legjobb n’; menj vissza 2-re. Tulajdonságok Nem tárolja a keresési gráfot, csak a pillanatnyilag vizsgált csomópontot - így minimális memória igény Sikere nagyban függ a felület alakjától
HEGYMÁSZÓ KERESÉS (HILL-CLIMBING SEARCH) Problémák lokális maximum azonos értékű felület nyereg probléma (gerinctúra lenne jó, de arra nem vezet út) Módosítások: több pontból újraindítás (véletlen újraindítású hegymászó keresés) „lefelé vezető” lépések megengedése (szimulált hűtés) Előnyei: memóriaigény kicsi jó helyzetből indulva gyorsan célhoz ér
ELŐRETEKINTŐ KERESÉS (BEST-FIRST SEARCH) Elv: megtalálni egy célt, amilyen gyorsan csak lehetséges Kiértékelés alapja: egyedül a céltól való távolság Mindig a célhoz legközelebb levő csomópontot terjeszti ki – becslés Algoritmus Legyen L a kezdeti állapotokat tartalmazó lista. Ha L üres, akkor állj le – a keresés sikertelen; egyébként legyen n az a csomópont L-ből, amelyik várhatóan a legközelebb van a célhoz. Ha n egy célállapot, akkor állj le és add vissza (a hozzá vezető úttal együtt) eredményként; egyébként töröld n-t L-ből; állítsd elő n gyermekeit; jegyezd fel a hozzájuk vezető utat; add a gyermekeket L-hez; menj vissza 2-re.
ELŐRETEKINTŐ KERESÉS (BEST-FIRST SEARCH) Csomópont költsége: f(n) = h(n) – becsült távolság a céltól kiterjesztés sorrendje 8 1. élek költsége a példában egységnyi 6 2. 7 4 3. 4 nem optimális 2 4. 0 5.
A ALGORITMUS egyenletes keresés és előretekintő keresés előnyös tulajdonságait egyesíti keresés biztonságának megtartása kiterjesztések számának csökkentése - előretekintő heurisztikával Kiértékelés alapja: a már megtett út, és a még várható út költsége kiértékelő függvény: f(n) = g(n) + h(n) h(n) 0 ahol: g(n): n tényleges távolsága a kezdeti állapottól h(n): n becsült távolsága a céltól f(n) minimális kifejtésre kerülő csúcs
A ALGORITMUS 3 3 2 3 4 5 1 3 2 4 nem feltétlenül optimális 1 4 0 3 1 5 h(n) f(n) élek költsége a példában egységnyi 3 3 2 3 4 5 1 3 2 4 nem feltétlenül optimális 1 4 0 3 1 5 1 6
A* ALGORITMUS olyan A algoritmus, melynek heurisztikus függvénye minden csúcsban alsó becslés n: h(n) h*(n) h(n) megengedhető (admissible) Az A* algoritmus mindig optimális megoldást talál (ha létezik megoldás). A kiterjesztésre választott bármely n csúcsra f(n) f*. (f* - optimális mo. költsége) ha az algoritmus n csúcsot választja m helyett: f(n) f(m) = g(m) + h(m) g(m) + h*(m) = f*(m) = f* A talált megoldás optimális (indirekt bizonyítás) Tfh eljutunk t végpontba, amely nem optimális f(t) f* 1. szerint f(t) f* ellentmondás
A* ALGORITMUS L = {A(3)} L = {B(3) D(3) C(4)} L = {E(3) D(3) C(4)} 1 1 2 B 2 (3) C 2 (4) D 2 (3) 1 1 4 1 1 E 1 (3) F 1 (4) G H 2 (7) I 1 (3) 1 1 3 1 4 3 J O K 0 (6) L 0 (6) M 1 (7) N 0 (5) 1 3 L = {A(3)} L = {B(3) D(3) C(4)} L = {E(3) D(3) C(4)} L = {D(3) C(4) K(6) J()} L = {I(3) C(4) K(6) H(7) J()} L = {C(4) N(5) K(6) H(7) J() O()} L = {F(4) N(5) K(6) H(7) J() O() G()} L = {N(5) K(6) L(6) H(7) J() O() G()} P 0 (7) Q 0 (9)
A* ALGORITMUS h h* csak az útba eső node-okat fejti ki h 0 egyenletes keresés h 0 és élek költsége egységnyi szélességi keresés h1, h2 megengedhető becslések h2 h1 (minden pontban) exp(h1) exp(h2) h1 jobban informált becslés ideális kiértékelő függvény: célállapotban visszaadja a megoldás költségét h(n) = 0 és f(n) = g(n) a célban nem változik, ha bármely állapotból optimális lépést teszünk (tökéletes becslő) ha h(n) tökéletesen becsli a céltól való távolságot, nincs letérés az optimális útról becslés költsége . . .
IDA* ALGORITMUS (ITERATIVE DEEPENING A*) Alapötlet: az iteratív mélyítés csökkentette a vak keresés memóriaigényét – alkalmazzuk most heurisztikus keresésre Iteratív mélyítés, mélységi korlát helyett "jósági" korlát f(n)-re ciklusonként mélységben-először keresés mozgó korlát Mintha a csomópontoknak a "jósági" korlát alatt nem lehetnének leszármazottjai. – Ha a célt nem sikerült így elérni, növeli a korlátot és újraindítja az egész keresést. Jósági korlát meghatározása: Hatékonyabb, ha az aktuális korlátot nem léptetve növeli, hanem az előző iterációs ciklusban választja ki.
IDA* ALGORITMUS (ITERATIVE DEEPENING A*) Tulajdonságok teljes és optimális (úgy, mint A*) memóriaigény – lineárisan nő a cél mélységével időigény – bár redundáns, marad exponenciális (erősen függ h-tól) NIDA* NA* N: kiterjesztett node-ok száma
SZIMULÁLT HŰTÉS (SIMULATED ANNEALING) Alapötlet: fémöntési technikával való analógia Algoritmus nem a legjobb lépést választja, hanem véletlenül választ ha a lépés javít a pillanatnyi helyzeten, elfogadja és megteszi bizonyos valószínűséggel elfogad olyan lépést is, amely ront a pillanatnyi helyzeten hőmérséklet: befolyásolja a rontó lépések elfogadásának valószínűségét kisebb hőmérsékleten kisebb az esély a keresés előrehaladtával a hőmérséklet csökken (végül hegymászó keresés) z: jelenlegi - következő érték
GENETIKUS ALGORITMUS (GENETIC ALGORITHM) Alapötlet: Keresés a természetes kiválasztódás (durva) utánzásával. Fogalmak egyed (egy lehetséges megoldás – állapot) populáció (a lehetséges megoldások egy halmaza) rátermettség – fitness (célfüggvény) genetikus kód (az egyed reprezentációja) genetikus műveletek: kereszteződés, mutáció
GENETIKUS ALGORITMUS (GENETIC ALGORITHM) Töltsd fel a kezdeti populációt. Ha a leállási feltétel teljesül, akkor állj le és add vissza a legjobb egyedeket eredményként. Egyébként válassz ki néhány egyedet a populációból; alkalmazd rájuk a genetikus műveleteket; értékeld ki az új egyedeket; dobd el a legrosszabb egyedeket; menj vissza 2-re.
ÖSSZEGZÉS – KERESÉSEK Feladatmegfogalmazás: akciók, állapotok, célok Vak vagy informált keresés az információ segíthet, de néha nehéz megszerezni Tulajdonságok: teljesség, optimalitás, idő- és memóriaigény Mikor mit érdemes használni? szélességi keresés: csak ha kicsi az elágazási tényező (ritka eset) mélységi keresés: csak ha a reménytelen ágak nem lehetnek túl hosszúak legjobb általános vak keresés: iteratív mélyítés előretekintő keresés, A* keresés: fontos a cél távolságának becslése iteratív javító algoritmusok: jó távolságbecslés nem szabad lokális optimumokban leragadni
ÖSSZEGZÉS – KERESÉSEK Meta-szintű döntések: reprezentáció és módszer választás Nyitott kérdések minden operátor (akció) egyformán fontos nem lehet darabokból összerakni egy utat többet kell tudni (és reprezentálni) az akciókról; előfeltételeikről, hatásaikról, és kölcsönhatásaikról
KÉTSZEMÉLYES JÁTÉKOK (ADVERSARY SEARCH)
JÁTÉKFÁK KERESÉSE Feltételezések: két játékos felváltva lép megadott szabályok szerint a játékosok teljes információjúak nincs szerepe a véletlennek, a szerencsének minden állásban véges számú lépés közül lehet választani a játék véges számú lépésben befejeződik játszma végén egyik játékos nyer, másik veszít (lehet döntetlen is) sakk, malom, snóbli, bridzs, amőba, Othello, triel ??? cél: nyerés lehetőségének és módjának meghatározása (egyik játékos szempontjából)
JÁTÉKFÁK KERESÉSE játékfa: csúcsok: állások (állapotok) élek: lépések (akciók) szintek (MIN, MAX) játékfa tartalmazza az összes lehetséges játszmát (exponenciális) – teljes játékfa felépítése?? játszma: kezdőcsúcstól egy végcsúcsba vezető út a fán levelek értéke ismert közbenső csúcsok értékének meghatározása
JÁTÉKFÁK KIÉRTÉKELÉSE MÉLYSÉGI KERESÉSSEL a két játékos szempontjából különböző kiértékelés! induláskor: max node értéke , min node értéke
MINIMAX ELJÁRÁS módszer a soron következő játékos legjobb első lépésének kiválasztására (legnagyobb biztos előnyszerzés elve) játékfa adott mélységű generálása terminális csúcsok értékeinek meghatározása a maximális, ill. minimális értékek fölfelé terjesztése 8 8 -1 9 8 -1 0 9 6 7 4 8 -3 -1 -4 -2
(M, N) ÁTLAGOLÓ KIÉRTÉKELÉS kiértékelő függvény megbízhatósága tévedések mértékének csökkentése - átlagoló kiértékelés max szinten - m legnagyobb átlaga min szinten - n legkisebb átlaga
STATIKUS KIÉRTÉKELŐ FÜGGVÉNY probléma: a teljes fát felépíteni általában nem tudjuk megoldás: bizonyos mértékig felépített fa leveleire becslés statikus kiértékelő függvény (az adott állástól függ) sakk… finomítások… Othello…
JÁTÉKFA KIÉRTÉKELÉSE konstans mélység szelektív keresés kiértékelés kis mélységben következő mélységű bővítés csak a jobb node-okra (pl. sakkozó gondolkodása – feltehetően jó részeket mélyebben vizsgálja) – iteratív mélyítési technika nyugalmi helyzet taktikai részek - gyorsan változó értékek
JÁTÉKFA KIÉRTÉKELÉSE szinguláris kiterjesztés horizont effektus
ALFA-BÉTA ELJÁRÁS minimax eljárás javított változata - kevesebb csúcs kiértékelése terminális csúcs azonnali kiértékelése vj csak csökkenhet b – felső korlát – eddigi legjobb lépés értéke vj csak növekedhet a – alsó korlát – eddigi legjobb lépés értéke
ALFA-BÉTA ELJÁRÁS
ALFA-BÉTA ELJÁRÁS Alfa-béta eljárás hatékonyságának növelése: fa csúcsainak rendezése cáfoló lépés alkalmazása (az ellenfél erős válaszlépését a következő lépésnél először próbáljuk ki)
ALFA-BÉTA ELJÁRÁS
ALFA-BÉTA ELJÁRÁS Minimax eljárással Alfa-béta eljárással a = 4 b = 4 2 < 4 a vágás a = 4 a = 1 a = 5 a = 2 4 < 5 b vágás 1 4 5 2 1