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

Relevanta dokument
729G43 Artificiell intelligens Planering

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

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

Artificiell Intelligens Övningsuppgifter

Artificiell Intelligens Lektion 1

Artificiell Intelligens II Lektion 1

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

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

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

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

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

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

Tentamenskod: Inga hjälpmedel är tillåtna

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

Artificial Intelligence

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

Logik och kontrollstrukturer

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

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

Tommy Färnqvist, IDA, Linköpings universitet

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

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

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

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?

Sätt att skriva ut binärträd

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

TDIU01 - Programmering i C++, grundkurs

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

Grundläggande datalogi - Övning 2

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

Tentamen i. TDDA 69 Data och programstrukturer

Övning2. Variabler. Data typer

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

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

Programmering A. Johan Eliasson

Föreläsning REPETITION & EXTENTA

DD1314 Programmeringsteknik

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

Artificiell Intelligens Lektion 4

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

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

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

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.

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

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

Klassdeklaration. Metoddeklaration. Parameteröverföring

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

Föreläsning 2 Programmeringsteknik och C DD1316

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

Djupstruktur och ytstruktur

Objektorienterad programmering i Java

JavaScript del 3 If, Operatorer och Confirm

Exempel på ett litet Ada-program

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

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

Föreläsning 3-4 Innehåll

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

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

Övning 1 - Abstrakta datatyper

Data, typ, selektion, iteration

Classes och Interfaces, Objects och References, Initialization

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

Parameteröverföring. Exempel. Exempel. Metodkropp

Labb i Datorsystemteknik och programvaruteknik Programmering av kalkylator i Visual Basic

EnKlass. Instans 3 av EnKlass. Instans 2 av EnKlass

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

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

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

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

DD1310/DD1314/DA3009 Programmeringsteknik LÄRANDEMÅL... Vilka läser kursen? ...FLER LÄRANDEMÅL. Föreläsning 1

TDIU01 - Programmering i C++, grundkurs

Imperativ programmering. Föreläsning 2

DD1361 Programmeringsparadigm HT17

Föreläsning 4: Kombinatorisk sökning

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

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

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

Kurslitteraturen. C-nivå Villkorssatser [kap 8] if & elif & else and & or Loopar [kap 9] for

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

Lösningsförslag till tentamen

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

Föreläsning 13 och 14: Binära träd

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

Semantik och pragmatik

Grundläggande logik och modellteori (5DV102)

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

TDDD78, TDDE30, 729A Typhierarkier del 2 Vad krävs? Hur fungerar det?

Programmeringsteknik I

Datastrukturer och algoritmer

Föreläsning 8 Datastrukturer (DAT037)

Inlämningsuppgiften. Föreläsning 9 Innehåll. Träd. Datastrukturer i kursen

SMD 134 Objektorienterad programmering

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

Grundläggande Datalogi

Dagens föreläsning Programmering i Lisp Fö 7. Sammanfattning funktionell programmering Exempel på funktionella programspråk

MicroPython Ett textbaserad programmeringsspråk för Micro:bit

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

Transkript:

Planering' 729G43'Ar*ficiell'intelligens' Planering' Arne'Jönsson' HCS/IDA' ' Sökning'vs'planering' Planeringsnota*oner' Enkel'planering' Par*alordningsplanering' Resursplanering' Hierarkisk'planering' Planering'i'ickeFdeterminis*ska'domäner' Planering'vs'sökning,'1' Sökning' Handlingarna'ger'möjliga'nya'*llstånd' Tillstånden'är'kompleOa,'oPast'enkla' omvärldsbeskrivningar,''*llståndsvektorer' Agenten'kan'testa'om'målet'är'uppnåO'genom'aO' applicera'en'heuris*sk'funk*on,'f,'på'eo'*llstånd,'p,'f(p).' Kan'inte'välja'handling'som'för'närmare'målet'u*från' f(p).' Sökningen'leder'*ll'en'obruten'sekvens'av'handlingar' Planering'vs'sökning,'2' Planering' Använder'en'mer'uOrycksfull'representa*on'som'låter' agenten'resonera'om'*llstånd'och'handlingar' FOPL'kopplar'handlingar'och'*llstå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'*ll'handlingar'när'de'behövs' Arbetar'med'flera'delplaner'sam*digt'

