32
Klasično planiranje Jelena Laban

Klasično planiranje

  • Upload
    -

  • View
    279

  • Download
    10

Embed Size (px)

DESCRIPTION

vjestacka inteligencija

Citation preview

Page 1: Klasično planiranje

Klasično planiranje

Jelena Laban

Page 2: Klasično planiranje

Klasično planiranje

Jelena Laban Page 2

Sadržaj

1. Uvod ........................................................................................................................................ 3

1.1 Definicija klasičnog planiranja ........................................................................................ 3

1.1.1 Primjer: Air Cargo prevoz............................................................................................. 5

1.1.2 Primjer: Problem rezervne gume (The spare tire problem) ......................................... 6

1.1.3 Primjer: Svijet blokova ................................................................................................. 6

1.1.4 Složenost klasičnog planiranja...................................................................................... 8

1.2 Algoritmi planiranja kao pretraga prostora stanja ................................................................ 8

1.2.1. Pretraga prostora stanja unaprijed – Forward (progression) state-space search .......... 9

1.2.2 Pretraga relevantnih stanja unazad – Backward (regression) relevant-states search. 10

1.2.3 Heuristike planiranja....................................................................................................11

1.3 Planiranje grafika ................................................................................................................ 13

1.3.1 Planiranje grafika za heuristiku procjene.................................................................... 16

1.3.2 GRAPHPLAN algoritam ............................................................................................ 17

1.3.3 Završetak (termination) GRAPHPLAN-a................................................................... 19

Primjer 1: Svijet blokova i STRIPS .......................................................................................... 21

Primjer 2: Svijet blokova (problem izbora operatora) .............................................................. 25

Primjer 3: Hanojske Kule.......................................................................................................... 28

Sadržaj ključnih riječi................................................................................................................ 32

Literatura: .................................................................................................................................. 32

Page 3: Klasično planiranje

Klasično planiranje

Jelena Laban Page 3

1. Uvod

Vještacka inteligencija se može definisati kao proučavanje racionalnih akcija, što znači da planiranje – razradjuje plan akcije za postizanje ciljeva. Za razliku od “rješavanja problema traženjem” i “logičkih agenata”, kod ovog pristupa predstavićemo planiranje problema koji skaliraju do onih problema koji nisu bili mogući rješavanjem prethodnim pristupima. Dio 1.1 razvija pažljivo ograničen jezik za predstavljanje problema planiranja. Dio 1.2 pokazuje kakvu prednost mogu imati “forward” i “backward” algoritmi, posebno kod preciznijih heuristika. Dio 1.3 pokazuje, kako struktura podataka, zvana “planiranje grafika” može napraviti pretragu za efikasniji plan. Dalje opisujemo nekoliko drugih pristupa planiranju, a zatim njihovim poredjenjem, donosimo zaključak. Cijeli sadržaj obuhvata potpuno observabilno, determinističko, statičko okruženje sa jednim agentom.

1.1 Definicija klasičnog planiranja

Agent rješavanja problema traženjem, nalazi sekvence akcija koje dovode do ciljnog stanja, medjutim on se bavi atomskim predstavljanjem stanja tako da su mu neophodni sigurni domeni – specifične heuristike za dobro obavljanje. Hibridni iskazni logički agent, može naći planove bez domena – specifičnih heuristika zato što koristi domen nezavnisnih heuristika, zasnovan na logičkoj strukturi problema. Ali, mana mu je što može biti “potopljen” ako ima mnogo akcija i stanja. Npr, u wumpus svijetu jednostavna akcija kretanja pri koraku naprijed se mora ponoviti

za sve četiri agentove orijentacije, T vremenskih koraka i trenutnih pozicija. Kao odgovor na to, istrazivači planiranja odredili su faktor zastupljenosti – onaj u kome su stanja svijeta prikazana kao skup promjenljivih. Koristimo jezik PDDL (Planning Domain

Definition Language), koji nam omogućava da izrazimo sve akcije sa jednom akcionom šemom. Sada pokazujemo kako PDDL opisuje četiri stvari koje su nam neophodne da definišemo problem traženja: početno stanje, akcije koje su na raspolaganju, rezultat primjene akcija i cilj testa. Svako stanje je predstavljeno kao veza stavki koje su osnovane. Npr, Poor Λ Unknown može predstavljati stanje nesrećnog agenta, a stanje dostavljenog problema može biti At(Truck1, Melbourne) Λ At(Truck2, Sydney). Semantika baze podataka koja je korišćena označava zatvoreni svijet pretpostavki gdje svaka stavka koja nije pomenuta označava netačnost, dok jedinstvena imena znače da su Truck1 i Truck2 odvojeni. Stavke koje nisu dozvoljene u stanju su: At(x,y) (jer je bez osnova), ¬Poor (zbog negacije) i At(Father(Fred), Synedy) (zbog korišćenja funckijskih simbola). Sa stanjima može biti postupano kao sa spojem stavki kojima se manipuliše logičkim zaključivanjem ili kao skupom stavki, kojima se manipuliše pomoću skupa operacija. Ponekad nam je lakše da se bavimo semantickim skupom.

Page 4: Klasično planiranje

Klasično planiranje

Jelena Laban Page 4

Akcije su opisane kao skup akcionih šema koje definišu Akcije(s) i Rezultat(s,a) funkcija potrebnih za rješavanje problema traženjem. Klasično planiranje se usredsredjuje na probleme kod kojih većina akcija ostavlja većinu stvari nepromjenjenim. Skup osnovanih akcija može se prikazati jednom akcionom šemom. Šema je uzdignuto predstavljanje – podiže nivo rasudjivanja od iskazne logike do ograničenog podskupa prvog reda logike. Npr, prikazaćemo akcionu šemu za let aviona od jednog mjesta do drugog:

Action (Fly(p, from, to), PRECOND: At(p, from) Λ Plane(p) Λ Airport(from) Λ Airport (to) EFFECT: ¬At(p, from) Λ At(p, to))

Šema sadrzi ime akcije, listu svih promjenljivih, preduslov i ishod (efekat). Možemo slobodno izabrati vrijednost promjenljive koju želimo instantirati. Npr, prikazaćemo osnovanu akciju koja je rezultat zamjene vrijednosti za sve promjenljive:

Action(Fly( 1P , SFO, JFK),

PRECOND: At( 1P , SFO) Λ Plane( 1P ) Λ Airport(SFO) Λ Airport(JFK)

EFFECT: ¬At( 1P , SFO) Λ At( 1P , JFK))

Preduslov i efekat akcije je svaka veza literala (pozitivnih ili negativnih atomičnih rečenica). Preduslov definiše stanja u kojima akcija moze biti izvršena, dok efekat definiše rezultat izvršene akcije. Akcija a može biti izvršena u stanju s ako s zahtjeva preduslov od a. Upletenost se takodje može izraziti skupom semantika: s╞ q ako svaki pozivitan literal u q je u s , a svaki negativan literal u q nije. U formalnoj notaciji kažemo:

( a ∈ ACTION(s)) ⇔ s╞ PRECOND (a), gdje je svaka promjenljiva u a univerzalni kvanifikator. Npr,

∀p, from, to (Fly (p, from, to) ∈

ACTION (s)) ⇔

s╞(At(p, from) Λ Plane(p) Λ Airport(from) Λ Airport(to)) Kažemo da je akcija a upotrebljiva (primjenljiva) u stanju s ako je preduslov zadovoljen od s. Kada akciona šema a sadrži promjenljive, može imati više primjenljivih instancijacija. Npr, sa

početnim stanjem definisanim na slici 1, akcija Fly može biti instantirana kao Fly( , SFO,

JFK) ili Fly( 2P , JFK, SFO) oba su primjenljiva u početnom stanju.

