Plánováníá rozvrhování Romn Brták, KTIML romn.rtk@mff.uni.z z http://ktiml.mff.uni.z/~rtk N úvod Plánoví prolém P je trojie (Σ,s 0,g) Σ je plánoví domén popisujíí stvy ke (přehody ř mezi stvy) s 0 je počáteční stv g hrkterizuje ílové stvy Množinová reprezente prolému stv je množin výroků ke je trojie množin výroků (preond,effets -,effets + ) preond s (s effets - ) effets + Klsiká reprezente prolému stv je množin instniovnýh tomů operátor je trojie (nme, preond, effets), kde preond effets jsou množiny literálů ke je instní operátoru preond + s preond s = (s effets ) effets +
Klsiká reprezente Konstnty loky:,,,d,e Predikáty: ontle(x) kostk x je n stole on(x,y) kostk x je n koste y ler(x) kostk x n soě ni nemá holding(x) rootov ruk drží kostku x hndempty rootov ruk ni nedrží Ake unstk(x,y) Preond: on(x,y), ler(x), hndempty Effets: on(x,y), ler(x), ler(y), hndempty, holding(x), stk(x,y) Preond: holding(x), ler(y) Effets: holding(x), ler(y), on(x,y), ler(x), hndempty pikup(x) Preond: ontle(x), ler(x), hndempty Effets: ontle(x), ler(x), hndempty, holding(x) putdown(x) Preond: holding(x) Effets: holding(x), ontle(x), ler(x), hndempty Množinová reprezente Výroky: pro 5 kostek máme 36 výroků Ake pro 5 kostek máme 50 kí ontle- kostk je n stole (5x) on-- kostk je n koste (20x) ler- kostk n soě ni nemá (5x) holding-d rootov ruk drží kostku d (5x) hndempty rootov ruk ni nedrží (1x) unstk-- Pre: on--, ler-, hndempty Del: on--, ler-, hndempty Add: holding-, ler- stk-- Pre: holding-, ler- Del: holding-, ler- Add: on--, ler-, hndempty pikup- Pre: ontle-, ler-, hndempty Del: ontle-,, ler-, hndempty Add: holding- putdown- Pre: holding- Del: holding- Add: ontle-, ler-, hndempty
Poznámky ke složitosti Jká je složitost klsikého plánování v klsiké reprezenti? Rozhodnutelnost Funkční symoly Existene plánu Plán do dné délky ne no no no částečně no Složitost Prolém zstvení Negtivní Negtivní Existene Plán do dné efekty předpokldyř d plánu délky no no/ne EXPSPACE- NEXPTIME- ne no NEXPTIME- NEXPTIME- ne EXPTIME- NEXPTIME- Jk se dělá plánování? Téměř všehny plánoví lgoritmy jsou zloženy n prohledávní. Jednotlivé lgoritmy se liší tím, jký prostor jk konkrétně se prohledává. Plánování ve stvovém prostoru uzly odpovídjí stvům Plánování á í v prostoru plánů ů uzly odpovídjí částečně instniovným plánům
Plánování ve stvovém prostoru Plánování se stvy Prohledávný prostor odpovídá stvovému prostoru plánovího prolému. uzly odpovídjí stvům hrny odpovídjí stvovým přehodům pomoí kí ílem je njít estu mezi počátečním stvem některým konovým stvem Typy prohledávání dopředné ř d (forwrd serh) zpětné (kwrd serh) liftovná verze STRIPS prolémově závislé (svět kostek) Poznámk: lgoritmy udeme uvádět pro klsikou reprezenti.
Dopředné plánování Zčínáme v počátečním stvu jdeme k některému stvu ílovému. Je potře umět: rozhodnout, zd je dný stv ílový neo ne njít množinu kí plikovtelnýh n dný stv vypočítt stv, do kterého se dostneme plikí ke Algoritmus of n opertor in O, tke 3 move r1 tke 2
{elong(rne1,lo1), djent(lo2,lo1), holding(rne1,3), unloded(r1), t(r1,lo2), oupied(lo1), i oupied(lo2), } Příkld Počáteční stv move(r1,lo2,lo1) {elong(rne1,lo1), djent(lo2,lo1), holding(rne1,3), unloded(r1), t(r1,lo1), oupied(lo1), } lod(rne1,lo1,3,r1) {elong(rne1,lo1), djent(lo2,lo1), empty(rne1), loded(r1,3), d( t(r1,lo1), oupied(lo1), } Cíl = {t(r1,lo1),loded(r1,3)} lo1 Cíl Vlstnosti Proedur dopředného ř d plánování á je korektní. kt Pokud vrátí nějký plán, potom je řešením. Stčí si uvědomit, že s = γ(s 0,π). Proedur dopředného plánování je úplná. Pokud existuje plán, potom lespoň jedn z větví nedeterminismu ho njde. indukí podle délky plánu v kždém kroku má lgoritmus šni zvolit správnou ki (pokud v předhozíh kroíh volil ke z plánu)
Determinismus Algoritmus dopředného prohledávání můžeme implementovt deterministiky: prohledávání do šířky (redth-first serh) korektní, úplné, le pměťově náročné prohledávání do hlouky (depth-first serh) korektní, úplnost lze zřídit kontrolou yklů (stv se n estě neopkuje) uspořádné prohledávání (est-first serh) korektní, úplné, le pměťově náročné hldové d é prohledávání á (greedy serh) korektní neúplné V čem je prolém prohledávání dopředu? Větvení Vysoký větvíí fktor počet možností k výěru 50 možností, počáteční stv íl jkou kostku 2 zvednout 1 2 3 50 3 To vdí u determinismu, který může ztráet čs zkoušením irelevntníh kí. Řešení: heuristik doporučujíí výěr ke ořezání prohledávného prostoru Npř. pokud plány π 1 π 2 dosáhly stejného stvu, potom víme, že tké plány π 1 π 3 π 2 π 3 dosáhnou stejného stvu. Delší z plánů π 1 π 2 tedy nemusíme dále rozvíjet. Je potře si pmtovt všehny nvštívené stvy. 1
Zpětné plánování Zčínáme s ílem (pozor to není stv, le reprezente množiny stvů!) jdeme přes podíle k počátečnímu stvu. Je potře umět: zjistit, zd dný stv odpovídá íli pro dný íl njít relevntní ke vypočítt podíl umožňujíí plikovt dnou ki Ake je relevntní pro íl g právě když: ke přispívá do g: g effets() efekty ke nejsou v konfliktu s g: g - effets + () = g + effets - () = Trohu opkování Regresní (zpětná) množin íle g pro (relevntní) ki : γ -1 (g,) = (g - effets()) preond() Příkld: stk(x,y) íl: {on(,), on(,)} Effets: ke stk(,) je relevntní její zpětnou plikí dostneme nový íl: {holding(), ler(), on(,)} Preond: holding(x), ler(y) ~holding(x) holding(x), ~ler(y) ler(y), on(x,y), ler(x), hndempty
Algoritmus tke 3,1 move r1 tke 3,2 Cíl = {t(r1,lo1),loded(r1,3)} Příkld lo1 lod(rne1,lo1,3,r1) {t(r1,lo1), elong(rne1,lo1), holding(rne1,3), 3) unloded(r1)} move(r1,lo2,lo1) lo1) {elong(rne1,lo1), l 1) holding(rne1,3), unloded(r1), djent(lo2,lo1), l t(r1,lo2), oupied(lo1)} Počáteční stv
Vlstnosti Proedur zpětného prohledávání je korektní úplná. Můžeme ji implementovt deterministiky. Pro úplnost potřeujeme deteki yklů. Větvení Je-li (g 1,,g,g k )posloupnost p ílů,,potom pokud i<k g i g k pk můžeme prohledávání této esty ukončit. může ýt menší než u prohledávání dopředu (zílení) pořád le zytečně velké Cheme-li, y yl root v pozii lo51, do které existují esty z lo1,,lo50, l dostneme 50 možnýh podílů. Nám je le pro splnění íle jedno, odkud root přijel! Částečné instniování kí (místo úplného) dále zmenší velikost větvení, tzv. liftování (lifting). Liftovná verze stndrdize = kopie s novými proměnnými mgu = most generl unifier (nejoenější unifike) použití volnýh proměnnýh zmenšuje větvení, le komplikuje deteki yklu
STRIPS Dosud prorné plánoví lgoritmy sdílejí stejný prolém - jk zlepšit efektivitu redukí prohledávného prostoru. STRIPS lgoritmus redukuje prohledávný prostor zpětného ě plánování á to tkto: z podíle řeší vždy jen část odpovídjíí předpokldům poslední přidné ke tj. místo γ -1 (s,) se jko nový íl použije preond() vede k neúplnosti lgoritmu pokud ktuální stv splňuje všehny předpokldy operátoru, dný operátor se použije tento závzek neude rušen při ktrkingu. Originální lgoritmus STRIPS je liftovnou verzí níže popsného lgoritmu. Algoritmus g 3 1 2 g g 3 1 g 2 4 5 4 g 4 g 5 6 3 g 2 = (g - effets( 2 )) preond( 2 ) π = 6, 4 je plán pro íl preond( 2 ) s= γ(γ(s 0, 6 ), 4 ) je stv splňujíí preond( 2 ) g 6 splněno v s 0 g 3
Sussmnov nomálie Prvděpodoně nejznámější prolém, který STRIPS neumí efektivně řešit (njde pouze redundntní plány). Svět kostek Počáteční č stv Cíl Plán vytvořený STRIPSem může vypdt tkto: unstk(,),putdown(),pikup(),stk(,) nyní jsme splnili íl on(,) unstk(,),putdown(),pikup(),stk(,) nyní jsme splnili íl on(,), le musíme se vrátit k on(,) pikup(),stk(,) červené é ke může vyřditř Jk n svět kostek? Řešení Sussmnovy nomálie Prolínání plánů plánování v prostoru plánů Použití doménově závislé informe Kdy má prolém ve světě ě ě kostek k řešení? š v íli nesmí ýt kostky, které nejsou v počátečním stvu kostk nesmí njednou stát n dvou jinýh kostkáh Jk to řešení njdeme? Celkem sndno ryhle! dáme všehny kostky (smosttně) n stůl postvíme poždovné věže Sd dlšími znlostmi to můžeme udělt ještě ě lépe!
Kdy musíme pohnout kostkou x? Pokud pltí některé z následujíího: Doménové znlosti s oshuje ontle(x) ( ) g oshuje on(x,y) ( s oshuje on(x,y) g oshuje ontle(x) pro svět kostek k s oshuje on(x,y) g oshuje on(x,z) pro nějké y z s oshuje on(x,y) y se musí pohnout e d d počáteční č stv íl Plánování ve světě kostek Počáteční stv Cíl unstk(,) putdown() stk(,) pikup() pikup() Konzistene pozie s kostkou znmená, že není důvod s pohnout. stk(,)