Handlingsrepresenta*on' STRIPSFnota*onen:' Precondi*ons:'villkor'som'måste'vara'uppfyllda'för'aO'u]öra' handlingen' Effect:'effekten'av'aO'u]öra'handlingen.'Delas'ibland'i'en'add' list'och'en'delete'list' Bara'posi*va'predikat'i'*llstånd,'inga'nega*oner' Closed'world'assump*on' Bara'konjunk*oner' Inga'kvan*fierare' Ingen'likhet' Ingen'typning' Inga'situa*onsvariabler' Exempel,'Blocks'world' Predikat: On(x, y) Clear(x) Handling: Move(b, x, y) Precond: On(b, x) Clear(b) Clear(y) Effect: On(b, y) Clear(x) On(b, x) Clear(y) STRIPS hade ADD och DELETE: ADD: On(b, y) Clear(x) DELETE: On(b, x) Clear(y) Exempel' A B C On(A,B) Clear(A) Clear(C) On(B, Table) On(C, Table) STRIPS' Effek*v'men'begränsad' Tar'bort'predikat,'DELETEFlist,'dvs'ickeFmonoton' Move(A, B, C) Precond: On(A, B) Clear(A) Clear(C) ADD: On(A, C) Clear(B) DELETE: Clear(C) On(A, B) A B C On(A,C) Clear(A) Clear(B) On(B, Table) On(C, Table)

ADL' 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 : Block Planeringsalgoritmer' Generera'en'sekvens'av'handlingar'från'start'*ll'mål' Framåtsökning' Bakåtsökning' STRIPS' STRIPSFoperatorer' Exempel' Stack(x, y) P: Clear(y) Holdning(x) D: Clear(y) Holdning(x) A: ArmEmpty On(x, y) UnStack(x, y) P: On(x,y) Clear(x) ArmEmpty D: On(x, y) ArmEmpty A: Holdning(x) Clear(y) PickUp(x) P: Clear(x) OnTable(x) ArmEmpty D: OnTable(x) ArmEmpty A: Holdning(x) PutDown(x) P: Holdning(x) D: Holdning(x) A: OnTable(x) ArmEmpty Start B C A On(B, C) Clear(A) Clear(B) OnTable(A) OnTable(C) ArmEmpty Uppfyllt A Mål B C On(B, C) On(A, B) OnTable(C) ArmEmpty Leta efter operatorer som har On(x, y) på sin ADD-list, dvs Stack(A, B) Precond: Clear(B), Holding(A) Leta efter operator som har Holding(x) på ADD-list: PickUp eller UnStack Välj PickUp(A). Precond: ArmEmpty, Clear(A), OnTable(A) uppfyllt

Start NyO'exempel' Mål C A A B C On(A, B) On(B, C) OnTable(C) ArmEmpty B On(C, A) Clear(C) Clear(B) OnTable(A) OnTable(B) ArmEmpty Börja med ett mål, t.ex. On(A, B), ger UnStack(C, A), PutDown(C), PickUp(A), Stack(A, B) Ta sen nästa mål On(B, C). Ger UnStack(A, B), PutDown(A), PickUp(B), Stack(B, C) Nu är inte On(A, B) uppfyllt så PickUp(A), Stack(A, B) Par*alordningsplanering' Problemet'beror'på'aO'STRIPS'arbetar'med'eO'mål'i'taget' Vill'kunna'avbryta'uppfyllandet'av'eO'mål'och'påbörja' nästa'och'sen'fortsäoa'med'det'första'igen' Uppnå'On(A,'B)' 'UnStack(C,'A),'PutDown(C)' FortsäO'med'On(B,'C)' 'PickUp(B),'Stack(B,'C)' Återuppta'On(A,'B)' 'PickUp(A),'Stack(A,'B)' Par*alordningplanerare'skapar'par*ellt'ordnade' delplaner'enligt'least'commitment'strategy,'dvs'faoa'så'få' beslut'som'möjligt' Ännu inte uppfyllt men först partialordnas delplanerna Clear(A) OnTable(A) ArmEmpty PickUp(A) Holding(A) ArmEmpty OnTable(A) Clear(B) Holding(A) Stack(A,B) ArmEmpty ON(A,B) Clear(B) Holdning(A) START OnTable(A) OnTable(B) ON(C,A) ArmEmpty Clear(C) Clear(B) Clear(B) OnTable(B) ArmEmpty PickUp(B) Holding(B) ArmEmpty OnTable(B) Clear(C) Holding(B) Stack(B,C) ArmEmpty On(B,C) Clear(C) Holdning(B) On(A,B) On(B,C) OnTable(C) {x/a} On(C,A) Clear(C) ArmEmpty UnStack(C,A) Holding(C) Clear(A) ArmEmpty On(C,A) Holding(C) PutDown(C) ArmEmpty OnTable(C) Holdning(C) Partialordna, 1 Operatorer som lagts till för att uppnå delmål partialordnas PickUp(A) Stack(A,B) PickUp(B) Stack(B,C) UnStack(C,A) PutDown(C) Vid konflikt ordnas operatorer så att konflikten undviks Stack(A,B) är i konflikt med PickUp(B) eftersom Stack tar bort Clear(B) Stack(B,C) är pss i konflikt med UnStack(C,A) Partialordna: PickUp(B) Stack(A,B) UnStack(C, A) Stack(B,C) MÅL

