Planering. Planering vs sökning, 1. Planering vs sökning, 2. Handlingsrepresentation

Relevanta dokument
729G43 Artificiell intelligens Planering

729G43'Ar*ficiell'intelligens' Planering' Planering' Planering'vs'sökning,'1' Planering'vs'sökning,'2' Arne'Jönsson' HCS/IDA' '

Artificiell Intelligens II Lektion 1

Lek$on 4: Planering. Robin Keskisärkkä

Artificiell Intelligens Lektion 1

Antag att b är förgreningsfaktorn, d sökdjupet, T (d) tidskomplexiteten och M(d) minneskomplexiteten.

Artificiell Intelligens Övningsuppgifter

Fråga 5 (1 poäng) För att definiera ett sökproblem krävs...

Antag att b är förgreningsfaktorn, d sökdjupet, T (d) tidskomplexiteten och M(d) minneskomplexiteten.

Asymptotisk analys innebär att... man försöker uppskatta vad som händer för stora indatamängder.

Vad behövs för att skapa en tillståndsrymd?

Fråga 5 (1 poäng) För att definiera ett sökproblem krävs...

Asymptotisk analys innebär att... man försöker uppskatta vad som händer för stora indatamängder.

Shakey s värld med HTNplanering

de var svåra att implementera och var väldigt ineffektiva.

Lektion 2: Sökagenter. Robin Keskisärkkä

Artificial Intelligence

Utsagor (Propositioner) sammansatta utsagor sanningstabeller logisk ekvivalens predikat (öppna utsagor) kvantifierare Section

Tentamenskod: Inga hjälpmedel är tillåtna

STRIPS. En planerares uppbyggnad. Emma Torensjö. Artificiell Intelligens II. Linköpings Universitet HT Emma Torensjö.

Logik och kontrollstrukturer

Sätt att skriva ut binärträd

Antag att följande träd genereras i ett spelförande program om vi applicerar evalueringsfunktionen

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk

Mycket kortfattade lösningsförslag till tenta i AI 6 nov 2003

Sökning i ordnad lista. Sökning och sortering. Sökning med vaktpost i oordnad lista

Tommy Färnqvist, IDA, Linköpings universitet

Exempel på ett litet Ada-program

Granskning av gränssnitt. Mattias Arvola

Logisk semantik I. 1 Lite om satslogik. 1.1 Konjunktioner i grammatisk bemärkelse. 1.2 Sant och falskt. 1.3 Satssymboler. 1.

Föreläsning 10 Datalogi 1 DA2001. Utskrift på skärmen. Syntax. print( Hej ) Hur är det? Hej. print( Hej,end= ) print( Hur är det? ) HejHur är det?

Djupstruktur och ytstruktur

Tänk på följande saker när du skriver tentan:

Antag att b är förgreningsfaktorn, d sökdjupet, T (d) tidskomplexiteten och M(d) minneskomplexiteten.

Introduktion till programmering SMD180. Föreläsning 2: Variabler, uttryck och satser

Varför är logik viktig för datavetare?

Datorlingvistisk grammatik I Institutionen för lingvistik och filologi Oktober 2007 Mats Dahllöf

Grafer, traversering. Koffman & Wolfgang kapitel 10, avsnitt 4

Artificiell Intelligens Lektion 4

Sökning. Sökning. Köoperationer. Generell sökalgoritm

Föreläsning 4: Kombinatorisk sökning

EnKlass. Instans 3 av EnKlass. Instans 2 av EnKlass

A B C D E F A B C D E F (3) Svar: Tabellen ger grafen:

Imperativ programmering. Föreläsning 2

Programmering i C++ EDA623 Mer om klasser. EDA623 (Föreläsning 6) HT / 26

Föreläsning 2 Programmeringsteknik och C DD1316. Programmering. Programspråk

Dataabstraktion. TDDD73 Funktionell och imperativ programmering i Python Föreläsning 12. Peter Dalenius Institutionen för datavetenskap

