Mesterséges intelligencia 7
Költség és heurisztika Optimális kereső: a „múltba” tekint Best-first kereső: a „jövőbe” tekint
A-algoritmus Ötvözi az optimális és a best-first keresőt. Minden n csúcsban tároljuk: f(n) = g(n) + h(n) az s-ből a n-en keresztül valamely célcsúcsba vezető út becsült költsége A „múltba” és a „jövőbe” is tekint. s g(n) n h(n) f(n) t
A-algoritmus A legkisebb f-értékű nyílt csúcsot választja kiterjesztésre. A nyílt csúcsok listája legyen a csúcsok f-értéke szerint rendezett. Körfigyelés: zárt csúcsok problémája?
Körfigyelés S n m o o m
Körfigyelés Zárt csúcsok problémája n m o Fel kell frissíteni az m-ből induló részfa csúcsainak költségét (g-értékét)!
Zárt csúcsok problémája Járjuk be a részfát! Gond: szülőre mutatókat használunk. Bízzuk a frissítést az A-algoritmusra! A m-et visszaminősítjük nyílttá. (Mintha nem jártuk volna be a részfát.) Előzzük meg! Az optimális keresőnél nem volt ilyen gond. Mi a titka?
A-algoritmus ELVÁRT tulajdonságai ? Teljesség: Ha van megoldás, akkor tetszőleges állapottér gráfban megtalálja. Ha nincs megoldás, akkor véges állapottér gráfban felismeri. Optimalitás: garantálja az optimális megoldás megtalálását.
Teljesség vizsgálata Állítás: bármely csúcs csak véges sokszor lesz visszaminősítve nyílttá. Minden operátoralkalmazás költsége pozitív. Jelöljük a legkisebb ilyen költséget -val! Minden visszaminősítés során a csúcs g-értéke min. -val csökken. Minden csúcs g-értékének van egy alsó korlátja: a csúcsba jutás optimális költsége.
Teljesség vizsgálata Következmény: bármely nyílt csúcs véges sok lépés után kiterjesztésre kerül, hacsak az A-algoritmus előbb nem talál célállapotot.
A-algoritmus ELVÁRT tulajdonságai Teljesség: Ha van megoldás, akkor tetszőleges állapottér gráfban megtalálja. Ha nincs megoldás, akkor véges állapottér gráfban felismeri. Optimalitás: garantálja az optimális megoldás megtalálását. ?
Optimalitás vizsgálata Ellenpélda: 5 s 2 3 3 4 a b 4 2 t
A-algoritmus tulajdonságai Teljesség: Ha van megoldás, akkor tetszőleges állapottér gráfban megtalálja. Ha nincs megoldás, akkor véges állapottér gráfban felismeri. Optimalitás: nem garantálja az optimális megoldás megtalálását.
A*-algoritmus Az optimális kereső speciális A-algoritmus: h*(n): az n-ből célba jutás optimális költsége g*(n): a startcsúcsból n-be jutás optimális költsége f*(n) = g*(n)+h*(n) : a startcsúcsból n-en keresztül célba jutás optimális költsége Az optimális kereső speciális A-algoritmus: minden n csúcsra: h(n)=0 garantálja az optimális megoldás előállítását Milyen heurisztikával garantálja az A-algoritmus az optimális megoldást? a heurisztika legyen alsó becslés: minden n csúcsra: h(n) h*(n)
A*-algoritmus – 1. lemma 1. lemma: az optimális megoldásnak mindig van eleme a nyílt csúcsok között. Inicializálás után egyetlen nyílt csúcs van: s Induktív feltevés: aktuálisan ni nyílt. Ha nem ni –t terjesztjük ki ni nyílt marad. s= n1 Ha ni –t terjesztjük ki ha ni+1 nincs az adatbázisban felvesszük ni+1 –et nyílt csúcsként. ha ni+1 az adatbázisban van (zártként) utódjai közül némelyek nyílt csúcsként szerepelnek. n2 t= nr
A*-algoritmus – 2. lemma 2. lemma: ha n nyílt csúcsot választjuk kiterjesztésre f(n) f*(s) 1. lemma alapján: az optimális útnak van eleme a nyílt csúcsok között. vegyük a legelső ilyen csúcsot: ni g(ni) = g*(ni) Jelöljük n-nel a kiterjesztésre választott csúcsot. f(n) bármely nyílt csúcs f-értékénél f(n) f(ni) f(n) f(ni) = g(ni)+h(ni) g*(ni)+h*(ni) = f*(ni) = f*(s) = g*(ni) h*(ni)
A*-algoritmus – Tétel Tétel: az A*-algoritmus az optimális megoldást állítja elő. A megoldás előállításának pillanata: a t célcsúcsot terjeszti ki a vezérlő A 2. lemma alapján: f(t) f*(s) f(t) = g(t)+h(t) = g(t) f*(s) =
A*-algoritmus tulajdonságai Teljesség: Ha van megoldás, akkor tetszőleges állapottér gráfban megtalálja. Ha nincs megoldás, akkor véges állapottér gráfban felismeri. Optimalitás: GARANTÁLJA az optimális megoldás megtalálását.
Szélességi, optimális keresők, A- és A*-algoritmusok h(n) h*(n) A*-algoritmus h(n)=0 Optimális kereső k(o,n)=1 Szélességi kereső
Zárt csúcsok problémája Járjuk be a részfát! Gond: szülőre mutatókat használunk. Bízzuk a frissítést az A-algoritmusra! A m-et visszaminősítjük nyílttá. (Mintha nem jártuk volna be a részfát.) Előzzük meg! Az optimális keresőnél nem volt ilyen gond. Mi a titka?
monoton A-algoritmus Az optimális kereső speciális A-algoritmus: minden n csúcsra: h(n)=0 nem fordul elő a zárt csúcsok problémája Milyen heurisztikával eliminálja az A-algoritmus a zárt csúcsok problémáját? a heurisztika legyen monoton: ha n gyermeke m: h(n) h(m)+k(o,n)
A*- és monoton A-algoritmusok A monoton A-algoritmus A*-algoritmus is. Tétel: ha h monoton, akkor h alsó becslés is. Bármely n csúcsra: h(n) h*(n) Ha n-ből nem érhető el célcsúcs h*(n) = Ha n-ből elérhető valamelyik t célcsúcs
A*- és monoton A-algoritmusok Ha n-ből elérhető valamelyik t célcsúcs n= n1 n2 Optimális út n-ből egy célcsúcsba t= nr
Szélességi, optimális keresők, A-, A* és monoton A-algoritmusok h(n) h*(n) A*-algoritmus h(n) h(m)+k(o,n) monoton A-algoritmus h(n)=0 Optimális kereső k(o,n)=1 Szélességi kereső
monoton A-algoritmus Zárt csúcsok problémája Tétel: Ha a monoton A-algoritmus az n nyílt csúcsot választjuk kiterjesztésre g(n)= g*(n) s= n1 Indirekt feltevés: g(n) > g*(n) Legyen ni a startcsúcsból az n-be vezető optimális út első nyílt eleme. n2 Optimális út n-be n= nr
monoton A-algoritmus Zárt csúcsok problémája Optimális út n-be n= nr Ellentmondás: nem n-et kellett volna kiterjesztésre kiválasztanunk!