Partialordna, 2 Finns det ytterligare ordning mellan de partiellt ordnade planerna? PickUp(A) Stack(A,B) PickUp(B) Stack(B,C) UnStack(C, A) PutDown(C) PickUp(B) Stack(A,B) UnStack(C, A) Stack(B,C) PickUp(B) (och därmed också Stack(B,C)) före Stack(A,B) och UnStack(C,A) före Stack(B,C) UnStack(C,A) PutDown(C) PickUp(B) Stack(B,C) PickUp(A) Stack(A,B) START OnTable(A) OnTable(B) ON(C,A) ArmEmpty Clear(C) Clear(B) On(C,A) Clear(C) ArmEmpty UnStack(C,A) Holding(C) Clear(A) ArmEmpty On(C,A) Holding(C) PutDown(C) ArmEmpty OnTable(C) Holdning(C) Clear(B) OnTable(B) ArmEmpty PickUp(B) Holding(B) ArmEmpty OnTable(B) Clear(C) Holding(B) Stack(B,C) ArmEmpty On(B,C) Clear(C) Holdning(B) Clear(A) OnTable(A) ArmEmpty PickUp(A) Holding(A) ArmEmpty OnTable(A) Clear(B) Holding(A) Stack(A,B) ArmEmpty ON(A,B) Clear(B) Holdning(A) On(A,B) On(B,C) OnTable(C) MÅL Alla preconditions uppfyllda så planeraren är klar Planeringsgraf Graf med en sekvens av nivåer som svarar mot temporala steg i planen. Bara för propositioner, dvs inga variabler i tillstånden Representerar handlingar och icke-handlingar Ex S 0 A 0 S 1 Have(Cake) Eaten(Cake) Eat(Cake) Have(Cake) Have(Cake) Eaten(Cake) Eaten(Cake) Ömsesidigt uteslutande relationer 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 Mutexlänk

Planering' 'GraphPlan' 1. Skapa'en'planeringsgraf'med'djup'k' 2. Om'det'finns'en'lösning'returnera'den' 3. I'annat'fall'öka'djupet'med'1'och'gå'*ll'1.' Det'finns'en'lösning'om:' Alla'fakta'i'målet'finns'på'djup'k'och'inte'är'mutex' Om'det'för'alla'delmål'på'djup'kF1,'kF2,' 1'' finns'en'handling'som'inte'är'mutex'med'någon'annan' handling' Planen'är'en'linjärisering'av'eventuella'parallella'' handlingar' GraphPlan 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)) CWA 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) Remove(Spare,Trunk) At(Spare,Trunk) At(Spare,Trunk) Remove(Spare,Trunk) At(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), Effect: HjulOn(h) Duration(d)) Start AddMotor1 40 AddMotor2 30 AddHjul1 20 AddHjul2 15 Inspektera1 10 Inspektera2 10 Mål Action(Inspektera(v), Precond : MotorOn(v) HjulOn(v) Vinge(v), Effect: Klar(v) Duration(10))