Rezultat izvršavanja akcija a u stanju s je definisano stanjem s` koje je predstavljeno skupom formiranih stavki počevši sa s, uklanjajući stavke koje se pojavljuju kao negativni literali (što nazivamo brisanom listom ili DEL(a)), i dodavajući stavke koje su pozitivni literali (što nazivamo dodatom listom ili ADD(a)): RESULT(s, a) = (s – DEL(a) ∪ADD(a).

Npr, sa akcijom Fly( , SFO, JFK) uklonićemo At( ,SFO) i dodati At( ,JFK) . Dakle, uslov akcionih šema je da se svaka promjenljiva u efektu mora pojaviti i u preduslovu. Na taj način, kada je preduslov usaglašen protiv stanja s, sve promjenljive će se ograničiti i tada će

Page 5: Klasično planiranje

Klasično planiranje

Jelena Laban Page 5

RESULT(s, a) imati samo osnovane atome. Drugim riječima, osnovana stanja su zatvorena pod operacijom RESULT.

Init(At( 1C , SFO) Λ At( 2C , JFK) Λ At( 1P , SFO) Λ At( 2P , JFK)

Λ Cargo( 1C ) Λ Cargo( 2C ) Λ Plane( 1P ) Λ Plane( 2P )

Λ Airport(JFK) Λ Airport(SFO))

Goal(At( 1C , JFK) Λ At( 2C , SFO))

Action(Load(c, p, a), PRECOND: At(c, a) Λ At(p, a) Λ Cargo(c) Λ Plane(p) Λ Airport(a) EFFECT: ¬At(c, a) Λ In(c, p))

Action(Unload(c, p, a), PRECOND: In(c, p) Λ At(p, a) Λ Cargo(c) Λ Plane(p) Λ Airport(a) EFFECT: At(c, a) Λ ¬In(c, p))

Action(Fly(p, from, to), PRECOND: At(p, from) Λ Plane(p) Λ Airport(from) Λ Airport(to) EFFECT: ¬At(p, from) Λ At(p, to))

Slika 1: PDDL opis Air Cargo prevoza

Skup akcionih šema služi kao definicija domena planiranja. Poseban problem u domenu je definisan dodavanjem početnog stanja i cilja. Početno stanje je veza (spoj) osnovanih atoma. Cilj je kao i preduslov: spoj literala (pozitivnih ili negativnih) koji mogu sadržati promjenljive, kao At(p, SFO) Λ Plane(p). Sa svim promjenljivim se postupa kao sa egzistencijalnim kvantifikatorom, tako da je cilj da imamo bilo koji avion u SFO. Problem je rješen kada nadjemo niz akcija koje se završavaju u stanju s koja podrazumijeva cilj. Npr, stanje Rich Λ Famous Λ

Miserable podrazumijeva cilj Rich Λ Famous, a stanje Plane( 1Plane ) Λ At( 1Plane , SFO)

podrazumijeva cilj At(p, SFO) Λ Plane(p).

1.1.1 Primjer: Air Cargo prevoz

Na slici 1 se može vidjeti problem Air Cargo prevoza uključujući utovar i istovar tereta kao i let od jednog mjesta ka drugom. Problem se definiše kroz tri akcije: Load, Unload i Fly. Na akcije utiču dva predikata: In(c,p) što znači da je teret (cargo) c unutar aviona p i At(x,a) znači da je objakat x (ili avion ili teret) na aerodromu a. Takodje, mora se voditi računa o tome da su At predikati pravilno izraženi. Kada avion leti od jednog aerodroma ka drugom, sav teret unutar aviona ide sa njim. U logici prvog reda je lako kvantifikovati preko svih objekata koji su unutar aviona. Medjutim, osnovni PDDL nema univerzalni kvantifikator, pa nalazimo drugo rješenje. Pristup koji koristimo će reći da dio tereta prestaje da bude At bilo gdje kada je u (In) avionu; teret postaje samo At na novom aerodromu kada se istovari. Dakle, At zapravo znači “dostupan za korišćenje na datoj lokaciji”. Rješenje problema:

Page 6: Klasično planiranje

Klasično planiranje

Jelena Laban Page 6

[Load( 1C , 1P , SFO), Fly( 1P , SFO, JFK), Unload( 1C , 1P , SFO),

Load ( 2C , 2P , JFK), Fly( 2P , SFO, JFK), Unload( 2C , 2P , JFK)]

Na kraju, tu je problem neistinitih akcija kao što su Fly( 1P , JFK, JFK) koje bi trebalo da budu

“no-op” (ne rade ništa), ali koje imaju protivriječne efekte (po definiciji efekat uključuje At( 1P ,

JFK) Λ ¬ At( 1P , JFK)). Uobičajno je da se ignorišu takvi problemi. Ispravan pristup bi bio da se

doda nejednakost preduslova stavljajući da od (from) i do (to) aerodromi razlikuju, što ćemo vidjeti na primjeru sa slike 3.

1.1.2 Primjer: Problem rezervne gume (The spare tire problem)

Razmotrićemo problem zamjene ispumpane gume (slika 2). Cilj je da imamo dobru rezervnu gumu pravilno montiranu na osovinu automobila, gdje početno stanje ima ispumpanu gumu na osovini i dobru rezervnu gumu u prtljažniku. Naša verzija problema je apstraktna gdje nemamo lepljivih trakica i drugih komplikacija. Postoje četiri akcije: Izvaditi rezervu iz prtljažnika, izvaditi ispumpanu gumu sa osovine, stavljanje rezervne na osovinu i ostavljanje automobila bez nadzora tokom noći. Pretpostavljamo da je automobil parkiran u vrlo lošem susjedstvu, tako da je ishod (efekat) ostavljanja automobila preko noći taj da gume nestanu. Rješenje problema je: [Remove(Flat, Axle), Remove(Spare, Trunk), PutOn(Spare, Axle)]. Init(Tire(Flat) Λ Tire(Spare) Λ At(Flat, Axle) Λ At(Spare, Trunk))

Goal(At(Spare, Axle))

Action(Remove(obj,loc), PRECOND: At(obj, loc) EFFECT: ¬At(obj, loc) Λ At(obj, Ground))

Action(PutOn(t, Axle), PRECOND: Tire(t) Λ At(t, Ground) Λ ¬At(Flat, Axle) EFFECT: ¬ At(t, Ground) Λ At(t, Axle))

Action(LeaveOvernight, PRECOND: EFFECT: ¬At(Spare, Ground) Λ ¬At(Spare, Axle) Λ ¬At(Spare, Trunk)

Λ ¬At(Flat, Ground) Λ ¬At(Flat,Axle) Λ ¬At(Flat, Trunk))

Slika 2: Problem rezervne gume

1.1.3 Primjer: Svijet blokova

Jedan od najpoznatijih domena planiranja je svijet blokova. Domen se sastoji od skupa kocki poredjanih na stolu. Blokovi mogu biti nasloženi, ali se samo jedan blok može uklopiti na vrh drugog. Robotska ruka može da podigne blok i premjesti ga na drugu poziciju – na stolu ili na vrh drugog bloka. Robot može podići samo jedan blok, odnosno ne može podići blok kada postoji neki drugi na njemu. Cilj će uvijek biti da se izgradi stek blokova, navodeći koji blokovi

Page 7: Klasično planiranje

Klasično planiranje

Jelena Laban Page 7

su na vrhu drugih blokova. Npr, cilj može biti da se blok A stavi na blok B , a blok B na blok C (slika 3)

Slika 3

Koristimo On(b, x) da ukažemo da je blok b na x, gdje je x ili na drugom bloku ili na stolu. Akcija pomjeranja bloka b sa vrha x na vrh y će biti Move(b,x,y). Naravno, jedan od uslova pomjeranja bloka b je taj da nema ni jednog bloka na njemu.

U logici prvog reda, to bi bilo: ¬∃ x On(x,b) ili ∀x¬On(x,b). Osnovni PDDL ne dozvoljava kvantifikatore, pa se umjesto toga uvodi predikat Clear(x) koji je tačan kada nema ničega na x. (Opis problema je dat na slici 4) Init(On(A, Table) Λ On(B, Table) Λ On(C, A)

Λ Block(A) Λ Block(B) Λ Block(C) Λ Clear(B) Λ Clear(C))

Goal(On(A, B) Λ On(B, C))

Action(Move(b, x, y), PRECOND: On(b, x) Λ Clear(b) Λ Clear(y) Λ Block(b) Λ Block(y)

Λ (b≠x) Λ (b≠y) Λ (x≠y), EFFECT: On(b, y) Λ Clear(x) Λ ¬On(b, x) Λ ¬Clear(y))

Action(MoveToTable(b, x), PRECOND: On(b, x) Λ Clear(b) Λ Block(b) Λ (b≠x), EFFECT: On(b, Table) Λ Clear(x) Λ ¬On(b, x))

Slika 4. Problem planiranja u svijetu blokova: Gradjenje kule sa tri bloka. Jedno rješenje je [MoveToTable(C, A), Move(B, Table, C), Move(A, Table, B)]

Akcija Move pomjera blok b sa x na y ako su oba, i b i y čisti (ako nema drugog bloka na njima). Nakon pomjeranja, b je jos uvijek čisto, medjutim y nije. Prvi pokušaj Move šeme je:

Action(Move(b, x, y), PRECOND: On(b, x) Λ Clear(b)Λ Clear(y). EFFECT: On(b, y) Λ Clear(x) Λ ¬On(b, x) Λ ¬Clear(y)).

Medjutim, ovo ne podržava Clear ispravno, kada je x ili y sto. Kada je x sto, ova akcija ima za posledicu Clear(Table), a sto ne bi trebao da bude čist; isto tako i kada je y=Table, preduslov je

Page 8: Klasično planiranje

Klasično planiranje

Jelena Laban Page 8

Clear(Table), medjutim sto ne mora da bude čist da bi pomjerili blok na njega. Kako bi to ispravili, radimo dvije stvari, prvo uvodimo još jednu akciju koja pomjera blok b sa x na sto:

Action(MoveToTable(b, x), PRECOND: On(b, x) Λ Clear(b), EFFECT: On(b, Table)Λ Clear(x) Λ ¬On(b, x)

Drugo, tumačimo Clear(x) kao “Postoji čist prostor na x, gdje se može staviti blok”. Po ovom tumačenju, Clear(Table) će uvijek biti tačno. Jedini problem je taj što ništa ne sprečava da se koristi Move(b, x, Table) umjesto MoveToTable(b, x). To će dovesti do većeg prostora za pretragu, ali nikada nece doći do pogrešnog odgovora.

1.1.4 Složenost klasičnog planiranja

Ovdje se razmatra teoretska složenost planiranja i raspoznajemo dva problema odlučivanja. PlanSAT je pitanje da li postoji bilo kakav plan koji rješava problem planiranja. Bounded

PlanSAT postavlja pitanje da li postoji rješenje dužine k ili manje; što moze biti korisno za nalaženje optimalnog rješenja. Prvi rezultat je da su oba problema odlučiva za klasično planiranje. Dokaz slijedi iz činjenice da je broj stanja konačan. Medjutim, ako dodamo funkciju simbola u jeziku, tada broj stanja postaje beskonačan i PlanSAT postaje poluodlučiv, a Bounded PlanSAT problem ostaje odlučiv čak i u prisustvu funkcijskih simbola. Oba, i PlanSAT i Bounded PlanSAT su u složenosti klase PSPACE, klase koja je veća (samim tim i teža) od NP , a odnosi se na probleme koji se mogu rješiti determinističkom Tjuringovom mašinom sa polinomijalnom količinom prostora. Čak i ako napravimo prilično stroga ograničenja, problemi su i dalje veoma teški. Npr, ako zabranimo negativne efekte, oba problema su i dalje NP-teška. Medjutim, ako takodje zabranimo negativne preduslove, PlanSAT se svodi na klasu P. Ovi najgori rezultati mogu izgledati obeshrabrujuće. Za utjehu možemo uzeti činjenicu da se agentima obično ne traži da nadju planove za neosnovane najgore probleme, već se najčešće pitaju za planove u posebnim domenima (kao što je svijet blokova), što može biti mnogo lakše od teorijskog najgoreg slučaja. Za mnoge domene (uključujući svijet blokova i svijet vazdušnog prevoza), Bounded PlanSAT je NP-kompletan dok je PlanSAT u P.

1.2 Algoritmi planiranja kao pretraga prostora stanja

Opisali smo kako problem planiranja definiše problem traženja: vršimo pretragu od početnog stanja kroz prostor stanja, u potrazi za ciljem. Jedna od prednosti deklerativnog predstavljanja akcione šeme je da možemo unazad tražiti početno stanje, tj. počevsi od cilja. Slika 5 poredi traženje unazad i unaprijed.

Page 9: Klasično planiranje

Klasično planiranje

Jelena Laban Page 9

Slika 5. Dva pristupa u potrazi za planom.

a) Traženje unaprijed (progresija) b) Traženje unazad (regresija)

1.2.1. Pretraga prostora stanja unaprijed – Forward (progression) state-space search

Ranije se smatralo da je pretraga prostora stanja unaprijed bila previše uzaludna da bi se primjenila. Nije teško doći do razloga. Unaprijed pretraga je sklona ka istraživanju nevažnih akcija. Razmotrićemo zadatak kupovine kopije vještačke inteligencije: A Modern Approach u online knjižari. Pretpostavimo da postoji akciona šema Buy(isbn) sa ishodom (efektom) Own(isbn). ISBN-ovi su 10 cifara, tako da ova akciona šema predstavlja 10 miliona osnovanih akcija. Slijepa unaprijed algoritam pretraga bi počela nabrajanje ovih 10 biliona akcija za pronalaženje one koja vodi ka cilju. Dalje, problemi planiranja često imaju veliko stanje prostora. Razmotrimo Air Cargo problem sa 10 aerodroma, gdje svaki aerodrom ima 5 aviona i 20 komada tereta. Cilj je pomjeriti sav teret sa aerodroma A na aerodrom B. Postoji jednostavno rješenje problema: natovariti 20 komada tereta u jedan od aviona u A, let aviona do B i istovar tereta. Nalaženje rješenja može biti teško zato što je prosječan faktor grananja ogroman: svaki od 50 aviona može letjeti ka 9 drugih aerodroma i svaki od 200 paketa može biti ili istovaren (ako je natovaren) ili natovaren u bilo koji avion na tom aerodromu (ako je nenatovaren). Tako da svako stanje ima minimum 450 akcija (kada su svi paketi na aerodromima bez aviona) i maksimum 10450 (kada su svi paketi i avioni na istom aerodromu). U prosjeku, možemo reći da ima oko 2000 mogućih akcija po stanju, tako da graf

traženja do dubine rješenja ima oko 412000 čvorova.

Page 10: Klasično planiranje

Klasično planiranje

Jelena Laban Page 10

1.2.2 Pretraga relevantnih stanja unazad – Backward (regression) relevant-states search

Kod ove vrste pretrage počinjemo sa ciljem i primjenjujemo akcije unazad sve dok ne naidjemo na niz koraka koji dovode do početnog stanja. Zove se relevantno-stanje (relevant-state) traženja zato što razmatramo one akcije koje su bitne (relevantne) za cilj (ili trenutno stanje). Počinjemo sa ciljem koji je veza literala formirana kao opis skupa akcija. Npr, cilj ¬PoorΛFamous opisuje ona stanja u kojima je Poor netačno, Famous tačno, i bilo koja druga stavka može imati bilo koju vrijednost. Ako imamo n onovanih stavki u domenu, tada postoji

n2 osnovanih stanja (svaka stavka moze biti tačna ili netačna), ali n3 opisi skupa ciljnih stanja (svaka stavka moze biti pozitivna, negativna ili nepomenuta). Traženje unazad ponekad može biti prilično komplikovano. Npr, teško je unazad traziti rješenje za problem n-kraljica zato što nije lako opisati stanja koja su jedan potez daleko od cilja. PDDL prikaz je namjenjen da napravi lake akcije povratka. Neka je dat osnovan cilj g i osnovana akcija a, povratak (regresija) stanja od g preko a daje opis stanja g` definisan kao: g` = (g – ADD(a))

Precond(a). Efekti koji su dodati putem akcije ne moraju biti tačni (istiniti) ranije, medjutim preduslovi se moraju ranije zadržati, u suprotnom se akcija ne može izvršiti. Primjećujemo da se DEL(a) ne pojavljuje u formuli. To je zbog toga što znamo da stavke u DEL(a) nisu više istinite nakon akcije, a ne znamo da li su ranije bile istinite, tako se o njima ne može ništa reći. Da bi se dobila potpuna prednost pretrage unazad, moramo se pozabaviti ne samo osnovanim, već i djelimično neinstantiranim akcijama i stanjima. Npr, pretpostavimo da je cilj isporuka

posebnog dijela terata u SFO: At( 2C , SFO). To predlaže akciju Unload( 2C , p`, SFO):

