Mesterséges Intelligencia 1
A nem informált keresés szisztematikusan új állapotokat generálnak, és összehasonlítják azokat a célállapottal. Ezek a stratégiák általában rossz hatékonysággal dolgoznak. Ide tatoznak a lokális keresési algoritmusok amelyeket a statisztikai fizika inspirálta módszerek (szimulált lehűtés, simulated annealing), és az evolúciós biológia sugallta módszerek (genetikus algoritmusok, genetic algorithms). Van még online keresés is (online search). Itt az ágens egy teljesen ismeretlen állapottérrel találja magát szemben. 2
Az ilyen keres céljai: 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) 3
Heurisztika a keresésben: A még ki nem fejtett csomópontok 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*) 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! 4
Célja: 1.a feladat megoldásával járó számításigény csökkentése 2.adott erőforrás használat mellett a lehető legjobb megoldás megtalálása 3.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ő) 5
Ez a fa-keresés olyan speciális esete ahol egy csomópont kifejtésre való kiválasztása egy f(n) kiértékelő függvénytől (evaluation function) függ. Hagyományosan a legkisebb értékű csomópontot választjuk kifejtésre, mert a kiértékelő függvény a céltól való távolságot méri. Ez a módszer nem a legjobb (keresünk, nem ismerjük), hanem a legjobbnak tűnő csomópontot választja. 6
Ezeknek az algoritmusoknak a kulcseleme egy h(n) heurisztikus függvény (heuristic function). h(n)=az n csomóponttól a célig vezető legolcsóbb út becsült útköltsége. Ha n egy célállapot, akkor h(n)=0. 7
Azt a csomópontot fejti ki a következő lépésben amelyiknek az állapotát a legközelebbinek ítéli meg a célállapothoz. A csomópontokat az algoritmus az f(n)=h(n) heurisztikus függvénnyel értékeli ki. 8
Románia példáján legyen a légvonalban mért távolság h LMT. Ha a cél Bukarest, akkor h LMT (Benn(Arad))= ábra: A h LMT értékei – a légvonalbeli távolságok Bukarestig. 9
4.2. ábra: A mohó legjobbat – először keresés lépései Bukarest esetén a h LMT –ot alkalmazva. A csomópontok a saját h-értékeikkel vannak felcímkézve. 10
Ez az algoritmus soha nem fejt ki olyan csomópontot amely nem a megoldási úton fekszik. Ezért minimális a keresési költsége, de nem optimális: Az Arad-Nagyszeben-Fogaras-Bukurest 32km- rel hosszabb mint Arad-Nagyszeben-Rimnicu Vilcean-Pitestin-Bukurest. Az algoritmus azért mohó mert minden lépésben igyekszik annyira közel kerülni a célhoz amennyire csak lehet. 11
A h(n) minimalizálása érzékeny a hibás kezdő lépésekre. Pl. Iasi-Fogaras út. A heurisztika alapján Neamtot kellene először kifejteni, de ez zsákutca. A megoldás, hogy előbb elmenjünk Vasluira (a céltól távolabb van), majd Csalános, Bukarest, Fogaras. Ebben az esetben az algoritmus egy felesleges csomópontot is kifejt. Ha nem figyelünk az ismétlődő állapotokra, sose találjuk meg a megoldást (Neamt és Iasi között fogunk mozogni). 12
A mélységi keresésre hasonlít a legjobban. Egyetlen út követését preferálja a célig, de zsákutcából visszalép. Nem optimális és nem teljes (elindulhat egy végtelen úton). Az idő-és tárigény O(b m ), ahol m a keresési tér maximális mélysége. 13
Ez a teljes becsült útköltség minimalizálása (A csillag). Kiértékelés alapja: az aktuális csomópontig megtett út költsége az adott csomóponttól a célhoz vezető út várható költsége 14
A kiértékelő függvény: f(n)=g(n)+h(n) g(n) megadja a kiinduló csomóponttól az n csomópontig számított útköltséget, és h(n) az n csomóponttól a célcsomópontba vezető legolcsóbb költségű út költségének becslője, ezért: f(n) = a legolcsóbb, az n csomóponton keresztül vezető megoldás becsült költsége. 15
Az A* optimális lesz, ha h(n) egy elfogadható heurisztika (admissible heuristic), azaz ha h(n) soha nem becsüli felül a cél eléréséhez szükséges költséget. Az elfogadható heurisztika egyik nyilvánvaló példája a Bukarestbe történő utazás során felhasznált h LMT =légvonalban mért távolság. A légvonalban mért távolság elfogadható mert bármely két pont között a legrövidebb távolság a légvonalban mért távolság, így a légvonalban mért távolság soha nem becsülhet túl. 16
4.3.a ábra 17
4.3.b ábra 18
4.3.c ábra: Az a.), b.) és c.) ábra A* keresés lépései Bukarest keresése során. 19
Bukarest először az (e) lépés peremén jelent meg, de nem került kifejtésre, mert Bukarest f-értéke (450) magasabb mint Pitestié (417). Ezt úgy lehetne megmagyarázni, hogy lehet hogy Pitestin keresztül létezik egy 417 költségű olcsó megoldás, így az algoritmus nem fog választani egy 450 költségű megoldást. Az A*algoritmus optimális, ha h(n) elfogadható. 20
Vizsgáljuk újra a 8-kirakójátékot. A cél, hogy a számozott lapkákat vízszintesen és függőlegesen az üres helyre tolva a kiinduló állásból a célállásba jussunk ábra: A 8-kirakó játék egy tipikus feladata. A megoldás 26 lépés hosszú. 21
Egy átlagos megoldás véletlen módon generált 8- as kirakójáték példányok esetén kb. 22 lépésből áll. Az elágazási tényező nagyjából 3(2, 3 vagy 4). A 22 mélységig menő kimerítő keresés 3 22 (3.1x10 10 ) lépésből áll. Ha kizárjuk az ismétlődő állapotokat 9!/2= elrendezés létezik. 15-ös kirakójáték esetén ez a szám már Ezért szükségünk van egy jó heurisztikára! 22
Ha a legrövidebb megoldásokat akarjuk megtalálni az A* algoritmussal, olyan heurisztikus függvényre van szükségünk, ami soha nem becsüli túl a célállapot eléréséhez szükséges lépések számát. Két lehetőség: h 1 – a rossz helyen lévő lapkák száma. h 2 – a lapkáknak a saját célhelyeiktől mért távolságaik összege. 23
h 1 : A 4.4. ábrán egyik lapka sincs a helyén, így a kiinduló állapotban h 1 =8. h 1 elfogadható heurisztikus függvény mivel nyilvánvaló, hogy minden lapocskát legalább egyszer mozgatni kell. h 2 : Mivel a lapkákat nem lehet átlósan mozgatni, a kiszámított távolság a vízszintes és függőleges távolságok összege lesz. 24
h 2 : ezt a távolságot háztömb távolságnak (city block distance), vagy Manhattan távolságnak (Manhattan distance) is szokás nevezni. h 2 szintén elfogadható heurisztikus függvény, mert minden egyes mozgatással egy lapkát csak egy hellyel lehet közelebb vinni a célhoz. A kiinduló állapotban az 1-8 lapkákra számított Manhattan távolság: h 2 = =18. Nem becsüli túl a megoldás költségét ami
Az eddig ismertetett keresési algoritmusokat úgy tervezték, hogy a keresési tereket szisztematikusan tárják fel. A szisztematikusságot úgy érik el, hogy egy vagy több utat tartanak a memóriában, és azt is feljegyzik, hogy minden pontban az út mentén melyik alternatívát vizsgálták már meg, és melyiket nem. Amikor megtalálják a célt, a célhoz vezető út egyben a probléma megoldása. 26
Számos problémában a célhoz vezető út érdektelen. A 8-királynő problémában a királynők végleges konfigurációja számít, nem pedig a sorrend ahogy az új királynőket felhelyezzük. A lokális keresési algoritmusok (local search) csak egy aktuális állapotot (current state) vesznek figyelembe, és általában csak ennek az állapotnak a szomszédaira lépnek tovább. A keresés által követett utat tipikusan el sem tárolják. 27
A lokális keresési algoritmusok nem szisztematikusak, de ennek ellenére két kulcsfontosságú előnyük van: 1. Igen kevés (általában konstans mennyiségű) memóriát használnak. 2. Sokszor nagy vagy végtelen keresési térben elfogadható megoldást produkálnak (a szisztematikus algoritmusokkal ellentétben). 28
Alokális keresés megértéséhez elemeznünk kell az állapottérfelszínt (state space landscape) ábra: Egy egydimenziós állapottérfelszín, ahol a magasság a célfüggvénynek felel meg. A cél a globális maximum megtalálása.
A felszínnek van „pontja” (amit az állapot definiál) és „magassága” (amit a heurisztikus vagy a célfüggvény értéke határoz meg). Ha a magasság a költséggel arányos, akkor a cél a legalacsonyabban fekvő völgyet (globális minimum) megtalálni. Ha a magasság a célfüggvénynek felel meg, akkor a cél a legmagasabb csúcs (globális maximum) megtalálása. Az egyikről a másikra könnyen átválthatunk előjelcserével. 30
Egy teljes lokális keresés mindig talál megoldást, ha az egyáltalán létezik. Egy optimális algoritmus mindig megtalálja a globális minimumot vagy maximumot. 31
A hegymászó keresési algoritmus (hill climbing) egyszerűen egy ciklus amely mindig javuló értékek felé (felfelé) lép. Az algoritmus akkor áll meg ha felér a csúcsra, ahol nincsenek magasabb értékű szomszédok. Az algoritmus nem tart nyilván keresési fát. A hegymászó keresés nem néz előre az aktuális állapotot közvetlenül követő szomszédokon túl. Arra hasonlít mintha a Mount Everest csúcsát szeretnénk megtalálni sűrű ködben és emlékezetkihagyásban szenvedve. 32
Illusztrálásra a 8-királynő problémát (8-queens) fogjuk használni. A lokális keresési algoritmusok tipikusan a teljes állapot leírással élnek (complete state formulation), ahol minden állapotban a táblán 8 királynő helyezkedik el, oszloponként egy. Az állapotátmenet függvény minden olyan lehetséges állapotot visszaad, amit úgy kapunk, hogy egy királynőt ugyanabban az oszlopban egy másik mezőre mozgatunk (minden állapotnak 8x7=56 követője van.) 33
A h heurisztikus függvény az egymást támadó királynők száma. E függvény globális minimuma 0, ami csak a tökéletes megoldásban érhető el. A 4.6.a. Ábra egy h=17 értékű állapotot mutat. Az ábra az összes követőnek az értékét is mutatja, ahol a legjobb követőé h=12. Ha a legjobból több van, az algoritmus véletlenül választ egyet. 34
4.6. ábra: (a) a 8-királynő probléma h=17 heurisztikus költségbecslésű állapota, ahol minden olyan követő állapot h értéke adott, amikor a királynőt a saját oszlopában mozgatjuk. A legjobb lépések be vannak jelölve. (b) Egy lokális minimum 8-királynő térben. Az állapot h értéke egységnyi, azonban minden követőnek magasabb a költsége. 35
Ezt a keresést néha mohó lokális keresésnek is hívják (greedy local search) mert egy jó követő állapotot megragad, anélkül hogy megfontolná hogy merre érdemes továbbmenni. A hegymászás gyakran igen gyorsan halad a megoldás felé, mert egy rossz állapoton nagyon könnyű javítani. A 4.6.a. Állapotból indulva 5 lépés elegendő hogy elérjük a 4.6.b. Állapotot melynek költsége h=1, és amely közel van a megoldáshoz. 36
A hegymászás gyakran megakad a következő problémák miatt: Lokális maximumok: a lokális maximum egy csúcs, amely minden szomszédjánál magasabb, de a globális maximumnál alacsonyabb. A hegymászó algoritmusok, ha egy lokális maximum közelébe érnek, kénytelenek a csúcs felé tartani, ott azonban megakadnak (lásd a 4.5. ábrán). A 4.6.b. egy példa erre. Bármely királynő bármely lépése csak ront a helyzeten. 37
Fennsík (plateaux): ez az állapottérnek egy olyan területe ahol a kiértékelő függvény gyakorlatilag lapos. Lehet ez egy lapos lokális maximum, ahonnan nincs tovább felfelé, de lehet egy váll (shoulder) is, ahonnan még lehetséges az előrehaladás. Egy hegymászó keresés képtelen lehet arra, hogy megtalálja a fennsíkról kivezető utat. 38
Az algoritmus elér egy pontot ahonnan már nem tud továbblépni. Egy véletlen módon generált 8-királynő állapotból kiindulva a hegymászó algoritmus az esetek 86%-ában elakad, és csak 14%-ban oldja meg a problémát. Az algoritmus gyors, átlagban 4 lépést tesz amikor sikerrel jár, és 3 lépést tesz amikor elakad. Mivel az állapottér 8 8 =17 millió, ez egyáltalán nem rossz. 39
Az algoritmus megáll ha fennsíkra ér, ahol a legjobb követőnek ugyanaz az értéke mint az aktuális állapotnak. Ezért oldallépéseket is engedélyezünk (sideway move), és azt reméljük, hogy a fennsík valójában váll. Ha az oldallépéseket mindig megengedjük, akkor ha felfelé haladás nincs, végtelen hurokba kerülünk minden olyan esetben amikor az algoritmus olyan lapos lokális maximumot talál ami nem váll. 40
Gyakori megoldás az oldallépések számát korlátozni. Ha a 8-királynőnél megengedünk 100 egymás utáni oldallépést, a megoldott problémák aránya 14%-ról 94%-ra növekszik. A siker ára a lépések növekedésével jár. A megoldott eset átlagban 21 lépés, a kudarc átlagosan 64 lépés. 41
Ezek az algoritmusok nem teljesek, sokszor kudarcot vallanak mert beragadnak egy lokális makszimumba. A véletlen újraindítású hegymászás (random-restart hill climbing) az ismert közmondás szerint jár el: „Ha nem megy előre, csináld újra”. Véletlenül generált kiinduló állapotokból hegymászó keresést végez, amíg célba nem ér. Az algoritmus teljes mert előbb-utóbb a célállapotot kezdőállapotként fogja generálni. 42
Ha minden hegymászó keresés p valószínűséggel sikeres, a véletlen újraindítások várható száma 1/p. A 8-királynő problémában, ha oldallépéseket nem engedünk meg, p=0.14, így a cél megtalálására átlagosan 7 iterációra van szükségünk (6 kudarc és 1 siker). 43
A hegymászás sikere nagyban függ az állapottér felszínének alakjától: ha csak néhány lokális maximum és fennsík található, az újraindításos módszer gyorsan meg fogja találni a megoldást. 44
A hegymászó keresés nem teljes mert beragadhat egy lokális maximumba. Ezzel szemben a tisztán véletlen vándorlás teljes, de hihetetlenül nem hatékony. Értelmesnek tűnik a hegymászás és a véletlen vándorlás ötvözése, hogy megtartsuk a hatékonyságot és a teljességet is. 45
Alapötlet: A kohászatban a lehűtés (annealing) a fémeket, illetve az üveget edző, keményítő folyamat, amikor azokat magas hőmérsékletre felmelegítjük, majd fokozatosan lehűtjük, hogy az anyag alacsony energiájú kristályos állapotba kerüljön. 46
Térjünk át a gradiens leereszkedésre (gradient descent). Képzeljük el, hogy az a feladatunk, hogy egy hepehupás asztalon egy pingponglabdát a legmélyebb szakadékba juttassunk. Ha a labdát gurulni hagyjuk, egy lokális minimumba kerül. Ha a felületet megrázzuk, a labdát kiugraszthatjuk a lokális minimumból. 47
A trükk az, hogy olyan erősen kell megrázni a felületet, hogy a labda a lokális minimumból kikerüljön, de mégsem olyan erősen, hogy a labda a globális minimumból kiugorjon. A szimulált lehűtés olyan megoldás, hogy először erősen rázunk (magas hőmérséklet), majd fokozatosan csökkentjük a rázás intenzitását (csökkentjük a hőmérsékletet). 48
49