Resursplanering 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 Exempel 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 20 10 Mål [0,15] AddMotor2 30 [40,40] AddHjul1 [30,45] AddHjul2 15 [60,60] Inspektera1 [45,60] Inspektera2 10 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 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 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)) Planer för delade resurser AddMotor 1 Hjul 1 Hjul 2 AddMotor 2 K 1 Hjul 2 AddMotor 2 K 2 AddMotor 1 Hjul 1 K 2 K 1 Minst slack Hierarkisk planering 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 Hierarkisk planering (HTN) 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 Bygga och utvärdera expanderad Bygga flygplan Expandera Sätta in säten Fixa utvecklingspengar pengar Underleverantörer Designa flygplanet ritning Bygga och utvärdera ritning Bygga flygplanskropp Bygga motor fpk Bygga cockpit Sätta samman vingar fpk+ vingar Sätta samman flygplan Utvärdera Kritisera Alla externa effekter måste ordnas För den abstrakta operatorn Bygga 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 Sätta samman vingar expanderad hjul plåt motor vingar Bygga vingar Montera hjul & motor Expanderas Till primitiva operatorer Effekterna förfinas: Underleveratör hjul Bygga och utvärdera förfinas till Underleveratör hjul Montera hjul & motor Bygga motor motor Sätta samman vingar förfinas till Bygga motor motor Montera hjul & motor

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 Måla stol och bord i samma färg. Init(Objekt(Bord) Objekt(Stol) Burk(B 1 ) Burk(B 2 ) ISynfältet(Bord)) Mål(Färg(Stol, c) Färg(Bord, c)) Action(TaAvLock(b), Precond: Burk(b) Effect: Öppen(b)) Action(Måla(x, b), Precond: Burk(b) Objekt(x) Färg(b, f) Öppen(b) Effect: Färg(x, f)) Exempel, 2 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: Burk(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 Ser inget och kan därmed bara måla både bord och stol i en av de två färgerna. Inga varseblivningsschema Init(Objekt(Bord) Objekt(Stol) Burk(B 1 ) Burk(B 2 )) Vet också att objekt kan ha en färg x y Färg(x, y) vilket efter Skolemisering ger Färg(x, C(x)) Sensorlös planering, 2 Applicera handlingen: Action(TaAvLock(b), Precond: Burk(b), Effect: Öppen(b)) med {b/burk 1 } ger: Objekt(Bord) Objekt(Stol) Burk(B 1 ) Burk(B 2 ) Öppen(B 1 ) Färg(x, C(x)) Med {x/b 1 och f/c(b 1 )} kan vi applicera handlingen: Action(Måla(x, b), Precond: Burk(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, B 1 ), Precond: Burk(B 1 ) Objekt(Stol) Färg(B 1, C(B 1 )) Öppen(B 1 ) Effect: Färg(Stol, C(B 1 )) Sensorlös planering, 3 Samma handling på Bord ger: Färg(Bord, C(B 1 )) och måltillståndet: Färg(Stol, C(B 1 )) Färg(Bord, C(B 1 )) Villkorlig planering Skapa'en'plan'som'inspekterar'världen'och'handlar'därePer' ' [TiOaPå(Bord),'TiOaPå(Stol),' 'if#färg(bord,'c)' Färg(Stol,'c)'then'NoOp' ' 'else'[taavlock(burk 1 ),'TiOaPå(Burk 1 ),'TaAvLock(Burk 2 ),'TiOaPå(Burk 2 ),' ' ' 'if'färg(bord,'c)' Färg(b,'c)'then'Måla(Stol,'b)' ' ' 'else#if#färg(stol,'c)' Färg(b,'c)'then'Måla(Bord,'b)' ' ' 'else '[Måla(Stol,'Burk 1 ),'Måla(Bord,'Burk 1 )]]]'

Omplanerande system 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å Action monitoring Tolka percept Ta bort brister i planen Handla Ex Action(Move(x, y), Precond: Clear(x) Clear(y) On(x,z) Effect: On(x,y) Clear(z) On(x,z) Clear(y)) Exempel B C A On(B,C) Clear(A) Clear(B) On(A, Table) On(C, Table) Någon välter B, omplanering B C A On(B,Table) Clear(C) Clear(B) Clear(A) On(A, Table) On(C, Table) Move(A,B) Move(B,C) Move(A,B) A B C On(B,C) On(A,B) On(C, Table) A B C On(B,C) On(A,B) On(C, Table)

Partialordna Move(A,B) ger som effekt On(A,B) Clear(A) On(A,Table) Clear(B) Clear(B) är precond för Move(B,C) Move(B,C) Move(A,B)