Keresések
ADAT := kezdeti érték while terminálási feltétel(adat) loop SELECT SZ FROM alkalmazható szabályok ADAT := SZ(ADAT) endloop KR vezérlési szintjei vezérlési stratégia általános modellfüggő heurisztikus független a feladattól és annak modelljétől: nem merít sem a feladat ismereteiből, sem a modell sajátosságaiból. nem függ a feladat ismereteitől, de épít a feladat modelljének általános elemeire. a feladattól származó, annak modelljében nem rögzített, a megoldást segítő speciális ismeret
Általános vezérlési stratégiák általános stratégiák nemmódosítható lokális keresések evolúciós algoritmus rezolúció módosítható visszalépéses keresések gráfkeresések szabályalapú köv.
1. Lokális keresések A lokális keresés olyan KR, amely a probléma reprezentációs gráfjának egyetlen csúcsát (aktuális csúcs) és annak szűk környezetét tárolja (a globális munkaterületén). Kezdetben az aktuális csúcs a startcsúcs, és a keresés akkor áll le, ha az aktuális csúcs a célcsúcs lesz. Az aktuális csúcsot minden lépésben annak környezetéből vett jobb csúccsal cseréli le (keresési szabály). A jobbság eldöntéséhez (vezérlési stratégia) egy kiértékelő (cél-, rátermettségi-, heurisztikus) függvényt használ, amely reményeink szerint annál jobb értéket ad egy csúcsra, minél közelebb esik az a célhoz.
ADAT := kezdeti érték while terminálási feltétel(adat) loop SELECT SZ FROM alkalmazható szabályok ADAT := SZ(ADAT) endloop Hegymászó algoritmus Mindig az aktuális (akt) csúcs legjobb gyermekére lép, amelyik lehetőleg nem a szülője. 1. akt := start. while akt T loop. akt := arg opt f ( (akt) (akt) ). endloop. return akt A bejárt út megadásához az akt egymás után felvett értékeit össze kell gyűjteni. if (akt) = then return nem talált megoldást if (akt) ={ (akt)} then akt := (akt) else akt := arg opt f ( (akt) (akt)) (akt) ~ akt gyermekei (akt) ~ akt egy szülője Megjegyzés: Az eredeti hegymászó algoritmus nem zárja ki a szülőre való lépést, viszont nem engedi meg, hogy az aktuális csúcsot egy rosszabb értékű csúcsra cseréljük (ilyenkor a keresés inkább leáll).
[,,] [,1,] [,,] [1,,] Hanoi tornyai [1,,] [,1,] [1,1,] [1,1,] [,1,] [,,] [,1,] [1,,1] [,,] [,,1] [,,1] [,,] [,,] [1,,1] [,1,1] [,,] [1,,] [1,,] [,,] [,,1] [,,1] [,1,1] [1,1,1]
a Hogyan látja egy keresés a reprezentációs gráfot? Egy keresés fokozatosan fedezi fel a reprezentációs gráfot: bizonyos részeihez soha nem jut el, de a felfedezett részt sem feltétlenül tárolja el teljesen, sőt, sokszor torzultan látja azt: ha például egy csúcshoz érve nem vizsgálja meg, hogy ezt korábban már felfedezte-e, hanem új csúcsként regisztrálja, akkor az eredeti gráf helyett egy fát fog látni. eredeti gráf: keresés által látott gráf: start a b c b b d c e g f d a b
Reprezentációs gráf fává egyenesítése Ha a keresés nem vizsgálja meg egy csúcsról, hogy korábban már felfedezte-e, akkor az eredeti reprezentációs gráf helyett annak fává kiegyenesített változatában keres. Előny: eltűnnek a körök, de a megoldási utak megmaradnak Hátrány: duplikátumok jelennek meg, sőt a körök kiegyenesítése végtelen hosszú utakat eredményez A kétirányú (oda-vissza) élek drasztikusan megnövelik a kiegyenesítéssel kapott fa méretét. Olcsóbb, ha eltárolhatjuk egy csúcsnak azt a szülőcsúcsát, amelyik felől a csúcsot elértük (lokális kereséseknél ez egyetlen csúcs tárolását jelenti). Így egy csúcsból a szülőjébe visszavezető él könnyen felismerhető és figyelmen kívül hagyható.
Előny: könnyű implementálni Hátrányok: o o Megjegyzés a hegymászó algoritmushoz Csak erős heurisztika esetén lesz sikeres: különben eltéved (nem talál megoldást), sőt zsákutcában beragad (leáll). Segíthet, ha: véletlenül választott startcsúcsból újra- és újra elindítjuk random restart local search k darab aktuális csúcs legjobb k darab gyerekére lépünk local beam search gyengítjük a mohó stratégiáját simulated annealing Lokális optimum hely körül vagy ekvidisztans felületen (azonos értékű szomszédos csúcsok között) található körön, végtelen működésbe eshet. Segíthet, ha: növeljük a memóriát tabu search
Tabu keresés A globális munkaterületén az aktuális csúcson (akt) kívül nyilvántartja még az utolsó néhány érintett csúcsot: Tabu halmaz az eddigi legjobb csúcsot: optimális csúcs (opt) Egy keresési szabály minden lépésben az aktuális csúcsnak a legjobb, de nem a Tabu halmazban levő, gyerekére lép ha akt jobb, mint az opt, akkor opt az akt lesz frissíti akt-tal a sorszerkezetű Tabu halmazt Terminálási feltételek: ha az opt a célcsúcs ha az opt sokáig nem változik.
ADAT := kezdeti érték while terminálási feltétel(adat) loop SELECT SZ FROM alkalmazható szabályok ADAT := SZ(ADAT) endloop Tabu keresés algoritmusa 1. akt, opt, Tabu := start, start,. while not (opt T or opt régóta nem változik) loop. akt := arg opt f ( (akt) Tabu ). Tabu := Módosít(akt,Tabu). if f(akt) jobb, mint f(opt) then opt := akt 6. endloop 7. return akt if (akt) = then return nem talált megoldást else if (akt) Tabu) then akt := arg opt f ( (akt)) else akt := arg opt f ( (akt) Tabu)
[,,] [,1,] [,,] [1,,] Hanoi tornyai [1,,] [1,1,] [1,1,] [,1,] [,1,] [,,] [,1,] [1,,1] [,,] [,,1] [,,1] [,,] [,,] [1,,1] [,1,1] [,,] [1,,] [1,,] [,,] [,,1] [,,1] [,1,1] [1,1,1]
Megjegyzés Előnyök: tabu méreténél rövidebb köröket észleli, és ez segíthet a lokális optimum hely illetve az ekvidisztans felület körüli körök leküzdésében. Hátrányok: a Tabu halmaz méretét kísérletezéssel kell belőni zsákutcába futva a nem-módosítható stratégia miatt beragad
Szimulált hűtés A keresési szabály a következő csúcsot véletlenszerűen választja ki az aktuális (akt) csúcs gyermekei közül. Ha az így kiválasztott új csúcs kiértékelő függvény-értéke nem rosszabb, mint az akt csúcsé (itt f(új) f(akt)), akkor elfogadjuk aktuális csúcsnak Ha az új csúcs függvényértéke rosszabb (itt f(új) > f(akt)), akkor egy olyan véletlenített módszert alkalmazunk, ahol az új csúcs elfogadásának valószínűsége fordítottan arányos az f(akt) f(új) különbséggel: e f(akt) f(új) T random [ 0, 1]
Hűtési ütemterv Egy csúcs elfogadásának valószínűségét az elfogadási képlet kitevőjének T együtthatójával szabályozhatjuk. Ezt egy (T k, L k ) k=1,, ütemterv vezérli, amely L 1 lépésen keresztül T 1, majd L lépésen keresztül T, stb. lesz. f current f(new) e T k > rand[0,1] Ha T 1, T, szigorúan monoton csökken, akkor egy ugyanannyival rosszabb függvényértékű új csúcsot kezdetben nagyobb valószínűséggel fogad el a keresés, mint később. f(új)=10, f(akt)=107 T exp(-1/t) 10 10 0.9999 0 0.77 0 0. 10 0.7 0.07 1 0.00000
ADAT := kezdeti érték while terminálási feltétel(adat) loop SELECT SZ FROM alkalmazható szabályok ADAT := SZ(ADAT) endloop 1. akt := start ; k := 1 ; i := 1. while not(akt T or f(akt) régóta nem változik) loop. if i > L k then k := k+1; i := 1. új := select( (akt) (akt) ). if f(új) f(akt) or f(új)>f(akt) and 6. then akt := új 7. i := i+1 8. endloop 9. return akt Szimulált hűtés algoritmusa e f(akt) f(új) T k rand[ 0, 1] if (akt) = then return nem talált megoldást if (akt) ={ (akt)} then új := (akt) else új := select( (akt) (akt))
Lokális kereséssel megoldható feladatok Erős heurisztika nélkül nincs sok esély a cél megtalálására. Jó heurisztikára épített kiértékelő függvénnyel elkerülhetőek a zsákutcák, a körök. A sikerhez az kell, hogy egy lokálisan hozott rossz döntés ne zárja ki a cél megtalálását! Ez például egy erősen összefüggő reprezentációs-gráfban automatikusan teljesül, de kifejezetten előnytelen, ha a reprezentációs-gráf egy irányított fa. (Például az n- királynő problémát csak tökéletes kiértékelő függvény esetén lehetne lokális kereséssel megoldani.)
A heurisztika hatása a KR működésére A heurisztika olyan, a feladathoz kapcsolódó ötlet, amelyet közvetlenül építünk be egy algoritmusba azért, hogy annak eredményessége és hatékonysága javuljon (egyszerre képes javítani a futási időt és a memóriaigényt), habár erre általában semmiféle garanciát sem ad. heurisztika eredményesség hatékonyság futási idő memóriaigény
ADAT := kezdeti érték while terminálási feltétel(adat) loop SELECT SZ FROM alkalmazható szabályok ADAT := SZ(ADAT) endloop Heurisztika és KR hatékonysága költség számítási költség szabály alkalmazások száma (iterációk száma) egy szabály kiválasztásának költsége (egy iterációs lépés) informáltság Forrás: Nilsson: Princ. of AI, pp.. teljes
1 8 7 6 Heurisztikák a 8-as (1-ös) tologató játékra Rossz helyen levő lapkák száma (W): Manhattan (P): a lapkák célbeli helyüktől vett minimális távolságainak (függőleges és vízszintes mozgatásai számának) összege 8 1 6 7 6 Keret (F): büntető pontokat ad +1 minden olyan lapkára a szélen, amelyet nem a célbeli szomszédja követ az óra járásával megegyező irányban, + minden olyan sarokra, ahol nem a cél szerinti lapka áll.
W Hegymászó keresés 8 1 6 7 8 1 7 6 8 1 7 6 Tie-breaking rule: csúcsok sorrendjére < left, up, right, down > 8 1 7 6 8 1 7 6 8 7 1 6 8 1 7 6 l:, u:, r:, d:- l:, u:, r:, d: l:-, u:, r:, d: l:, u:, r:, d: l:, u:-, r:, d: 1 7 1 8 7 8 1 6 l:-, u:-, r:, d: l:-, u:, r:, d: l:-, u:-, r:1, d: l:, u:-, r:, d:0 6 0 1 8 7 6
P Hegymászó keresés 8 1 6 7 1 8 7 6 8 1 7 6 l:6, u:, r:6, d:- l:, u:, r:, d: W: l:, u:, r:, d: l:-, u:-, r:, d:1 1 8 7 6 l:, u:-, r:, d: 1 1 8 7 6 l:-, u:, r:0, d: 0 1 8 7 6
F Hegymászó keresés 6 8 1 6 7 1 8 7 6 8 1 7 6 l:8, u:, r:8, d:- l:, u:, r:6, d: W: l:, u:, r:, d: l:-, u:-, r:, d:1 1 8 7 6 l:, u:-, r:, d: 1 1 8 7 6 l:-, u:, r:0, d: 0 1 8 7 6
start 8 1 6 7 Keresés által érzékelt állapot-gráf 8 1 6 7 8 1 7 6 8 1 6 7 8 6 1 7 8 1 7 6 1 8 7 6 8 1 7 6 8 1 6 7 1 8 6 7 8 6 1 7 8 1 7 6 8 7 1 6 1 8 7 6 1 8 7 6 8 1 7 6 8 1 7 6 8 1 6 7 8 1 6 7 8 1 7 6 8 1 7 6 8 1 8 7 6 7 8 1 7 6 1 6 8 7 1 6 cél 1 8 7 6 1 8 7 6 1 8 7 6 1 7 8 6 1 8 7 6 1 8 7 6 cél duplikátum 8 1 7 6 8 1 7 6 duplikátum 8 1 7 6 8 1 7 6 8 1 6 7 8 1 6 7 8 1 7 6
Darab: C(this) = i=1..n 1 this[i] 1 Heurisztikák a Hanoi tornyai problémára Súlyozott darab: Összeg: WC(this) = i=1..n i this[i] 1 S(this) = i=1..n this[i] Súlyozott összeg: WS(this) = i=1..n i this[i] Módosított összeg: EWS(this) = WS(this) i=..n 1 + i=..n 1 this[i 1]>this[i] this[i 1]=this[i+1] this[i] this[i 1]
Inverziószám: Heurisztikák a Fekete-fehér kirakóra I(this)= minimálisan hány csere kell ahhoz, hogy minden fehér minden feketét megelőzzön Módosított inverziószám: M(this)= I(this) (1, ha this-nek része vagy )
Inv *Inv -?1 start 1 1 1 1 1 1 cél 0 0 0 0 cél 0 0 cél 0 0 cél