JavaScript del 3 If, Operatorer och Confirm

Introduktion till programmering SMD180. Föreläsning 4: Villkor och rekursion

Grundläggande datalogi - Övning 2

Tentamen i. TDDA 69 Data och programstrukturer

Programmering = modellering

Översikt. Stegvis förfining. Stegvis förfining. Dekomposition. Algoritmer. Metod för att skapa ett program från ett analyserat problem

Språket Python - Del 1 Grundkurs i programmering med Python

Övning2. Variabler. Data typer

Dataabstraktion. TDDD73 Funktionell och impterativ programmering i Python Föreläsning 12. Peter Dalenius Institutionen för datavetenskap

Labb i Datorsystemteknik och programvaruteknik Programmering av kalkylator i Visual Basic

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

729G74 IT och programmering, grundkurs. Tema 2. Föreläsning 3 Jody Foo,

Föreläsning 4: Giriga algoritmer. Giriga algoritmer

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Grundläggande logik och modellteori (5DV102)

DD1361 Programmeringsparadigm HT17

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt

Föreläsning 3-4 Innehåll

Programmering A. Johan Eliasson

Föreläsning 8 Datastrukturer (DAT037)

Parameteröverföring. Exempel. Exempel. Metodkropp

DD1314 Programmeringsteknik

729G74 IT och programmering, grundkurs. Tema 2. Föreläsning 3 Jody Foo,

Grundläggande datalogi - Övning 3

Classes och Interfaces, Objects och References, Initialization

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

Data, typ, selektion, iteration

Övning 1 - Abstrakta datatyper

Föreläsning 2. Täcker material från lektion 1, 2, 3 och 4:

Multipel tilldelning. Introduktion till programmering D0009E. Föreläsning 6: Iteration. while-satsen. Kom ihåg. Snurror kontra rekursion

Översikt. Varför lära sig detta? Motivering Syntax och semantik Imperativa språkets byggstenar och Python. PL-boken Kap 1 (repetition):

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk

Datastrukturer och algoritmer

Programmeringsteknik I

Pythons standardbibliotek

CS - Computer science. Datateknik Informationsbehandling Datalogi Datavetenskap (ÅA 2008)

