Előadó: Nagy Sára Mesterséges intelligencia Kereső rendszerek
Alapfeladat: egy út keresése valamilyen gráfban. Különbség az egyes kereső algoritmusokban: mennyire általános útkeresési problémát oldanak meg, optimalizálnak-e valamilyen szempontból.
MI problémamegoldás menete 1. Reprezentálás. 2. Megfeleltetése egy gráfhoz. 3. Valamelyik kereső algoritmus futtatása. 4. Az eredmény értelmezése az eredeti feladat szempontjából.
Általános sémák
Állapottér repr. megfeleltetése gráfhoz állapot művelet művelet költsége kezdő állapot célállapotok művelet sorozat megoldás csúcs irányított él élköltség stratcsúcs terminális csúcsok irányított út irányított út a startcsúcsból egy terminális csúcsba
Gráfreprezentáció fogalma Egy útkeresési probléma gráfreprezentációja egy (R,s,T) hármas, ahol R=(N,A) egy δ-gráf (az úgynevezett reprezentációs gráf) s ∈ N (a startcsúcs) T ⊆ N (a célcsúcsok) A feladat megoldása egy s → T út.
Keresőrendszer sémája Eljárás KR 1. ADAT := kezdeti érték; 2. Ciklus amíg nem Terminális(ADAT) 3. SZABÁLY:=Választ(Alkalmazható(ADAT)); 4. ADAT:=SZABÁLY(ADAT); 5. Ciklus vége; Eljárás vége.
Kereső rendszer részei Globális adatbázis (ADAT) Szabályok (SZABÁLYOK halmaza) Vezérlési startégia (Választ)
Elsődleges vezérlési stratégiák Nem módosítható Módosítható Visszalépéses Gráfkereső
Visszalépéses kereső rendszer Globális adatbázis: egy út a startcsúcsból az aktuális csúcsba Szabályok: egy él hozzá vétele vagy törlése (visszalépés) Vezérlési startégia: a fő elv, hogy a visszalépést utoljára választjuk. Terminálási feltétel: Sikeres: célcsúcs megjelenése az út végén Sikertelen: visszalépés a startcsúcsból
Visszalépés esetei Zsákutca. Zsákutca torkolat. Kör. Mélységi korlát elérése.
Visszalépéses KR algoritmusa Eljárás VL1(csúcs) : megoldás 1. ha cél(csúcs) akkor return nil; 2. szabályok:=kivezető_élek(csúcs); 3. ciklus amíg nem üres-e(szabályok) 4. szab:=kivesz_egyet(szabályok); 5. újcsúcs:=szab(csúcs); 6. megoldás:=VL1(újcsúcs); 7. ha megoldás <> hiba akkor return hozzáfűz(szab,megoldás); 7. ciklus vége; 8. return hiba; Eljárás vége.
Visszalépéses algoritmus 2. változat Eljárás VL2(csúcslista) : megoldás 1. csúcs:=első(csúcslista); 2. ha hossza(csúcslista) > mélységi korlát akkor return hiba; 3. ha eleme(csúcs,maradék(csúcslista)) akkor return hiba; 4. ha cél(csúcs) akkor return nil; 5. szabályok:=kivezető_élek(csúcs); 6. ciklus amíg nem üres-e(szabályok) 7. szab:=kivesz_egyet(szabályok); 8. újcsúcslista:=hozzáfűz(szab(csúcs),csúcslista); 9. megoldás:=VL2(újcsúcslista); 10. ha megoldás <> hiba akkor 11. return hozzáfűz(szab,megoldás); 12. ciklus vége; 13. return hiba; Eljárás vége.
Heurisztika A reprezentációban nem rögzített, a feladattal kapcsolatos konkrét ismeret (vezérlési tudás), amelytől a jó eredményt és a megfelelő hatékonyságot várjuk. sorrendi heurisztika: sorrendet ad a végpontból kivezető élek (utak) vizsgálatára vágó heurisztika: megjelöli azokat a végpontból kivezető éleket, amelyeket nem érdemes megvizsgálni
Állítások A VL1 véges, körmentes, irányított gráfokon mindig terminál, és ha létezik megoldás, akkor talál egy megoldást. A VL2 δ-gráfban mindig terminál, és ha létezik a mélységi korlátnál nem hosszabb megoldás, akkor megtalál egy megoldást.
Értékelés Előnyök: könnyen implementálható; kicsi memória igényű. Hátrányok: nem ad optimális megoldást; kezdetben hozott rossz döntés csak sok visszalépéssel javítható; több úton megközelíthető gráfrészeket többször is bejár.
Gráfkereső rendszer Globális adatbázis: egy részgráf a startcsúcsból kiindulva Szabályok: egy csúcs rákövetkezőinek előállítása (kiterjesztés) Vezérlési stratégia: a „legígéretesebb” csúcs kiterjesztése Terminálási feltétel: Sikeres: célcsúcs kiválasztása kiterjesztésre Sikertelen: nincs kiválasztható csúcs
Gráfkeresés 0. verziója Eljárás GK0 : megoldás 1. G:= s; NYILT:={s}; 2. ciklus amíg nem üres-e(NYILT) 3. n:= választ(NYILT); 4. ha cél(n) akkor return megoldás; 5. G:= G + Γ(n); 6. NYILT:=NYILT \ {n} U Γ(n); 7. ciklus vége; 8. return hiba; Eljárás vége.
Problémák az alap algoritmussal Körökre érzékeny. Hogyan olvasható ki a megoldás? Nem feltétlenül talál optimális megoldást. Mi alapján válasszunk ki egy csúcsot kiterjesztésre?
Válaszok a problémákra Használjunk kiértékelő függvényt. f: NYILT → R a 3. lépésben: n:=min f (NYILT) A csúcsokhoz vezető minél kisebb költségű utat tartsunk nyilván. p: G → G; p(n): az egyikszülőre mutat g: G → R ; g(n):=c α (s,n), ahol α a nyilvántartott út. g* : N → R ; g*(n):=c*(s,n), ami az optimális út s-ből n-be.
Gráfkeresés alapalgoritmusa Eljárás GK : megoldás 1. G:= s; NYILT:={s}; g(s):=0; p(s):=nil 2. ciklus amíg nem üres-e(NYILT) 3. n:= min(NYILT); NYILT:=NYILT \ {n} f 4. ha cél(n) akkor return megoldás; 5. ciklus minden m Γ(n)-re; 6. ha (m G) vagy g(m)>g(n)+c(n,m) akkor p(m):=n, g(m):=g(n)+c(n,m), NYILT:=NYILT U {m}; ha vége; 7. ciklus vége; 8. G:= G + Γ(n); 9. ciklus vége; 10. return hiba; Eljárás vége.
Állítások 1. A GK működése során egy csúcsot legfeljebb véges sokszor terjeszt ki. 2. A GK véges reprezentációs gráfban mindig terminál. 3. Ha egy véges reprezentációs gráfban létezik megoldás, akkor GK egy célcsúcs megtalálásával terminál.
Invariáns lemma Minden s-ből elérhető n csúcsra igaz, hogy GK az n csúcs kiterjesztése előtt bármely s *→n optimális úton mindig nyilvántart egy olyan m csúcsot, amelyre teljesül, hogy 1. m NYILT 2. g(m)=g*(m) 3. minden m-et megelőző csúcs zárt.
Gráfkereső algoritmusok csoportosítása Neminformált Mélységi Szélességi Egyenletes Heurisztikus Előretekintő A A* A c
Heurisztikus függvény h: N → R, ami minden csúcsra becsli a hátralévő út költségét. A h* függvény jelenti az optimális hátralévő utat, azaz h*(n) = min c*(n,t) = c*(n,T) t T
Nevezetes gráfkereső algoritmusok és tulajdonságaik MegnevezésKiértékelő függvényÁllítások Mélységi f = -g és c(n,m)=1 élre Csak mélységi korláttal ad megoldást. Szélességi f = g és c(n,m)=1 élre Legrövidebb megoldást ad, a csúcsokat legfeljebb egyszer terjeszti ki. Egyenletesf = gLegolcsóbb megoldást ad, a csúcsokat legfeljebb egyszer terjeszti ki. Előre tekintőf = h- A f = g+h és 0 h -gráfokon megoldást ad. A* f = g+h és 0 h h* -gráfokon optimális megoldást ad. A c (következetes) f = g+h és 0 h és h(t)=0 t T- re és h(n)-h(m) c(n,m) élre -gráfokon optimális megoldást ad, a csúcsokat legfeljebb egyszer terjeszti ki.
Csökkenő kiértékelő függvény a NYÍLT halmazbeli csúcsok kiértékelő függvényértéke az ott tartózkodás alatt nem nő, a NYÍLT halmazba visszakerülő csúcs kiértékelő függvényértéke határozottan kisebb, mint a csúcs megelőző kiterjesztésekor felvett függvényértéke. Megj.: A nevezetes gráfkereső algoritmusok ilyen csökkenő kiértékelő függvényt használnak.
Működési grafikon
Állítás Csökkenő kiértékelő függvény használata mellett a GK a küszöbcsúcsok kiterjesztésekor optimális költségű konzisztens feszítőfát tart nyilván. Def.: Küszöbcsúcsnak nevezzük azt a csúcsot, amely kiterjesztésekor mért kiértékelő függvényértéke ( a küszöb érték) nagyobb vagy egyenlő, mint a megelőző kiterjesztésekkor mért érték.