Action(Unload( 2C , p`, SFO),

PRECOND: In( 2C ,p’) Λ At(p`, SFO) Λ Cargo( 2C ) Λ Plane(p’) Λ Airport(SFO)

EFFECT: At( 2C , SFO)Λ ¬In( 2C ,p`).

Standardizovali (standardized) smo imena promjenljivih (mjenjajući p u p` u ovom slučaju) tako da neće doći do zabune izmedju imena promjenljivih ako se desi da koristimo istu akcionu šemu dva puta u planu. Ovo predstavlja istovar paketa iz neodredjenog (unspecified) aviona u SFO; svaki avion se može uzeti u obzir, ali sada nije neophodno reći koji. Možemo iskoristiti prednost snage prvog-reda prikazivanja: jedan opis rezimira mogućnost korišćenja bilo kojeg aviona implicitno kvantifikovanog preko p`. Regresivno stanje opisa je

g` = In( 2C , p`) Λ At(p`, SFO) Λ Cargo( 2C ) Λ Plane(p’) Λ Airport(SFO)

Poslednje pitanje je zapravo odlučivanje koje od akcija su kandidati za povratak. Kada koristimo unaprijed pravac biramo akcije koje su upotrebljive (applicable) – one akcije koje bi mogle biti

Page 11: Klasično planiranje

Klasično planiranje

Jelena Laban Page 11

naredni korak u planu. Kod traženja unazad želimo akcije koje su relevantne (bitne) – one akcije koje bi mogle biti poslednji korak u planu vodeći nas do trenutnog stanja-cilja.

Dat je cilj At( 2C , SFO). Nekoliko instancijacija istovara (Unload) su relevantne: možemo

izabrati bilo koji poseban avion za istovar, ili možemo ostaviti neodredjeni avion koristeći akciju

Unload( 2C , p`, SFO). Takodje, možemo smanjiti faktor grananja bez odbacivanja bilo kojeg

rješenja koristeći uvijek akciju formiranu zamjenom najopštijeg ujedinitelja u standardizovanu akcionu šemu. Razmotrimo cilj Own(0136042597), početno stanje sa 10 biliona ISBN-ova i akcionu šemu A = Action(Buy(i), PRECOND: ISBN(i), EFFECT: Own(i)). Kao što znamo, traženje unaprijed bez heuristike bi trebalo da počne nabrajanjem 10 biliona osnovanih Buy akcija. Ali sa traženjem unazad, možemo ujediniti cilj Own(0136042597) sa

standardizovanim efektom (ishodom) Own(i’), zamjenom θ ={i`/0136042597}. Zatim možemo

izvršiti vraćanje preko akcije Subt(θ

,A`) davanjem predhodniku stanja opis ISBN(0136042597).

Ovo možemo napraviti formalnije, pretpostavljajući da ciljni opis g sadrži ciljni literal ig i

akcionu šemu A koja je standardizovana za stvaranje A`. Ako A` ima efektivni literal `je gdje je

θ=),( `ji egUnify , gdje definišemo a`= SUBST ),( `Aθ i ako nema efekta u a` koja je negacija

literala u g, tada je a` relevantna akcija prema g.

1.2.3 Heuristike planiranja

Pretraga unaprijed kao i pretraga unazad, nije efikasna bez dobre heurističke funkcije. Kao što znamo, heuristička funkcija h(s) procjenjuje razdaljinu od stanja s do cilja, i ako možemo izvesti dopustivu (admissible) heuristiku za tu razdaljinu – onu koja je ne precjenjuje, onda možemo koristiti A* traženje za nalaženje optimalnog rješenja. Dopustiva heuristika se može izvesti definisanjem ublaženog problema koji je lakši za rješavanje. Tačna cijena rješenja ovog lakšeg problema tada postaje heuristika za originalni problem. Prema definiciji, ne postoji način za analizu atomičnog stanja, tako da se zahtjeva pronicljivost čovjeka analitičara kako bi odredio dobar domen – specifičnu heuristiku za problem traženja sa atomičnim stanjima. Zamislićemo problem traženja kao graf gdje su čvorovi stanja, a ivice su akcije. Problem je nalaženje puta koji povezuje početno stanje sa ciljnim stanjem. Postoje dva načina “ublažavanja” ovog problema kako bi bio lakši za rješavanje: tako što ćemo grafu dodati jos ivica, što nam mnogo olakšava pronalazak puta, ili grupisanjem više čvorova zajedno, formirajući izdvajanje stanja prostora koji ima manje stanja, što nam takodje olakšava traženje. Prvo ćemo pogledati heuristike koje grafu dodaju ivice. Npr, odbacivanje-preduslova heuristike (ignore preconditions heuristic) otpušta sve preduslove od akcija. Svaka akcija postaje primjenljiva u svakom stanju, i svaki cilj stavki se može postići u jednom koraku (ako je tamo primjenljiva akcija – ako nije, problem je nemoguć). Ovo gotovo podrazumjeva da je broj

Page 12: Klasično planiranje

Klasično planiranje

Jelena Laban Page 12

potrebnih koraka za ublaženi problem zapravo broj nezadovoljnih ciljeva – skoro, ali ne sasvim, zato što: 1) neke akcije mogu dostići više ciljeva i 2) neke akcije mogu ukloniti druge efekte. Za mnoge probleme precizna heuristika se dobija razmatranjem 1) i ignorisanjem 2). Prvo, ublažujemo akcije uklanjanjem svih preduslova i svih efekata izuzev onih koji su literali u cilju. Zatim brojimo minimalni broj potrebnih akcija takvih da unija tih akcionih efekata zadovoljava cilj. Takodje je moguće odbacivanje odabranih preduslova akcija. Razmotrićemo kliznu blok slagalicu (8-puzzle ili 15-puzzle). Možemo kodirati ovo kao problem planiranja uključujući pločice (tiles) sa jednom Slide šemom:

Action(slide(t, 1s , 2s ),

PRECOND: On(t, 1s ) Λ Tile(t) Λ Blank( 2s ) Λ Adjacent( 1s , 2s )

EFFECT: On(t, 2s ) Λ Blank( 1s ) Λ ¬On(t, 1s ) Λ ¬Blank( 2s ))

Kao što znamo, ukoliko uklonimo preduslove Blank( 2s )Λ Adjacent( 1s , 2s ) tada se svaka pločica

može kretati u jednoj akciji u bilo koji prostor i dobijamo broj-zagubljenih-pločica heuristiku.

Ako uklonimo Blank( 2s ) tada dobijamo Manhatan-razdaljinu heuristiku. Lako je uvidjeti kako

ove heuristike mogu biti automatski izvedene iz opisa akcione šeme. Druga mogućnost je ignorisati-izbrisane-liste (ignore delete lists) heuristika. Pretpostavićemo, za trenutak, da svi ciljevi i preduslovi sadrže samo pozitivne literale. Sada želimo stvoriti ublaženiju verziju originalnog problema koja će biti lakša za rješavanje i gdje će dužina rješenja poslužiti kao dobra heuristika. To možemo uraditi uklanjanjem brisane liste svih akcija (uklanjanjem svih negativnih literala iz efekata). Ovo omogućava monotoni napredak ka cilju – ni jedna akcija neće poništiti napredak nekom drugom akcijom. Ispostavlja se da je i dalje NP-teško naći optimalno rješenje ovog ublaženog problema, ali jedno približno rješenje se može naći u polinomijalnom vremenu hill-climbingom. Slika 6, dijagrami dijela prostora stanja za dva problema planiranja korišćenjem ignore-delete-lists heuristike. Tačke predstavljaju stanja, ivice ackije, a visina svake tačke iznad donje ravni predstavlja heurističku vrijednost. Stanja na donjoj ravni su rješenja. U oba problema, postoji širok put do cilja. Ne postoje ćorsokaci, tako da nema potrebe za backtracking. Jednostavno hill-climbing traženje će lako naći rješenje ovih problema (iako možda neće biti optimalno).

Slika 6

Page 13: Klasično planiranje

Klasično planiranje

Jelena Laban Page 13

Ublaženiji problemi nas ostavljaju sa pojednostavljenijim ali i dalje skupim problemom

planiranja. Mnogi problemi planiranja imaju 10010 stanja ili više, a ublažavanjem akcija ne radimo ništa kako bi smanjili broj stanja. Stoga ćemo pogledati olakšice koje smanjuju broj stanja formiranjem abstrakcije (odvojenih) stanja (state abstraction). Najjednostavniji oblik odvojenosti stanja je ignorisanje nekih stavki. Npr, razmotrićemo air-cargo problem sa 10 aerodroma, 50 aviona i 200 komada tereta. Svaki avion može biti na jednom od 10 aerodroma i svaki paket može biti ili u jednom od aviona ili istovaren na jednom od

aerodroma. Dakle, postoje 155105010 1020050 ≈×+

stanja. Sada ćemo razmotriti poseban problem u tom domenu u kojem se dešava da su svi paketi na samo 5 od aerodroma i svi paketi na datom aerodromu imaju istu lokaciju. Zatim, korisno apstrahovanje (izdvojenost) problema je da otpusti sve At stavke osim onih koje uključuju jedan avion i jedan paket na svakom od 5 aerodroma.

Sada imamo samo 1710510 1055 ≈×+ stanja. Rješenje u ovom apstraktnom prostoru stanja će biti

kraće nego u originalnom stanju, a apstraktno rješenje je lako da se proširi na rješenje originalnog problema (dodavanjem dodatnih Load i Unload akcija). Ključna ideja u definisanju heuristike je dekompozicija: dijeljenje problema na dijelove, rješavanje svakog dijela nezavisno, a zatim kombinovanje dijelova. Subgoal independence

(podciljna nezavisnost) pretpostavka znači da je cijena rješenja spoja podciljeva približna sumi cijene rješenja svakog podcilja nezavisno. Podciljna nezavisnost pretpostavka može biti optimistička ili pesimistička. Optimistička je kada postoje negativne interakcije izmedju podplanova (subplan) za svaki podcilj – npr, kada jedna akcija u podplanu briše cilj dostižan drugim podplanom. Pesimistička je, a takodje i nedopustiva, kada podplanovi sadrže suvišne akcije – npr, dvije akcije koje se mogu zamjeniti jednom akcijom u objedinjenom planu. Jasno je da postoji veliki potencijal za smanjenje prostora stanja formirajući odvajanja (abstractions). “Trik” je u odabiru prave apstrakcije i korišćenju na način koji čini ukupnu cijenu manju od cijene putem rješavanja originalnog problema.

1.3 Planiranje grafika

Sve heuristike koje smo predložili mogu trpjeti neku netačnost. Ovaj dio pokazuje kako posebna struktura podataka zvana planiranje grafa može biti korisna za bolju procjenu heuristike. Ove heuristike se mogu primjeniti na bilo koju tehniku traženja koju smo do sada proučavali. Takodje, možemo tražiti rješenje preko stanja formiranog planiranjem grafika, koristeći algoritam GRAPHPLAN. Postavlja se pitanje da li, problemom planiranja, možemo dostići cilj iz početnog stanja. Pretpostavimo da imamo drvo sa svim mogućim akcijama iz početnog stanja ka stanjima naslednika, i njihovim naslednicima itd. Ako indeksiramo ovo drvo približno, možemo odmah

odgovoriti na pitanje “Da li je dostižno stanje G iz stanja 0S ”. Kako je drvo eksponencijalne

Page 14: Klasično planiranje

Klasično planiranje

Jelena Laban Page 14

veličine, ovaj pristup nije praktičan. Planiranje grafa ne može odgovoriti precizno da li je G

dostižno iz stanja 0S , ali može procijeniti koliko je koraka potrebno za dostizanje stanja G.

Procjena je uvijek pravilna kada prijavi da cilj nije dostižan i nikada ne precjenjuje broj koraka (prihatljiva heuristika).

Planiranje grafika je organizovano po nivoima: prvo, nivo 0S za početno stanje, sastoji se od

čvorova koji predstavljaju svaku stavku koja je u 0S ; zatim nivo 0A koji sačinjavaju čvorovi za

svaku osnovanu akciju koja može biti primjenljiva u 0S ; sledeći su alternativni nivoi iS koje

prate iA ; sve dok ne dodjemo do završetka uslova.

Grubo govoreći, iS sadrži sve literale koji se mogu “držati” u vremenu i, u zavisnosti od akcija

izvršenih u prethodnim vremenskim koracima. Ako je moguće da se bilo koji P ili ¬P mogu

održati, tada će oboje biti predstavljeni u iS . Takodje, iA sadrži sve akcije koje mogu imati

preduslove zadovoljene vremenom i. Kažemo “grubo” jer planiranje grafika bilježi samo ograničen podskup mogućih negativnih interakcija medju akcijama; dakle, literal se može

pojaviti na nivou jS , kada on zapravo ne može biti istinit do nekog kasnijeg nivoa (literal se

nikada neće pojaviti prekasno). Planiranje grafika radi samo za probleme iskaznog planiranja – one bez promjenljivih. Uprkos tome što rezultat povećava veličinu opisa problema, planiranje gafika se pokazalo kao efikasno sredstvo za rješavanje teških problema planiranja.

Slika 7 pokazuje jednostavan problem planiranja, a slika 8 pokazuje grafik

planiranja. Svaka akcija na nivou iA je

povezana sa preduslovima u iS i efektima

u 1+iS . Dakle, literal se pojavljuje jer ga akcija

izazvala, ali takodje litaral može istrajati ako ga ni jedna akcija ne negira. Ovo predstavlja persistence action (istrajanost akcije) – ponekad se naziva ‘no-op’. Za svaki literal C,

dodajemo istrajanost akcije sa preduslovom C i efektom C. Nivo 0A na slici 8 pokazuje “pravu”

akciju, Eat(Cake), zajedno sa dvije istrajane akcije nacrtane kao male kvadratne kutije.

Init(Have(Cake))

Goal(Have(Cake) Λ Eaten(Cake))

Action(Eat(Cake) PRECOND: Have(Cake) EFFECT: ¬Have(Cake) Λ Eaten(Cake))

Action(Bake(Cake) PRECOND: ¬Have(Cake) EFFECT: Have(Cake))

Slika 7: Problem “have cake and eat cake too”

Page 15: Klasično planiranje

Klasično planiranje

Jelena Laban Page 15

Slika 8: Graf planiranja za problem “have cake and eat cake too” do nivoa 2S Pravougaonici označavaju akcije (mali kvadrati označavaju istrajanost akcija), a prave linije označavaju preduslove i efekte. Mutex veza je pokazana kao kriva siva linija. Nisu sve mutex veze

prikazane, zato što bi graf bio previše neuredan. Generalno, ako su dva literala mutexi u iS , tada

će sve istrajane akcije za ove literale biti mutexi u iA pa ne moramo crtati mutex vezu.

Nivo 0A sadrži sve akcije koje se mogu desiti u stanju 0S , ali je isto tako važno registrovati

sukobe izmedju akcija koje ce spriječiti njihovu zajedničku pojavu. Sive linije na slici 8 označavaju uzajamno isključenje (mutex). Npr, Eat(Cake) je uzajamno isključenje sa istrajnošću bilo kojeg Have(Cake) ili ¬Have(Cake).

Nivo 1S sadrži sve literale koji proizilaze odabiranjem bilo kojeg podskupa akcija u 0A , kao što

mutex veze (sive linije) označavaju literale koji nisu mogli da se pojave zajedno, bez obzira na

izbor akcija. Npr, Have(Cake) i Eaten(Cake) su mutexi: u zavisnosti od izbora akcija u 0A , bilo

koji, ali ne i oba, mogu biti rezultat. Drugim riječima, 1S predstavlja uvjerenost (belief) stanja:

skup mogućih stanja. Članovi ovog skupa su svi podskupovi literala takvih da ne postoji mutex veza izmedju bilo kojih članova podskupa.

Nastavljamo ovim putem naizmjenično izmedju stanja nivoa iS i akcije nivoa iA dok ne

dostignemo tačku u kojoj su dva uzastopna nivoa identična. Sada se može reci da je graf izjednačen (leveled off).

Ono što dobijamo jeste struktura gdje svaki iA nivo sadrži sve akcije koje su primjenljive u

iS ,

uz ograničenja da se dvije akcije ne mogu izvršiti na istom nivou. Svaki iS nivo sadrži sve

literale koji se mogu rezultirati iz bilo kojeg izbora akcija u 1−iA , uz ograničenja da neki parovi

literala nisu mogući. Važno je napomenuti da proces planiranja grafika ne zahtjeva izbor akcija koji bi podrazumjevao kombinatornu pretragu. Umjesto toga, samo se obilježava nemogućnost pojedinih izbora koristeći mutex vezu. Definisaćemo mutex vezu za obje akcije i literale. Mutex relacija drži vezu izmedju dvije akcije na datom nivou ako je neki od sledeća tri uslova održan: - Nekonzistentni efekti: jedna akcija negira efekat druge. Npr, Eat(Cake) i istrajanost Have(Cake) imaju nekonzistentne efekte jer se ne slažu kod efekta Have(Cake). - Zaključivanje: jedan od efekata jedne akcije je negacija preduslova druge. Npr Eat(Cake) ometa istrajanost Have(Cake) negiranjem njegovog preduslova.

Page 16: Klasično planiranje

Klasično planiranje

Jelena Laban Page 16

- Konkurentne potrebe: jedan od preduslova jedne akcije je uzajamno isključen sa preduslovom druge. Npr, Bake(Cake) i Eat(Cake) su mutexi jer se takmiče kod vrijednosti Have(Cake) preduslova. Mutex relacija je održiva izmedju dva literala na istom nivou ako je jedan negacija drugog ili ako svaki mogući par akcija koji može da dostigne dva litarala se uzajamno isključuje. Ovaj uslov se

zove nekonzistentna podrška. Npr, Have(Cake) i Eaten(Cake) su mutexi u 1S zato što jedini

način dostizanja Have(Cake), istrajanost akcija, je mutex uz jedini način postizanja Eaten(Cake),

tj. Eat(Cake). U 2S , dva literala nisu mutexi, jer postoje novi načini njihovog ostvarivanja, kao

što su Bake(Cake) i istrajanost Eaten(Cake).

1.3.1 Planiranje grafika za heuristiku procjene

Grafik planiranja, jednom konstruisan, bogat je izvor informacija o problemu. Prvo, ako se neki ciljni literal ne pojavi u završnom nivou grafika, tada je problem nerješiv. Drugo, možemo

procjeniti cijenu dostizanja nekog ciljnog literala ig od stanja s kao nivoa na kojem se ig prvo

pojavljuje u grafu planiranja konstruisanom od početnog stanja s. Ovo nazivamo cijenom

nivoa ig . Na slici 8, Have(Cake) ima cijenu nivoa 0, a Eaten(Cake) ima cijenu nivoa 1. Lako je

pokazati da su ove procjene prihatljive za pojedinačne ciljeve. Procjena ne mora uvijek biti precizna, medjutim, grafovi planiranja omogućavaju nekoliko akcija na svakom nivou, dok heuristika broji samo nivo a ne broj akcija. Iz ovog razloga, uobičajno je koristiti serijsko

planiranje grafika za izračunavanje heuristika. Serijski grafik nastoji da se samo jedna akcija dogodi u bilo kom vremenskom koraku; to se radi dodavanjem mutex veze izmedju svakog para neistrajanih akcija. Cijena nivoa izvučena iz serijskog grafika je često prilično razumna procjena stvarnih cijena. Da bi procjenili cijenu konjukcije ciljeva, postoje tri jednostavna pristupa. Max-nivo heuristike jednostavno uzima maximalni nivo cijene bilo kojeg cilja; to je dopustivo, ali nije nužno tačno. Nivo suma (level sum) heuristika, prateći pretpostavku nezavisnosti podcilja, vraća sumu cijene nivoa ciljeva; što može biti nedopustivo ali funkcioniše dobro za problem koji je u velikoj mjeri razdojiv na djelove. Za naš problem, nivo suma heuristika procjenjuje vezu cilja Have(Cake) Λ

Eaten(Cake) kao 0+1=1, a tačan odgovor je 2, dostižan planom [Eat(Cake), Bake(Cake)]. Što i nije tako loše. Mnogo ozbiljnija greška je ta, da ako, Bake(Cake) nije u skupu akcija, procjena će i dalje biti 1, kada bi zapravo veza cilja bila nemoguća. Konačno, skup nivoa (set-level) heuristika, pronalazi nivo na kojem se svi literali u spojenom cilju pojavljuju u grafu planiranja bez njihovog para koji se medjusobno isključuje. Ova heuristika daje ispravnu vrijednost od 2 za nas prvobitni (originalni) problem i beskonačnost za problem bez Bake(Cake). To je dopustivo, dominira max-nivo heuristika, i radi izuzetno dobro u zadacima u kojima postoji dobar dio interakcija izmedju podplanova. Naravno, nije savršen; npr ignoriše interakcije izmedju tri ili vise literala. Kao sredstvo za generisanje tačne heuristike, možemo vidjeti grafik planiranja kao ublažen problem koji je efikasno rješiv. Da bi razumjeli suštinu ublaženog problema, moramo tačno

Page 17: Klasično planiranje

Klasično planiranje

Jelena Laban Page 17

razumjeti šta znači da se literal g pojavi na nivou iS u grafiku planiranja. U idealnom slučaju,

želimo da to bude garancija da postoji plan sa i akcijom nivoa koja dostiže g, kao i ako se g ne pojavi, ne postoji takav plan. Nažalost, napraviti takvu garanciju je teško kao rješavanje originalnog problema planiranja. Tako da, grafik planiranja pravi drugu polovinu garancije (ako se g ne pojavi, onda nema plana), ali ako se g pojavi, tada svi grafovi planiranja obećavaju da postoji plan koji po mogućnosti dostiže g i nema “očiglednih” mana. Očigledan nedostatak je definisan kao propust koji moze biti otkriven razmatranjem dvije akcije ili dva literala na vrijeme, drugim riječima, posmatranjem mutex odnosa. Ovdje mogu postojati suptilnije mane uključujući tri, četiri, ili više akcija, ali iskustvo pokazuje da nije vrijedno truda komjuterski pratiti ove moguće nedostatke. Jedan prijemjer nerješivog problema koji se ne može prepoznati putem grafika planiranja je problem svijeta blokova, gdje je cilj da se dobije blok A na B, B na C, i C na A. To je nemoguć cilj, a grafik planiranja ne može otkriti nemogućnost jer su bilo koja dva od tri podcilja dostižna. Nema mutexa izmedju nekog para literala, samo izmedju tri u cjelini. Da bi otkrili da je ovaj problem nemoguć, moramo tražiti više od grafika planiranja.

1.3.2 GRAPHPLAN algoritam

Ovdje pokazujemo kako da direktno izdvojimo plan iz grafika planiranja, a ne samo da koristimo grafik kako bi obezbjedili heuristiku. GRAPHPLAN algoritam (slika 9) više puta dodaje nivo grafiku planiranja pomoću EXPAND-GRAPH. Kada se svi ciljevi pojave kao “nemutexi” u grafu, GRAPHPLAN poziva EXTRACT-SOLUTION da traži plan koji rješava problem. Ako to ne uspje, proširuje sledeći nivo pokušavajući ponovo, prekida sa neuspjehom kada nema razloga da se nastavi. function GRAPHPLAN(problem) returns solution of failure

graph ← INITIAL-PLANNING-GRAPH(problem) goals ← CONJUCTIONS(problem.GOAL) nogoods ← an empty hash table

for tl = 0 to ∞ do

if goals all non-mutex in tSof graph then

solution ← EXTRACT-SOLUTION(graph, goals, NUMLEVELS(graph), nogoods) if solution ≠ failure then return solution

if graph and nogoods have both leveled off then return failure

graph ← EXPAND-GRAPH(graph, problem)

Slika 9: GRAPHPLAN algoritam

Ispraticemo djelovanje GRAPHPLAN na problemu rezervne gume. Grafik je prikazan na slici

10. Prva linija GRAPHPLAN-a postavlja grafik planiranja na jedan nivo ( 0S ) grafika

Page 18: Klasično planiranje

Klasično planiranje

Jelena Laban Page 18

predstavljajući početno stanje. Pozitivne stavke iz opisa problema početnog stanja su prikazane kao značajne negativne stavke. Nisu prikazani nepromjenljivi pozitivni literali (kao sto je

Tire(Spare)) i nevažni negativni literali. Cilj At(Spare, Axle) nije predstavljen u 0S , pa ne moramo

pozivati EXTRACT-SOLUTION – sigurni smo da još uvijek nema rješenja. Umjesto toga,

EXPAND-GRAPH dodaje u 0A tri akcije čiji preduslovi postoje na nivou 0S (tj. sve akcije osim

PutOn(Spare, Axle)), zajedno sa istrajanošću akcija za sve literale u 0S . Efekti akcija su dodati na

nivou 1S . EXPAND-GRAPH tada traži mutex veze i dodaje ih grafu.

Slika 10: Grafik planiranja za problem rezervne gume nakon proširivanja nivoa 2S

At(Spare, Axle) još uvijek nije predstavljen u 1S , tako da i dalje ne moramo pozivati EXTRACT-

SOLUTION. Ponovo pozivamo EXPAND-GRAPH dodavajući 1A i 1S , tako da dobijamo grafik

planiranja prikazan na slici 10. Sada kada imamo cio spektar akcija, vrijedi pogledati neke primjere mutex veza i njihovih uzroka: - Nekonzistentni efekti: Remove(Spare, Trunk) je mutex sa LeaveOvernight zato što ima jedan efekat At(Spare, Ground) a drugi ima negaciju. - Zaključivanje: Remove(Flat, Axle) je mutex sa LeaveOvernight zato što jedan ima preduslov At(Flat, Axle) a drugi ima negaciju kao efekat. - Konkurentne potrebe: PutOn(Spare, Axle) je mutex sa Remove(Flat, Axle) jer ima At(Flat, Axle) kao preduslov, a drugi ima negaciju.

- Nekonzistentna podrška: At(Spare, Axle) je mutex sa At(Flat, Axle) u 2S jer je jedini način

dostizanja At(Spare, Axle) preko PutOn(Spare, Axle), i to je mutex sa istrajanom akcijom koja je jedini način dostizanja At(Flat, Axle). Dakle, mutex odnos odmah otkriva sukob koji proizilazi iz pokušaja da su dva objekta na istom mjestu u isto vrijeme.

Page 19: Klasično planiranje

Klasično planiranje

Jelena Laban Page 19

Ovog puta, kada se vratimo na početak petlje, svi ciljni literali su predstavljeni u 2S , a niko od

njih nije mutex sa bilo kojim drugim. To znači da rješenje može postojati i EXTRACT-SOLUTION ce pokušati da ga nadje. Možemo formulisati EXTRACT-SOLUTION kao Boolean problem zadovoljena ograničenja (CSP) gdje su promjenljive akcije na svakom nivou, vrijednosti za svaku promjenljivu su u ili van plana, ograničenja su mutexi i potreba da zadovolji svaki cilj i preduslov. Takodje, možemo definisati EXTRACT-SOLUTION kao problem traženja unazad, gdje svako stanje u potrazi sadrži pokazivač na nivo u grafiku planiranja i skup nezadovoljenih ciljeva. Definisaćemo ovaj problem traženja na sledeći način:

- Početno stanje je poslednji nivo grafika planiranja, nS , uz skup ciljeva problema planiranja.

- Akcije dostupne u stanju na nivou iS su biranje bilo kojeg slobodnog sukoba podskupa akcija u

1−iA čiji efekti pokrivaju ciljeve u stanju. Rezultirajuće stanje ima nivo 1−iS , i ima za skup ciljeva

preduslove za odabrani skup akcija. Pod “slobodnim sukobom” podrazumjevamo skup akcija takvih da ne postoje dvije koje su mutexi i ne postoje dva preduslova koja su mutexi.

- Cilj je dostizanje stanja na nivou 0S takvog da su svi ciljevi zadovoljeni.

- Cijena svake akcije je 1.

Za ovaj odredjen problem, počinjemo u 2S sa ciljem At(Spare, Axle). Jedini izbor koji imamo za

dostizanje ciljnog skupa je PutOn(Spare, Axle). To nas dovodi do traženog stanja u 1S sa

ciljevima At(Spare, Ground) i ¬At(Flat, Axle). Bivši se može dostići preko Remove(Spare,

Trunk), a drugi od strane Remove(Flat, Axle) ili LeaveOvernight. Ali LeaveOvernight je mutex sa Remove(Spare, Trunk), tako da je jedno rješenje izbor Remove(Spare, Trunk) i Remove(Flat,

Axle). To nas dovodi do traženog stanja u 0S sa ciljevima At(Spare, Trunk) i At(Flat, Axle). Oba

su pristuna u stanju, tako da imamo rješenje: akcije Remove(Spare, Trunk) i Remove(Flat, Axle) u

nivou 0A , slijede od PutOn(Spare, Axle) u 1A .

U slučaju gdje EXTRACT-SOLUTION ne uspjeva da pronadje rješenje za skup ciljeva na datom nivou, bilježimo (level, goods) par kao no-good, kao što smo radili u učenju ograničenja za CSP. Kada god je EXTRACT-SOLUTION pozvan ponovo sa istim nivoom i ciljevima, možemo ubilježiti no-good i odmah vratiti radije neuspjeh nego da tražimo ponovo.

1.3.3 Završetak (termination) GRAPHPLAN-a

Do sada smo nekoliko puta pominjali pitanje u vezi završetka. Sada pokazujemo da će GRAPHPLAN zapravo prekinuti i vratiti neuspjeh kada tamo nema rješenja. Prva stvar koju treba razumjeti je zašto ne možemo zaustaviti proširenje grafika čim se izjednači. Razmotrićemo air cargo domen sa jednom avionom i n komada tereta na aerodromu A, koji svi imaju aerodrom B kao svoje odredište. U ovoj verziji problema, samo jedan dio tereta može stati u avion u isto vrijeme. Grafik će se izravnjati na nivou 4, odražavajući činjenicu da

Page 20: Klasično planiranje

Klasično planiranje

Jelena Laban Page 20

jedan komad tereta možemo utovariti, preletjeti i istovariti na odredište u tri koraka. Ali to ne znači da se rješenje može izvući iz grafa na nivou 4; zapravo, rješenje će zahtjevati 4n - 1 koraka: za svaki komad tereta mi vršimo utovar, let i istovar, i svaki ali poslednji komad mora da preleti nazad na aerodrom A po sledeći komad. Postavlja se pitanje koliko dugo moramo proširivati grafik nakon njegovog izjednačavanja. Ako funkcija EXTRACT-SOLUTION ne pronadje rješenje, onda mora da je bio bar jedan skup ciljeva koji nije dostižan i označen kao no-good. Tako da, ako je moguće da može biti manje no-goods u narednom nivou, onda treba nastaviti. Čim se sam grafik i no-goods oba izjednače, bez nadjenog rješenja, možemo završiti sa neuspjehom, jer ne postoji mogućnost naknadne izmjene koja se dodaje rješenju. Sada, sve što treba da dokažemo je da će se grafik i no-goods uvijek izjednačiti. Ključ za ovaj dokaz je da neke osobine grafika planiranja monotono rastu ili opadaju. “X monotono raste” znači da je skup X na nivou i+1 nadskup skupa na nivou i. Karakteristike su sledeće: - Literali monotono rastu: kada se jednom pojavi literal na datom nivou, pojaviće se na svim narednim nivoima. Ovo je zbog istrajanih akcija; jednom pojavljen literl gore, dovodi do toga da istrajane ackije obezbjede njihov ostanak tamo. - Akcije monotono rastu: kada se akcija jednom pojavi na datom nivou, pojaviće se na svim narednim nivoima. To je posledica monotonog rasta literala; ako se preduslovi akcija pojave na jednom nivou, pojaviće se na narednim nivoima, pa će na taj način i akcija.

- Mutexi monotono opadaju: ako su dvije akcije mutexi na nivouiA , onda će oni takodje biti

mutexi za sve prethodne nivoe na kojima se pojavljuju. Isto važi i za mutexe izmedju literala. Možda se neće uvijek pojaviti na taj način u figurama, jer figure imaju pojednostavljenost: oni ne

prikazuju literale koji se ne mogu održati na nivou iS , kao ni akcije koje se ne mogu izvršiti na

nivouiA . Vidimo da “mutexi koji monotono opadaju” su tačni ako uzimamo u obzir da su ovi

nevidljivi literali i akcije mutexi sa svima. - No-goods monotono opadaju: ako skup ciljeva ne može biti dostižan na datom nivou, onda oni nisu dostižni na svakom prethodnom nivou. Dokaz kontradikcijom: ako su bili dostižni na prethodnom nivou, onda možemo samo dodati istrajane akcije kako bi ih načinili dostižnim na narednom nivou. Zbog monotonog rasta akcija i literala i zato što postoji samo konačan broj istih, mora doći nivo koji ima isti broj akcija i literala kao na prethodnom niovu. Zato što mutexi i no-goods opadaju i zato što ne može nikada biti manje od nule mutexa ili no-goods(a), mora doći nivo koji ima isti broj mutexa i no-goods(a) kao na prethodnom nivou. Kada jednom grafik dostigne ovo stanje, onda ako jedan od ciljeva nedostaje ili je mutex sa drugim ciljem, tada možemo zaustaviti GRAPHPLAN algoritam i vratiti neuspjeh.

Page 21: Klasično planiranje

Klasično planiranje

Jelena Laban Page 21

Primjer 1: Svijet blokova i STRIPS

Primjenom STRIPS mehanizma generisati niz operatora kojima bi se niz blokova uz pomoć robotske hvataljke preveo iz rasporeda prikazanog na slici 11a u raspored prikazan na slici 11b. Rješenje: STRIPS algoritam služi za rješavanje problema strategijom planiranja. Problem je potrebno predstaviti u formalnoj logici. Cilj STRIPS-a je da se nađe sekvenca operatora koja sistem prevodi iz početnog u ciljno stanje. STRIPS algoritam prikazan je na slici 12.

Slika 12

Slika 11

Page 22: Klasično planiranje

Klasično planiranje

Jelena Laban Page 22

Za opis stanja problema uvode se sledeći predikati za opisivanje medjusobnog položaja blokova: Na(B,A) označava da se blok B nalazi neposredno iznad bloka A; NaStolu(C) oznaĉava da se blok C nalazi neposredno na stolu; NaVrhu(B) označava da se iznad bloka B ne nalazi nijedan drugi blok. Status robotske hvataljke opisuje se predikatima: RukaPrazna označava da nema blokova u hvataljci; URuci(A) označava da se u hvataljci nalazi blok A. Početno stanje može se predstaviti sledećim skupom literala: Na(B,A) NaVrhu(B) NaStolu(A) NaVrhu(C) NaStolu(C) NaVrhu(D) NaStolu(D) RukaPrazna Ciljno stanje predstavlja se sa: Na(C,A) NaVrhu(C) NaStolu(A) Na(B,D) NaVrhu(B) NaStolu(D) RukaPrazna Akcije mehaničke hvataljke (ruke) možemo modelirati sledećim operatorima: • Operator Uzmi_Sa_Stola(x): PREDUSLOV: RukaPrazna Λ NaVrhu(x) Λ NaStolu(x) UKLONI: RukaPrazna; NaVrhu(x); NaStolu(x) DODAJ: URuci(x) • Operator Spusti_Na_Sto(y): PREDUSLOV: URuci(y) UKLONI: URuci(y) DODAJ: RukaPrazna; NaVrhu(y); NaStolu(y) • Operator Skini_Sa_Bloka(u,z): PREDUSLOV: RukaPrazna Λ NaVrhu(u) Λ Na(u,z) UKLONI: RukaPrazna; NaVrhu(u); Na(u,z) DODAJ: URuci(u); NaVrhu(z) • Operator Stavi_Na_Blok(v,w): PREDUSLOV: URuci(v) Λ NaVrhu(w) UKLONI: RukaPrazna; NaVrhu(w) DODAJ: RukaPrazna; NaVrhu(v); Na(v,w) Tekuće stanje: Na(B,A) NaVrhu(B) NaStolu(A) NaVrhu(C) NaStolu(C) NaVrhu(D) NaStolu(D) RukaPrazna

Ciljni stek (raste naniže): Na(C,A) Λ NaVrhu(C) Λ NaStolu(A) Λ Na(B,D) Λ NaVrhu(B) Λ NaStolu(D) Λ RukaPrazna

Lista akcija: - Grafički prikaz tekućeg stanja nije dio algoritma već je dat radi lakšeg praćenja promjena tekućeg stanja. Prva tri stava sa vrha steka RukaPrazna, NaStolu(D) i NaVrhu(B) su već zadovoljena u tekućem stanju, pa se uklanjaju sa steka. Na vrhu steka ostaje stav Na(B,D) koji trenutno ne važi. Algoritam nalaže izbor operatora koji u svom DODAJ dijelu ima navedeni stav,

a to je jedino operator Stavi_Na_Blok(v,w), pri čemu je izvršena unifikacija v⇔B, w⇔D.

Page 23: Klasično planiranje

Klasično planiranje

Jelena Laban Page 23

Zatim se na stek stavljaju sam operator, njegov preduslov i svaka komponenta preduslova posebno, nakon čega je izgled steka: Ciljni stek (raste naniže): Na(C,A) NaVrhu(C) NaStolu(A) Na(B,D)

Stavi_Na_Blok(B,D) URuci(B) Λ NaVrhu(D)

Stav NaVrhu(D) je zadovoljen u tekućem stanju dok stav URuci(B) nije zadovoljen. Ponovo, dakle treba pronaći operator koji ima ovakav stav u svom DODAJ dijelu. U ovom slučaju postoje dva operatora Uzmi_Sa_Stola i Skini_Sa_Bloka pa treba izvršiti izbor jednog od njih. STRIPS algoritam ne propisuje kako se vrši izbor, već se koristi poseban algoritam vezan za konkretan problem. U našem slučaju, pošto se blok B u tekućem stanju nalazi na bloku A pogodniji je

operator Skini_Sa_Bloka(u,z) uz unifikacije promjenljivih u⇔B, z⇔A, pa se na stek stavlja operator, njegov preduslov i svaki stav preduslova: Ciljni stek (raste naniže): Na(C,A) NaVrhu(C) NaStolu(A) Na(B,D)

Stavi_Na_Blok(B,D) URuci(B) Skini_Sa_Bloka(B,A) RukaPrazna Λ NaVrhu(B) Λ Na(B,A)

U tekućem stanju svi preduslovi važe pa ih sve skidamo sa steka, na čijem vrhu ostaje operator Skini_Sa_Bloka(B,A). Prema algoritmu, operator se skida sa steka i upisuje u listu akcija; vrši se modifikacija tekućeg stanja: uklanjaju se stavovi koje operator Skini_Sa_Bloka ima u svojoj UKLONI listi, a dodaju se stavovi iz njegove DODAJ liste. Strukture podataka STRIPS-a nakon ovoga izgledaju ovako: Tekuće stanje: NaStolu(A) NaVrhu(A) NaVrhu(C) NaStolu(C) Na Vrhu(D) NaStolu(D) URuci(B)

Ciljni stek (raste naniže): Na(C,A) NaVrhu(C) NaStolu(A) Na(B,D)

Stavi_Na_Blok(B,D) URuci(B)

Lista akcija: 1. Skini_Sa_Bloka(B,A) Sada stav na steku URuci(B) važi, pa se uklanjaju sa steka na čijem se vrhu sada pojavljuje operator Stavi_Na_Blok(B,D). Prema algoritmu, operator se skida sa steka i dopisuje u listu akcija a tekuće stanje se ažurira u skladu sa UKLONI i DODAJ listama operatora Stavi_Na_Blok. U tom trenutku imamo sledeći izgled struktura podataka: Tekuće stanje: NaStolu(A) NaVrhu(A) NaVrhu(C) NaStolu(C) Na(B,D) NaVrhu(B) NaStolu(D) RukaPrazna

Ciljni stek: Na(C,A) NaVrhu(C) NaStolu(A) Na(B,D) Lista akcija: 1. Skini_Sa_Bloka(B,A); 2. Stavi_Na_Blok(B,D)

Page 24: Klasično planiranje

Klasično planiranje

Jelena Laban Page 24

Tri stava sa vrha steka: Na(B,D) NaStolu(A) NaVrhu(C) zadovoljena su u tekućem stanju, pa se uklanjaju sa steka. Izgled ciljnog steka nakon uklanjanja stavova je: Na(C,A) Potrebno je naći operator koji zadovoljava stav Na(C,A) a to je slučaj jedino sa operatorom

Stavi_Na_Blok(v,w), uz unifikacije v⇔C, w⇔A, pa je izgled steka: Ciljni stek (raste naniže): Na(C,A)

Stavi_Na_Blok(C,A) URuci(C) Λ NaVrhu(A)

Stav NaVrhu(A) je zadovoljen, pa se skida sa steka; na vrhu stek ostaje stav URuci(C) koji nije zadovoljen. Operatori koji ga zadovoljavaju su Uzmi_Sa_Stola i Skini_Sa_Bloka. Koristeći znanje o tekućem stanju i značenju pojedinih operatora može se zaključiti da je operator

Uzmi_Sa_Stola(x) pogodniji. Ovaj operator, nakon unifikacije x ⇔C, pa stek izgleda ovako: Ciljni stek (raste naniže): Na(C,A)

Stavi_Na_Blok(C,A) URuci(C) Λ NaVrhu(A) Uzmi_Sa_Stola(C) RukaPrazna Λ NaVrhu(C) Λ NaStolu(C)

Kako su sve komponente složenog pocilja zadovoljene, uklanjamo ih sa steka kao i sam podcilj pa na vrhu ostaje operator Uzmi_Sa_Stola. Uklanjanjem ovog operatora sa steka, ažuriranjem liste akcija i tekućeg stanja, izgled struktura podataka je sledeći: Tekuće stanje: NaStolu(A) NaVrhu(A) Na(B,D) NaVrhu(B) NaStolu(D) URuci(C)

Ciljni stek (raste naniže): Na(C,A)

Stavi_Na_Blok(C,A) URuci(C)

Lista akcija: 1. Skini_Sa_Bloka(B,A); 2. Stavi_Na_Blok(B,D); 3. Uzmi_Sa_Stola(C) Stav URuci(C) je u tekućem stanju zadovoljen pa se uklanja sa steka; kako su obje komponente složenog podcilja koji ostaje na vrhu steka zadovoljene, i taj podcilj se uklanja. Zatim se operator Stavi_Na_Blok(C,A) skida sa steka i upisuje u plan operacija, a tekuće stanje se ažurira preko UKLONI i DODAJ lista ovog operatora. Prema tome, stanje je: Tekuće stanje: NaStolu(A) Na(C,A) NaVrhu(C) Na(B,D) NaVrhu(B) NaStolu(D) RukaPrazna

U ciljnom steku ostaje: Na(C,A) Lista akcija: 1. Skini_Sa_Bloka(B,A); 2. Stavi_Na_Blok(B,D); 3. Uzmi_Sa_Stola(C); 4. Stavi_Na_Blok(C,A) Sada se vidi da tekuće stanje odgovara ciljnom stanju, pa se sa steka skida kako stav Na(C,A) tako i složeni cilj; stek ostaje prazan što znači da je problem rješen.

Page 25: Klasično planiranje

Klasično planiranje

Jelena Laban Page 25

Primjer 2: Svijet blokova (problem izbora operatora) Na slici 13 (a) je prikazna jedna situacija iz svijeta cigala. Pronaći koje operatore i kojim redom treba primjeniti, da bi se prešlo u situaciju prikazanu na slici 13(b), koristeći STRIPS algoritam.

Slika 13

Rješenje: Predstava stanja i operatori mogu se definisati na isti način kao i u prethodnom zadatku. Početno stanje u ovom slučaju opisano je stavovima: NaStolu(A) Na(B,A) NaVrhu(B) RukaPrazna, dok je ciljno stanje opisano sa: NaStolu(B) Na(A,B) NaVrhu(A) RukaPrazna Operatori: 1. Uzmi_Sa_Stola(x); 2. Spusti_Na_Sto(y); 3) Skini_Sa_Bloka(u,z); 4) Stavi_Na_Blok(v,w) Inicijalno imamo sledeću situaciju: Tekuće stanje: NaStolu(A) Na(B,A) NaVrhu(B)

RukaPrazna

Ciljni stek: NaStolu(B) Λ Na(A,B) Λ NaVrhu(A) Λ RukaPrazna

Lista akcija: - Stav RukaPrazna zadovoljen je u početnom stanju pa se ovaj stav skida sa steka. Da bi se zavoljio stav NaVrhu(A) potrebno je izabrati operator. Mogući operatori, koji imaju stav NaVrhu(A) u svom DODAJ djelu su: 1-1 Spusti_Na_Sto(A); 1-2 Skini_Sa_Bloka(u,A); 1-3 Stavi_Na_Blok(A,w), pa biramo prvi od njih, Spusti_Na_Sto(A). Izgled steka nakon ažuriranja je: Ciljni stek: NaStolu(B) Na(A,B) NaVrhu(A)

Spusti_Na_Sto(A) URuci(A)

Da bismo zadovoljili stav URuci(A) na izboru su sledeći operatori: 2-1 Uzmi_Sa_Stola(A); 2-2 Skini_Sa_Bloka(A,z). Biramo operator Uzmi_Sa_Stola(A) i stavljamo ga na stek: Ciljni stek: NaStolu(B) Na(A,B) NaVrhu(A)

Spusti_Na_Sto(A) URuci(A) Uzmi_Sa_Stola(A) RukaPrazna Λ NaVrhu(A) Λ NaStolu(A)

Page 26: Klasično planiranje

Klasično planiranje

Jelena Laban Page 26

Stav NaStolu(A) zadovoljen je u tekućem stanju, pa ga skidamo sa steka. Na vrhu steka otaje nezadovoljeni stav NaVhu(A) koji se već pojavljivao kao tekući cilj u tekućem stanju. Algoritam u ovoj situaciji nalaže ponovni izbor operatora Spusti_Na_Sto(A), a za zadovoljavanje preduslova primjene ovog operatora bi bio ponovo izabran operator Uzmi_Sa_Stola(A) i td. Ova situacija predstavlja ćorskokak. Algoritam izbora operatora treb dakle da obezbjedi vraćanje unatrag (backtracking), tako što će obnoviti stanje steka prije izbora operatora Uzmi_Sa_Stola(A) i izabrati alternativni operator, u ovom slučaju operator Skini_Sa_Bloka(A,z). Ciljni stek (raste naniže): NaStolu(B) Na(A,B) NaVrhu(A)

Spusti_Na_Sto(A) URuci(A) Skini_Sa_Bloka(A,z) RukaPrazna Λ Na(A,z) Λ NaVrhu(A)

Na vrhu steka opet se pojavio nezadovljeni stav NaVrhu(A) koji signalizuje pogrešan izbor operatora i nalaže vraćanje na situaciju prije izbora poslednjeg operatora. U ovoj situaciji biramo sledeći operator po redosledu primjene, a to je Skini_Sa_Bloka(u,A). Stavljamo ga na stek: Ciljni stek (raste naniže): NaStolu(B) Na(A,B) NaVrhu(A)

Skini_Sa_Bloka(u,A) RukaPrazna Λ Na(u,A) Λ NaVrhu(u)

Izvršavanje algoritma se nastavlja unifikacijom u⇔B da bi se utvrdilo da se stav NaVrhu(B) nalazi u tekućem stanju. Unifikacijom je odredjena vrijednost i za ostale pojave promjenljive u na ciljnom steku tako da je sad na vrhu stek stav Na(B,A). Ovaj stav je zadovoljen, pa se uklanja sa steka kao i stav RukaPrazna. Zadovoljen je i složeni preduslov za primjenu operatora Skini_Sa_Bloka(B,A) pa se preduslov i operator uklanjaju sa steka i operator se primjenjuje čime se dobija novo tekuće stanje. Tekuće stanje: NaStolu(A) NaVrhu(A) URuci(B)

Ciljni stek (raste naniže): NaStolu(B) Na(A,B) NaVrhu(A) Lista akcija: 1. Skini_Sa_Bloka(B,A) Stav na vrhu steka, NaVrhu(A) zadovoljen je u ovom stanju pa se uklanja sa steka. Stav Na(A,B) nije zadovoljen u tekućem stanju. Jedini operator koji može da zadovolji ovaj stav je

Stavi_Na_Blok(v,w) uz unifikaciju v⇔A, w⇔B pa se ovaj operator stavlja na stek. Ciljni stek (raste naniže): NaStolu(B) Na(A,B)

Stavi_Na_Blok(A,B) URuci(A) Λ NaVrhu(B)

Stav NaVrhu(B) nije zadovoljen u tekućem stanju. Mogući operatori za izbor su: 3-1 Spusti_Na_Sto(B); 3-2 Stavi_Na_Blok(B,w); 3-3 Skini_Sa_Bloka(u,B) Bira se operator Spusti_Na_Sto(y) i ažurira ciljni stek:

Page 27: Klasično planiranje

Klasično planiranje

Jelena Laban Page 27

Ciljni stek (raste naniže): NaStolu(B) Na(A,B) Stavi_Na_Blok(A,B) URuci(A) Λ NaVrhu(B) Spusti_Na_Sto(B) URuci(B)

Preduslov URuci(B) je zadovoljen, pa je moguće primjeniti operator Spusti_Na_Sto(B) čime se dobija novo tekuće stanje: Tekuće stanje: NaStolu(A) NaVrhu(A) NaStolu(B) NaVrhu(B) RukaPrazna

Ciljni stek (raste naniže): NaStolu(B) Na(A,B)

Stavi_Na_Blok(A,B) URuci(A) Λ NaVrhu(B)

Lista akcija: 1. Skini_Sa_Bloka(B,A); 2. Spusti_Na_Sto(B) Stav NaVrhu(B) zadovoljen je u ovom stanju, pa se uklanja sa vrha steka. Za zadovoljavanje stava URuci(A) na raspolaganju su operatori: 4-1 Uzmi_Sa_Stola(A); 4-2 Skini_Sa_Bloka(A,z) Bira se prvi od ovih operatora i stavlja: Ciljni stek (raste naniže): NaStolu(B) Na(A,B)

Stavi_Na_Blok(A,B) URuci(A) Uzmi_Sa_Stola(A) RukaPrazna(A) Λ NaVrhu(A) Λ NaStolu(A)

Svi preduslovi za primjenu operatora Uzmi_Sa_Stola(A) su zadovoljeni u tekućem stanju, pa se uklanja sa steka. Primjenom ovog operatora dobija se novo stanje: Tekuće stanje: NaStolu(B) NaVrhu(B) URuci(A)

Ciljni stek (raste naniže): NaStolu(B) Na(A,B)

Stavi_Na_Blok(A,B) URuci(A)

Lista akcija: 1. Skini_Sa_Bloka(B,A); 2. Spusti_Na_Sto(B); 3. Uzmi_Sa_Stola(A) Preduslovi za primjenu operatora Stavi_Na_Blok(A,B) su u potpunosti zadovoljeni pa se redom skidaju sa steka. Ovaj operator takodje se uklanja sa steka i primjenjuje se na tekuće stanje čime se dobija novo tekuće stanje. Tekuće stanje: NaStolu(B) Na(A,B) NaVrhu(A) RukaPrazna

Ciljni stek (raste naniže): NaStolu(B) Na(A,B)

Page 28: Klasično planiranje

Klasično planiranje

Jelena Laban Page 28

Lista akcija: 1. Skini_Sa_Bloka(B,A); 2. Spusti_Na_Sto(B); 3. Uzmi_Sa_Stola(A); 4. Stavi_Na_Blok(A,B) Svi stavovi na steku su zadovoljeni pa se redom skidaju sa steka dok se stek ne isprazni čime se okončava algoritam. Rješenje problem dato je listom akcija.

Primjer 3: Hanojske Kule

Početno stanje u igri Hanojskih kula, prikazano na slici 14 (a), opisano je sledećim stavovima: Na(S1,MD) Na(S1,SD) Na(S1,VD)

Napomena: iS označava stub i, MD označava mali disk, SD srednji a VD veliki.

Slika 14

a) Opisati ciljno stanje prikazano na slici 14 (b). Definisati operatore: Pomjeri_Mali_Disk; Pomjeri_Srednji_Disk; Pomjeri_Veliki_Disk; poštujući pri tome ograničenja: 1) U datom trenutku može se pomjeriti samo jedan disk koji mora biti slobodan, 2) Veći disk ne može da dodje iznad manjeg. b) Navesti redosled biranja operatora tokom rada STRIPS algoritma i redosled operatora u listi akcija. Rješenje: a) Ciljno stanje se opisuje koristeći isti predikat Na kojim je predstavljeno početno stanje: Na(S3,MD) Na(S3,SD) Na(S3,VD) Operatori se mogu definisati na sledeći način: • Operator Pomjeri_Mali_Disk(x,y): PREDUSLOV: Na(x,MD) ; ODUZMI: Na(x,MD) ; DODAJ: Na(y,MD) • Operator Pomjeri_Srednji_Disk(z,u): PREDUSLOV: Na(z,SD) Λ ¬Na(z,MD) Λ ¬Na(u,MD) ODUZMI: Na(z,SD) DODAJ: Na(u,SD) • Operator Pomjeri_Veliki_Disk(v,w): PREDUSLOV: Na(v,VD) Λ ¬Na(v,MD) Λ ¬Na(v,SD) Λ ¬Na(w,MD) Λ ¬Na(w,SD) ODUZMI: Na(v,VD) DODAJ: Na(w,VD)

Page 29: Klasično planiranje

Klasično planiranje

Jelena Laban Page 29

Prvi argument operatora predstavlja izvorišni, a drugi argument odredišni stub. U radu STRIPS algoritma podrazumjeva se pretpostavka o zatvorenom svijetu, da negacija stava važi pod uslovom da se taj stav ne nalazi u tekućem stanju. b) Inicijalno stanje opisano je na sledeći način. Tekuće stanje: Na(S1,MD) Na(S1,SD) Na(S1,VD) Ciljni stek: Na(S3,MD) Na(S3,SD) Na(S3,VD) Lista akcija: - Da bismo zadovoljili stav Na(S3,VD) biramo operator Pomjeri_Veliki_Disk uz unifikaciju

v⇔S1, w⇔S2 pa je izgled ciljnog steka: Ciljni stek: Na(S3,MD) Na(S3,SD) Na(S3,VD)

Pomjeri_Veliki_Disk(S1,S3) Na(S1,VD) Λ ¬ Na(S1,MD) Λ ¬Na(S1,SD) Λ ¬Na(S3,MD) Λ ¬Na(S3,SD)

S ozbirom da se stav Na(S3,SD) ne nalazi u tekućem stanju, zadovoljena je negacija ovog stava prema pretpostavci o zatvorenom svijetu, pa se ovaj stav uklanja sa steka; isto važi i za stav ¬Na(S3,MD). Stav ¬Na(S1,SD) nije zadovoljen u tekućem stanju pa biramo operator Pomjeri_Srednji_Disk(S1,S2) jer je to jedini operator koji uklanja stav Na(S1,SD). Izmedju mogućnosti da izaberemo S2 ili S3 za odredišni disk, izbor je pao na S2 jer vodi do rješenja u manjem broju poteza. Sada je: Ciljni stek: Na(S3,MD) Na(S3,SD) Na(S3,VD)

Pomjeri_Veliki_Disk(S1,S3) Na(S1,VD) ¬Na(S1,MD) ¬Na(S1, SD) Pomjeri_Srednji_Disk(S1,S2) Na(S1,SD) Λ ¬Na(S1,MD) Λ ¬Na(S2,MD)

U tekućem stanju zadovoljeno je ¬Na(S2,MD). Da bismo zadovoljili ¬Na(S1,MD) potrebno je ukloniti stav Na(S1,MD) iz tekućeg stanja, pa biramo operator Pomjeri_Mali_Disk(S1,S3). Odredišni stub i ovog puta je izabran tako da se dobije rješenje u najmanjem broju poteza. Sadržaj steka sada je: Ciljni stek: Na(S3,MD) Na(S3,SD) Na(S3,VD)

Pomjeri_Veliki_Disk(S1,S3) Na(S1,VD) ¬Na(S1,MD) ¬Na(S1, SD) Pomjeri_Srednji_Disk(S1,S2) Na(S1,SD) ¬Na(S1,MD) Pomjeri_Mali_Disk(S1,S3) Na(S1,MD)

Page 30: Klasično planiranje

Klasično planiranje

Jelena Laban Page 30

Kako je preduslov z primjenu poslednjeg izabranog izabranog operatora ispunjen, preduslov i operator skidaju se sa steka i ažurira se stanje u skladu sa UKLONI i DODAJ listama operatora pa je stanje sledeće: Tekuće stanje: Na(S3,MD) Na(S1,SD) Na(S1,VD) Lista akcija: 1. Pomjeri_Mali_Disk(S1,S3) U tekućem stanju zadovoljeni su stavovi ¬Na(S1,MD) i Na(S1,SD) kao i složeni uslov za primjenu operatora Pomjeri_Srednji_Disk(S1,S2) pa se ovi stavovi i pomenuti operator skidaju sa steka. Primjenom operatora dobija se: Tekuće stanje: Na(S3,MD) Na(S2,SD) Na(S1,VD) Lista akcija: 1. Pomjeri_Mali_Disk(S1,S3); 2. Pomjeri_Srednji_Disk(S1,S2) U tekućem stanju zadovoljena su tri stava Na(S1,VD) ¬Na(S1,MD) ¬Na(S1, SD) pa se oni uklanjaju sa steka. Složeni preduslov, Na(S1,VD) Λ ¬ Na(S1,MD) Λ ¬Na(S1,SD) Λ ¬Na(S3,MD) Λ ¬Na(S3,SD), nije medjutim zadovoljen jer ne važi ¬Na(S3,MD). Ovaj stav bio je zadovoljen u početnom stanju, ali je izvršeno pomjeranje malog diska na stub 3; prema tome, zadovoljavanjem jednog podcilja složenog cilja “pokvarilo” je zadovoljenost drugog podcilja. Upravo iz ovog razloga pored podciljeva na stek se stavlja i složeni cilj. Rad algoritma nastavlja se tako što ponovo na stek stavljmo stav ¬Na(S3,MD) i biramo operator Pomjeri_Mali_Disk(S3,S2) da bismo zadovoljili ovaj stav. Primjetimo da bi pomjeranje malog diska sa stuba 3 na stub 1 ponovo poremetilo jedan od uslova za primjenu operatora Pomjeri_Veliki_Disk. Algoritam izbora operatora, treda dakle da uključi i eliminaciju mogućnosti “klackanja” izmedju podcilja tako da zadovoljavanje jednog od njih uvijek kvari drugi i obratno. Uslovi za primjenu izabranog operatora Pomjeri_Mali_Disk(S3,S2) su zadovoljeni, pa se uslovi i sam operator skidaju sa steka odmah po njihovom stavljanju; primjenom operatora dobija se: Tekuće stanje: Na(S2,MD) Na(S2,SD) Na(S1,VD) Ciljni stek: Na(S3,MD) Na(S3,SD) Na(S3,VD)

Pomjeri_Veliki_Disk(S1,S3) Na(S1,VD) Λ ¬ Na(S1,MD) Λ ¬Na(S1,SD) Λ ¬Na(S3,MD) Λ ¬Na(S3,SD) ¬Na(S3,SD)

Lista akcija: 1. Pomjeri_Mali_Disk(S1,S3); 2. Pomjeri_Srednji_Disk(S1,S2); 3. Pomjeri_Mali_Disk(S3,S2) U narednim koracima utvrdjuje se da su zadovoljeni uslovi za primjenu operatora Pomjeri_Veliki_Disk(S1,S3). Nakon primjene ovog operatora imamo: Tekuće stanje: Na(S2,MD) Na(S2,SD) Na(S3,VD) Ciljni stek: Na(S3,MD) Na(S3,SD) Na(S3,VD) Lista akcija: 1. Pomjeri_Mali_Disk(S1,S3); 2. Pomjeri_Srednji_Disk(S1,S2); 3. Pomjeri_Mali_Disk(S3,S2); 4. Pomjeri_Veliki_Disk(S1,S3)

Page 31: Klasično planiranje

Klasično planiranje

Jelena Laban Page 31

Stav Na(S3,VD) je zadovoljen pa se skida sa steka. Da bi se zadovoljio stav Na(S3,SD) bira se operator Pomjeri_Srednji_Disk(S2,S3). U narednim koracima algoritma, da bi se zadovoljio uslov za primjenu navedenog operatora mali disk uklanja se sa stuba 2 izborom operatora Pomjeri_Mali_Disk(S2,S1). Ovaj operator odmah se primjenjuje a nakon toga i operator Pomjeri_Srednji_Disk(S2,S3). Na kraju se izborom i primjenom operatora Pomjeri_Mali_Disk(S1,S3) zadovoljava složeni cilj i svi preostali stavovi bivaju skinuti sa steka tako da je konačno stanje: Tekuće stanje: Na(S3,MD) Na(S3,SD) Na(S3,VD) Ciljni stek: - LISTA AKCIJA: 1. Pomjeri_Mali_Disk(S1,S3); 2. Pomjeri_Srednji_Disk(S1,S2); 3. Pomjeri_Mali_Disk(S3,S2); 4. Pomjeri_Veliki_Disk(S1,S3); 5. Pomjeri_Mali_Disk(S2,S1); 6. Pomjeri_Srednji_Disk(S2,S3); 7. Pomjeri_Mali_Disk(S1,S3)

Page 32: Klasično planiranje

Klasično planiranje

Jelena Laban Page 32

Sadržaj ključnih riječi

Faktor zastupljenosti, 2 PDDL, 2, 4, 6, 9 Semantički skup, 2 PlanSAT,7 Bounded PlanSAT, 7 Relevantno-stanje, 9 Applicable, 9 State abstraction, 12 Dekompozicija, 12 Podciljna nezavisnost, 12 Graphplan, 12, 16, 17, 18 Istrajanost akcije, 12, 13 Mutex 13, 14, 15, 16, 17, 18, 19 Extract-solution, 16, 17, 18, 19 Nekonzistentni efekti 15, 16 Nekonzistentna podrška, 15, 16 Serijsko planiranje grafika, 15 Nivo suma, 15 Skup nivoa, 15 No-good, 18, 19

Literatura:

1. Stuart Russel, Peter Norvig , Artificial Intelligence: A Modern Approach/ chapter 10 2. Zbirka zadataka iz ekspertskih sistema: Dragan Bojić, Miloš Gligorić, Boško Nikolić 3. http://vh216602.truman.edu/agarvey/cs480/ClassicalPlanning.pdf 4. A Concise Introduction to Models and Methods for Automated Planning, Hector Geffner Blai Bonet.