System.out.println("Jaså du har "+ antalhusdjur+ " husdjur"); if ( antalhusdjur > 5 ) System.out.println("Oj det var många);

Föreläsning 2 Programmeringsteknik och C DD1316

Föreläsning Datastrukturer (DAT037)

Python. Vi har ofta behov av att behandla datastrukturer på ett enhetligt sätt så att vi kan göra samma sak i flera olika program.

Några inbyggda funktioner (med resultat!) Introduktion till programmering D0009E. Föreläsning 4: Villkor och rekursion. Modulus-operatorn.

Kunskapsrepresentation

Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten?

Objektorienterad programmering i Java

Programmering för språkteknologer II, HT2014. Rum

Föreläsning REPETITION & EXTENTA

Föreläsning Datastrukturer (DAT036)

I en deterministisk omgivning beror nästa tillstånd bara av agentens handling och nuvarande tillstånd.

Övningshäfte 1: Logik och matematikens språk

Innehållsförteckning

Tommy Färnqvist, IDA, Linköpings universitet. 1 Kursadministration 1. 2 Introduktion Varför logik? Satslogik... 2

Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

Programsystemkonstruktion med C++: Övning 2. Karl Palmskog september 2010

Transkript:

Planering Planering vs sökning, 1! Sökning vs planering! Planeringsnotationer! Enkel planering! Partialordningsplanering! Resursplanering! Hierarkisk planering! Planering i icke-deterministiska domäner Sökning! Handlingarna ger möjliga nya tillstånd! Tillstånden är kompletta, oftast enkla omvärldsbeskrivningar, tillståndsvektorer! Agenten kan testa om målet är uppnått genom att applicera en heuristisk funktion, f, på ett tillstånd, p, f(p). Kan inte välja handling som för närmare målet utifrån f(p).! Sökningen leder till en obruten sekvens av handlingar Planering vs sökning, 2 Handlingsrepresentation Planering! Använder en mer uttrycksfull representation som låter agenten resonera om tillstånd och handlingar! FOPL kopplar handlingar och tillstånd! Söker inte blint utan kan välja operatorer som för agenten framåt! Agenten kan ta de stora besluten först! Låter agenten lägga till handlingar när de behövs! Arbetar med flera delplaner samtidigt STRIPS-notationen:! Preconditions: villkor som måste vara uppfyllda för att utföra handlingen! Effect: effekten av att utföra handlingen. Delas ibland i en add list och en delete list! ara positiva predikat i tillstånd, inga negationer! losed world assumption! ara konjunktioner! Inga kvantifierare! Ingen likhet! Ingen typning! Inga situationsvariabler

Exempel, locks world Exempel Predikat:! On(x, y)! lear(x) Handling:! Move(b, x, y) Precond: On(b, x) lear(b) lear(y) Effect: On(b, y) lear(x) On(b, x) lear(y) STRIPS hade ADD och DELETE: ADD: On(b, y) lear(x) DELETE: On(b, x) lear(y) A On(A,) lear(a) lear() On(, Table) On(, Table) Move(A,, ) Precond: On(A, ) lear(a) lear() ADD: On(A, ) lear() DELETE: lear() On(A, ) A On(A,) lear(a) lear() On(, Table) On(, Table) STRIPS ADL! Effektiv men begränsad! Tar bort predikat, DELETE-list, dvs icke-monoton Mer uttrycksfullt! Tillåter negation! Open world assumption! Kraftfullare effekter: P Q innebär också P Q! Kvantifierade målvariabler: ex, x At(P, x) At(R, x)! Konjunktion och disjunktion! Villkorliga effekter: when P : E! Likhet! Typning: b : lock

Planeringsalgoritmer STRIPS-operatorer! Generera en sekvens av handlingar från start till mål! Framåtsökning! akåtsökning! STRIPS Stack(x, y) P: lear(y)! Holdning(x) D: lear(y)! Holdning(x) A: ArmEmpty! On(x, y) UnStack(x, y) P: On(x,y)! lear(x)! ArmEmpty D: On(x, y)! ArmEmpty A: Holdning(x)! lear(y) PickUp(x) P: lear(x)! OnTable(x) ArmEmpty D: OnTable(x)! ArmEmpty A: Holdning(x) PutDown(x) P: Holdning(x) D: Holdning(x) A: OnTable(x)! ArmEmpty Exempel Nytt exempel Start A On(, ) lear(a) lear() OnTable(A) OnTable() ArmEmpty Start A On(, A) lear() lear() OnTable(A) OnTable() ArmEmpty Mål Uppfyllt A On(, ) On(A, ) OnTable() ArmEmpty Leta efter operatorer som har On(x, y) på sin ADD-list, dvs Stack(A, ) Precond: lear(), Holding(A) Leta efter operator som har Holding(x) på ADD-list: PickUp eller UnStack Välj PickUp(A). Precond: ArmEmpty, lear(a), OnTable(A) uppfyllt Mål A On(A, ) On(, ) OnTable() ArmEmpty örja med ett mål, t.ex. On(A, ), ger UnStack(, A), PutDown(), PickUp(A), Stack(A, ) Ta sen nästa mål On(, ). Ger UnStack(A, ), PutDown(A), PickUp(), Stack(, ) Nu är inte On(A, ) uppfyllt så PickUp(A), Stack(A, )

Partialordningsplanering Ännu inte uppfyllt men först partialordnas delplanerna START OnTable(A) OnTable() ON(,A) ArmEmpty lear() lear() {x/a}! Problemet beror på att STRIPS arbetar med ett mål i taget! Vill kunna avbryta uppfyllandet av ett mål och påbörja nästa och sen fortsätta med det första igen! Uppnå On(A, ) UnStack(, A), PutDown() lear(a) OnTable(A) ArmEmpty PickUp(A) Holding(A) ArmEmpty OnTable(A) lear() OnTable() ArmEmpty PickUp() Holding() ArmEmpty OnTable() On(,A) lear() ArmEmpty UnStack(,A) Holding() lear(a) ArmEmpty On(,A)! Fortsätt med On(, ) PickUp(), Stack(, )! Återuppta On(A, ) PickUp(A), Stack(A, )! Partialordningplanerare skapar partiellt ordnade delplaner enligt least commitment strategy, dvs fatta så få beslut som möjligt lear() Holding(A) Stack(A,) ArmEmpty ON(A,) lear() Holdning(A) lear() Holding() Stack(,) ArmEmpty On(,) lear() Holdning() Holding() PutDown() ArmEmpty OnTable() Holdning() On(A,) On(,) OnTable() MÅL Partialordna, 1 Partialordna, 2! Operatorer som lagts till för att uppnå delmål partialordnas PickUp(A)! Stack(A,) PickUp()! Stack(,) UnStack(, A)! PutDown()! Vid konflikt ordnas operatorer så att konflikten undviks! Stack(A,) är i konflikt med PickUp() eftersom Stack tar bort lear ()! Stack(,) är pss i konflikt med UnStack(,A)! Partialordna: PickUp()! Stack(A,) UnStack(, A)! Stack(,) Finns det ytterligare ordning mellan de partiellt ordnade planerna? PickUp(A)! Stack(A,) PickUp()! Stack(,) UnStack(, A)! PutDown() PickUp()! Stack(A,) UnStack(, A)! Stack(,) PickUp() (och därmed också Stack(,)) före Stack(A,) och UnStack(,A) före Stack(,) UnStack(, A)! PutDown()! PickUp()! Stack(,)! PickUp(A)! Stack(A,)

START OnTable(A) OnTable() ON(,A) ArmEmpty lear() lear() On(,A) lear() ArmEmpty UnStack(,A) Holding() lear(a) ArmEmpty On(,A) Holding() PutDown() ArmEmpty OnTable() Holdning() lear() OnTable() ArmEmpty PickUp() Holding() ArmEmpty OnTable() lear() Holding() Stack(,) ArmEmpty On(,) lear() Holdning() lear(a) OnTable(A) ArmEmpty PickUp(A) Holding(A) ArmEmpty OnTable(A) lear() Holding(A) Stack(A,) ArmEmpty ON(A,) lear() Holdning(A) On(A,) On(,) OnTable() MÅL Alla preconditions uppfyllda så planeraren är klar Planeringsgraf! Graf med en sekvens av nivåer som svarar mot temporala steg i planen. ara för propositioner, dvs inga variabler i tillstånden! Representerar handlingar och icke-handlingar! Ex S 0 A 0 S 1 Have(ake) Eaten(ake) Eat(ake) Mutexlänk Have(ake) Have(ake) Eaten(ake) Eaten(ake) Ömsesidigt uteslutande relationer GraphPlan Mutexlänkar! Inkonsistenta effekter! en handling negerar en annan handlings effekt! Interference! en handling negerar en annans precondition! Konkurrerande behov! två handlingars preconditions är ömsesidigt uteslutande! Inkonsistent stöd! två satser på samma nivå är varandras komplement eller alla handlingar som kan uppnå satserna är ömsesidigt uteslutande def graphplan(problem): graph = initialplanninggraph(problem) goals = goals(problem) while True: if goals all non-mutex in last level of graph: solution = extractsolution(graph, goals, length(graph)) if solution <> failure: return solution elif nosolutionpossible(graph): return failure graph = expandgraph(graph, problem)

Punkteringsexemplet S 0 A 0 S 1 Init(At(Flat, Axle)! At(Spare, Trunk)) Goal(At(Spare, Axle)) Action(Remove(Spare, Trunk), Precond: At(Spare, Trunk), Effect: At(Spare, Trunk)! At(Spare, Ground)) Action(Remove(Flat, Axle), Precond: At(Flat, Axle), Effect: At(Flat, Axle)! At(Flat, Ground)) Action(PutOn(Spare, Axle), Precond: At(Spare, Ground)! At(Flat, Axle), Effect: At(Spare, Ground)! At(Spare, Axle)) Action(LeaveOvernight, Precond: Effect: At(Spare, Ground)! At(Spare, Axle)! At(Spare, Trunk)! At(Flat, Ground)! At(Flat, Axle)) WA At(Spare,Trunk) At(Flat,Axle) At(Spare,Axle) At(Flat,Ground) At(Spare,Ground) Remove(Spare,Trunk) Remove(Flat,Axle) LeaveOvernight At(Spare,Trunk) At(Spare,Trunk) At(Flat,Axle) At(Flat,Axle) At(Spare,Axle) At(Flat.Ground) At(Flat,Ground) At(Spare,Ground) At(Spare,Ground) S 0 A 0 S 1 A 1 S 2 Planering i världen At(Spare,Trunk) At(Spare,Trunk) At(Spare,Trunk) Remove(Spare,Trunk) At(Spare,Trunk) Remove(Spare,Trunk) At(Spare,Trunk)! Resursplanering! Handlingar tar en viss tid att utföras At(Flat,Axle) Remove(Flat,Axle) LeaveOvernight At(Flat,Axle) At(Flat,Axle) Remove(Flat,Axle) LeaveOvernight At(Flat,Axle) At(Flat,Axle)! Planhierarkier! Planering i icke-deterministiska domäner! Kontinuerlig planering At(Spare,Axle) At(Spare,Axle) PutOn(Spare,Axle) At(Spare,Axle) At(Spare,Axle) At(Flat,Ground) At(Spare,Ground) At(Flat.Ground) At(Flat,Ground) At(Spare,Ground) At(Flat.Ground) At(Flat,Ground) At(Spare,Ground) At(Spare,Ground) At(Spare,Ground)

Resursplanering, exempel Vanlig partialordningsplanerare Init(Vinge(v 1 )! Vinge(v 2 )! Motor(m 1, v 1, 40)! Motor(m 2, v 2, 30)! Hjul(h 1, v 1, 20)! Hjul(h 2, v 2, 15)) Goal(Klar(v 1 )! Klar(v 2 )) Action(AddMotor(m, v, d), Precond : Motor(m, v, d)! Vinge(v)! MotorOn(v), Effect: MotorOn(v)! Duration(d)) Action(AddHjul(h, v, d), Precond : Hjul(h, v, d)! Vinge(v)! MotorOn(v)! HjulOn(v), Start AddMotor1 40 AddMotor2 30 AddHjul1 20 AddHjul2 15 Inspektera1 10 Inspektera2 10 Mål Effect: HjulOn(h)! Duration(d)) Action(Inspektera(v), Precond : MotorOn(v)! HjulOn(v)! Vinge(v), Effect: Klar(v)! Duration(10)) Resursplanering Exempel Måste veta när handlingar börjar och slutar! ES: tidigaste möjliga starttid! LS: senast möjliga starttid! Slack = LS-ES! ES räknas ut från Start till Mål! LS räknas ut från Mål till Start ES AddMotor1 0 AddHjul1 40 Inspektera1 60 AddMotor2 0 AddHjul2 30 Inspektera2 45 LS LS(Op i-1 )=LS(OP i )-Duration(OP i-1 ), LS(Mål)=ES(Mål)=70 Inspektera2=70-10, AddHjul2=60-15, AddMotor1=45-30 AddMotor2 0 15 AddHjul2 30 45 Inspektera2 45 60 AddMotor1 0 0 AddHjul1 40 40 Inspektera1 60 60

Resursplanerare Planering med resursbegränsning Start [0,0] AddMotor1 [40,40] AddHjul1 [60,60] Inspektera1 40 20 10 Mål! Antag begränsade resurser. Resource anger begränsningen! Svårare problem eftersom planeraren måste välja vilken handling som skall utföras först [0,15] AddMotor2 30 [30,45] AddHjul2 15 [45,60] Inspektera2 10! Ofta används minimum slack, dvs tag i varje steg den plan som har minst slack, Greedy. AddMotor 1 Hjul 1 K 1 AddMotor 2 Hjul 2 Slack K 2 10 20 30 40 50 60 70 Exempel Planer för delade resurser Init(Vinge(v 1 )! Vinge(v 2 )! Motor(m 1, v 1, 40)! Motor(m 2, v 2, 30)! Hjul(h 1, v 1, 20)! Hjul(h 2, v 2, 15)! Kran(1)! Luftpump(1)! Kontrollant(2)) Goal(Klar(v 1 )! Klar(v 2 )) Action(AddMotor(m, v, d), Precond : Motor(m, v, d)! Vinge(v)! MotorOn(v), Effect: MotorOn(v)! Duration(d)), Resource: Kran(1)) Action(AddHjul(h, v, d), Precond : Hjul(h, v, d)! Vinge(v)! MotorOn(v)! HjulOn(v), Effect: HjulOn(h)! Duration(d)), Resource: Luftpump(1)) Action(Inspektera(v), Precond : MotorOn(v)! HjulOn(v)! Vinge(v), Effect: Klar(v)! Duration(10)), Resource: Kontrollant(1)) AddMotor 1 Hjul 1 AddMotor 2 Hjul 2 K 1 AddMotor 2 Hjul 2 K 2 AddMotor 1 Hjul 1 K 2 K 1 Minst slack

