Számítógép és programozás 2 11. Előadás Halmazkeresések, dinamikus programozás http://digitus.itk.ppke.hu/~flugi/
A keresési feladat megoldása Legyen a lehetséges megoldások halmaza M ciklus { X legyen egy tetszőleges eleme M-nek } amíg X nem megoldás Kicsit lassú Viszont minden keresési feladat őse A keresési feladatok csak abban különböznek, hogy milyen stratégia szerint vizsgálnak meg egy elemet előbb, vagy később
Bejáró keresések Informálatlan keresések mélységi szélességi Visszalépéses keresés: részben informált, miszerint sosem javul ki már elrontott útvonal Informált keresések heurisztika megengedhető heurisztika: A* algoritmus
Heurisztikák A heurisztika egy becslés az adott pontból induló optimális út végleges súlyára (h*-ra) Legyes w(s) az s út eddig felhalmozott súlya, és h(s) az út végpontjához tartozó heurisztikus függvény, ilyenkor az utak jelenlegi halmazából azt az s úthosszabbítást választjuk, amire w(s) +h(s) minimális Ha h(s) sosem becsül túl (megengedhető), akkor A* Ha h=h*, akkor nem értékel ki felesleges csúcsot Ha h(s)=0 minden s-re, akkor egyenletes keresés Ha az élek súlya egyforma, akkor szélességi
Optimalizációk Kétféle optimalizációs kontextust fogunk használni: Gráfon keresés amikor a szomszédság kérdése hangsúlyos f függvény maximumértékének keresése úgy, hogy a megengedett művelet egy x Df elemére kiszámítani f(x)-et amikor a heurisztikus függvényt általánosíthatjuk tetszőlegesen finom felbontású problémára
Optimalizációs módszerek Egyenletes keresés / A* Halmazt bővítő, aktuális halmaz minden szomszédságát kezelő hozzáállás Iteratív approximációs megoldások Közelítő módszerek, becslés pontosítása Hegymászó Egyetlen pont bolyongása a problématérben Dinamikus programozás Lépéslehetőségek szuboptimális kombinációja
Iteratív approximációs megoldások Kezdetben adott egy érvényes de nem optimális megoldás Létezik szabály vagy heurisztika az optimális megoldás felé elmozdításra Példa: Newton solver: feladat: függvény zérushelyének meghatározása (optimalizálás: 0-hoz legközelebbi elem megkeresése) minden lépésben az adott pontbeli értékből indított érintő zérushelyét nézzük a következő körben
Iteratív approximációs megoldások Az elv: van egy vagy több elemünk Tudjuk, hogy az érvényes elemekből hogyan kaphatunk eddig nem látott érvényes elemeket (pl. sziget bejárása) Heurisztika, vagy tétel szerint lépésről lépésre közelítjük a legjobb megoldást A genetikus algoritmus (GA) is egy iteratív megoldás A mesterséges neuronhálózat is iteratívan tanítható approximátor
Hegymászó Egy pontot veszünk, és mindig az f függvény által adott felületen felfelé igyekszünk f': gradiens módszernek is nevezik Előnyei: egyszerű implementálni, gyors lehet, sokszor igen lassú művelet kiszámítani az f függvényt Hátrányai: érzékeny a felület bonyolultságára, lokális maximumpontba beragad
Szimulált hűtés Sok hegymászónk van, akik néha véletlenszerűen is lépnek A hűtés a véletlen mozgás valószínűségét csökkenti Így eleinte kijönnek a lokális maximumok környezetéből Jobb a mechanikus gradiens módszernél, de ugyanúgy beakadhat, csak több esélye van a globális maximumpontra Akkor érdemes használni, ha van valamennyire pontos elképzelés a globális optimum helyéről
Halmazok iteratív összeállítása Gyakori feladattípus: Egy összefüggő részhalmazt keresünk úgy, hogy csak az összefüggőséget adó szabályt ismerjük, a részhalmazra nincs zárt szabályunk Pl 2D sziget beszínezése, összefügg az, ami szomszédos pont, és szárazföld Egy vagy több eleme ismert a halmaznak Viszonylag sok feladatban felfedezhető Lezárt (függvény lezártja): A szomszédsági reláció lezártja egy pontra = az adott pontból szomszédok során elérhető összes pont
Halmazok iteratív összeállítása Módszer: bővítsük a halmazt a meglevő elemek szomszédaival Terminálási feltétel: a halmazbővítés egy köre lefutott új szomszéd találata nélkül Példák: floodfill, kitöltés elérhető elemek listája
Dinamikus programozás Példafeladat: van két szövegünk, adjuk meg a távolságot köztük a minimális módosítások számával betoldás, törlés, helyettesítés Levenshtein távolság például Gizike és Győzike között a távolság 2: Gizike, Gyizike, Győzike Ez nem karakterenkénti távolság: g i z i k e g y ő z i k e
Dinamikus programozás A megoldás két mátrix használata, melyből az egyik a statikus távolságokat tartalmazza itt most 0 vagy 1, hogy a két karakter egyezik-e vagy sem (a helyettesítés súlya) T g y ő z i k e g 0 1 1 1 1 1 1 i 1 1 1 1 0 1 1 z 1 1 1 0 1 1 1 i 1 1 1 1 0 1 1 k 1 1 1 1 1 0 1 e 1 1 1 1 1 1 0
Dinamikus programozás A másik mátrix erre épül úgy, hogy bejár minden részszó-részszó párt, hibát görgetve Minden pozíciópárra rápróbálja a lehetséges műveleteket (törlés, beszúrás, javítás) minimuma a lehetséges útvonalaknak a pozícióhoz A honnan jöttünk kapcsolatok megadják az útvonalat visszafelé D g y ő z i k e 0 1 2 3 4 5 6 7 g 1 0 1 2 3 4 5 6 i 2 1 1 2 3 3 4 5 z 3 2 2 2 2 3 4 5 i 4 3 3 3 3 2 3 4 k 5 4 4 4 4 3 2 3 e 6 5 5 5 5 4 3 2
törlés Dinamikus programozás A D mátrix elemeinek függősége a lehetséges műveletekből származik A helyettesítés/ B azonos C min(a+t itt, B+W t,c+w b ) beszúrás
Dinamikus programozás A lépéslehetőségek megadják, hogy mely pontokból választhatunk minimumot Ez a választás irányt is mutat: honnan jöttünk A táblázat kitöltésének befejeztével ezen útvonalak visszafelé bejárva kaphatóak meg Azért nem előrefelé, mert lehetségesek zsákutcák, csak az számít, hogy melyik útvonal érkezett meg sikeresen
Dinamikus programozás Az egyes lépések súlya hangolható, például a T mátrix valós távolságokat tartalmazhat, jobban vagy kevésbé büntethetjük a beszúrást/törlést A lépéslehetőségek megszabásával más és más jellegű megoldások kereshetőek, például megtiltható két egymás utáni törlés/beszúrás, ha az útvonalak ilyenek:
Összefoglalás Egyenletes/A* keresés, heurisztika minősége Sikeressége lehet garantált Bolyongás gradiens irányba Beragadhat lokális maximumba, de lehet gyors, és egyszerű megírni Mesterséges neuronhálók tanítási stratégiái ennek esetei Lépéslehetőségek megszorítása Csak a lépéslehetőségek kombinációin optimális a dinamikus programozás megoldása Létezik polinomiális megoldás