Hierarkisk planering Hierarkisk planering (HTN)! Abstrakta operatorer som håller steg i planen som i sig implementerar operatorn! Expanderas till dess att planeraren bara har primitiva operatorer! Expanderade planer måste ha korrekta preconditions! Interna effekter: preconditions som uppfylls inom en abstrakt operator. Den hierarkiska planeraren behöver inte hantera dessa! Externa effekter: preconditions som kommer utanför den abstrakta operatorn. Måste ordnas av planeraren P = initialiserad till top-planen while P innehåller icke-primitiva handlingar: välj en handling T ur P välj en metod att expandera T ersätt T med en expansion av T if kritik skall appliceras på detta steg: använd kritiken för att hitta konflikter reparera konflikter if någon konflikt inte kan fixas: return failure Exempel, bygga flygplan ygga och utvärdera expanderad ygga flygplan Expandera Sätta in säten Fixa utvecklingspengar pengar Underleverantörer Designa flygplanet ritning ygga och utvärdera ritning ygga flygplanskropp ygga motor fpk ygga cockpit Sätta samman vingar fpk+ vingar Sätta samman flygplan Utvärdera

Kritisera Sätta samman vingar expanderad! Alla externa effekter måste ordnas! För den abstrakta operatorn ygga och utvärdera måste de externa effekterna säten, hjul, plåt och ritning ordnas! Ex Hjul behövs inte för att bygga motor eller för att bygga flygplanskroppen utan går direkt till Sätta samman vingar hjul plåt motor Effekterna förfinas: Underleveratör hjul Underleveratör hjul ygga motor motor vingar ygga vingar ygga och utvärdera förfinas till Montera hjul & motor Sätta samman vingar förfinas till ygga motor motor Montera hjul & motor Montera hjul & motor Expanderas Till primitiva operatorer Planering i icke-deterministiska domäner Hittills har världen varit: tillgänglig, statisk och deterministisk Handlingar korrekta och kompletta Två problem:! Världen är inte komplett. Kan t.ex. inte se allt som finns! Världen är inte korrekt. Någon kan t.ex. flytta objekt eller handlingar misslyckas Strategier för att hantera inkonsistent och icke-komplett information! Sensorlös planering! Skapar plan utan sensordata! Villkorlig planering! Skapar plan för olika utfall! Omplanerande system! Inspekterar världen och planen innan handling

Exempel, 1 Exempel, 2! Måla stol och bord i samma färg. Init(Objekt(ord)! Objekt(Stol)! urk( 1 )! urk( 2 )! ISynfältet(ord)) Mål(Färg(Stol, c)! Färg(ord, c)) Action(TaAvLock(b), Precond: urk(b) Effect: Öppen(b)) Action(Måla(x, b), Precond: urk(b)! Objekt(x)! Färg(b, f)! Öppen(b) Effect: Färg(x, f))! Varseblivningsschema Percept(Färg(x, c), Precond: Objekt(x)! ISynfältet (x)) Agenten vet färgen, c, på objektet, x. Percept(Färg(b, c), Precond: urk(b)! ISynfältet (b)! Öppen(b)) Action(TittaPå(x), Precond: ISynfältet (y)! x! y Effect: ISynfältet (x)! ISynfältet (y)) Sensorlös planering, 1 Sensorlös planering, 2! Ser inget och kan därmed bara måla båda bord och stol i en av de två färgerna.! Inga varseblivningsschema Init(Objekt(ord)! Objekt(Stol)! urk( 1 )! urk( 2 ))! Vet också att objekt kan ha en färg x y Färg(x, y) vilket efter Skolemisering ger Färg(x, (x))! Applicera handlingen: Action(TaAvLock(b), Precond: urk(b), Effect: Öppen(b)) med {b/urk 1 } ger: Objekt(ord)! Objekt(Stol)! urk( 1 )! urk( 2 )! Öppen( 1 )! Färg(x, (x))! Med {x/ 1 och f/( 1 )} kan vi applicera handlingen: Action(Måla(x, b), Precond: urk(b)! Objekt(x)! Färg(b, f)! Öppen(b) Effect: Färg(x, f)) på t.ex. Stol och får: Action(Måla(Stol, 1 ), Precond: urk( 1 )! Objekt(Stol)! Färg( 1, ( 1 ))! Öppen( 1 ) Effect: Färg(Stol, ( 1 ))

Sensorlös planering, 3 Villkorlig planering! Samma handling på ord ger: Färg(ord, ( 1 ))! och måltillståndet: Färg(Stol, ( 1 ))! Färg(ord, ( 1 ))! Skapa en plan som inspekterar världen och handlar därefter [TittaPå(ord), TittaPå(Stol), if Färg(ord, c)! Färg(Stol, c) then NoOp else [TaAvLock(urk 1 ), TittaPå(urk 1 ), TaAvLock(urk 2 ), TittaPå(urk 2 ), if Färg(ord, c)! Färg(b, c) then Måla(Stol, b) else if Färg(Stol, c)! Färg(b, c) then Måla(ord, b) else [Måla(Stol, urk 1 ), Måla(ord, urk 1 )]]] Omplanerande system Action monitoring! Action monitoring! Säkerställ att precond fortfarande håller! Plan monitoring! Säkerställ att planen fortfarande håller! Goal monitoring! Se efter om det nu finns bättre mål att uppnå! Tolka percept! Ta bort brister i planen! Handla Ex Action(Move(x, y), Precond: lear(x)! lear(y)! On(x,z) Effect: On(x,y)! lear(z)! On(x,z)! lear(y))

Exempel Någon välter, omplanering A On(,) lear(a) lear() On(A, Table) On(, Table) A On(,Table) lear() lear() lear(a) On(A, Table) On(, Table) Move(A,) Move(,) Move(A,) A On(,) On(A,) On(, Table) A On(,) On(A,) On(, Table) Partialordna! Move(A,) ger som effekt On(A,)! lear(a)! On(A,Table)! lear()! lear() är precond för Move(,) Move(,)! Move(A,)