729G43 Artificiell intelligens Planering Arne Jönsson HCS/IDA Planering Sökning vs planering Planeringsnotationer Enkel planering Partialordningsplanering Resursplanering Hierarkisk planering Planering i icke-deterministiska domäner Linköpings universitet 1
Planering vs sökning, 1 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 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 Linköpings universitet 2
Handlingsrepresentation 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 Bara positiva predikat i tillstånd, inga negationer Closed world assumption Bara konjunktioner Inga kvantifierare Ingen likhet Ingen typning Inga situationsvariabler 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) Linköpings universitet 3
Exempel A B C On(A,B) Clear(A) Clear(C) On(B, Table) On(C, Table) 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) STRIPS Effektiv men begränsad Tar bort predikat, DELETE-list, dvs icke-monoton Linköpings universitet 4
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 till mål Framåtsökning Bakåtsökning STRIPS Linköpings universitet 5
STRIPS-operatorer 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 Exempel 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 Linköpings universitet 6
Nytt exempel Start C A B On(C, A) Clear(C) Clear(B) OnTable(A) OnTable(B) ArmEmpty A Mål B C On(A, B) On(B, C) OnTable(C) 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) Partialordningsplanering 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, B) UnStack(C, A), PutDown(C) Fortsätt med On(B, C) PickUp(B), Stack(B, C) Återuppta On(A, B) PickUp(A), Stack(A, B) Partialordningplanerare skapar partiellt ordnade delplaner enligt least commitment strategy, dvs fatta så få beslut som möjligt Linköpings universitet 7
Ännu inte uppfyllt men först partialordnas delplanerna START OnTable(A) OnTable(B) ON(C,A) ArmEmpty Clear(C) Clear(B) Clear(A) OnTable(A) ArmEmpty PickUp(A) Holding(A) ArmEmpty OnTable(A) Clear(B) OnTable(B) ArmEmpty PickUp(B) Holding(B) ArmEmpty OnTable(B) {x/a} On(C,A) Clear(C) ArmEmpty UnStack(C,A) Holding(C) Clear(A) ArmEmpty On(C,A) Clear(B) Holding(A) Stack(A,B) ArmEmpty ON(A,B) Clear(B) Holdning(A) Clear(C) Holding(B) Stack(B,C) ArmEmpty On(B,C) Clear(C) Holdning(B) Holding(C) PutDown(C) ArmEmpty OnTable(C) Holdning(C) On(A,B) On(B,C) OnTable(C) MÅL 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) Linköpings universitet 8
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 Linköpings universitet 9
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) Mutexlänk Ö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 Linköpings universitet 10
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å till 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 k-1, k-2, 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) Linköpings universitet 11
Punkteringsexemplet 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)) S 0 A 0 S 1 At(Spare,Trunk) At(Spare,Trunk) Remove(Spare,Trunk) At(Spare,Trunk) At(Flat,Axle) At(Spare,Axle) Remove(Flat,Axle) LeaveOvernight At(Flat,Axle) At(Flat,Axle) At(Spare,Axle) CWA At(Flat,Ground) At(Spare,Ground) At(Flat.Ground) At(Flat,Ground) At(Spare,Ground) At(Spare,Ground) Linköpings universitet 12
S 0 A 0 S 1 A 1 S 2 At(Spare,Trunk) At(Spare,Trunk) At(Spare,Trunk) Remove(Spare,Trunk) At(Spare,Trunk) Remove(Spare,Trunk) At(Spare,Trunk) Remove(Flat,Axle) Remove(Flat,Axle) At(Flat,Axle) LeaveOvernight At(Spare,Axle) At(Flat,Ground) At(Spare,Ground) At(Flat,Axle) At(Flat,Axle) LeaveOvernight At(Spare,Axle) PutOn(Spare,Axle) At(Flat.Ground) At(Flat,Ground) At(Spare,Ground) At(Spare,Ground) At(Flat,Axle) At(Flat,Axle) At(Spare,Axle) At(Spare,Axle) At(Flat.Ground) At(Flat,Ground) At(Spare,Ground) At(Spare,Ground) Avancerad planering Resursplanering Handlingar tar en viss tid att utföras Planhierarkier Abstrakta operatorer som håller steg i planen som i sig implementerar operatorn Expanderas till dess att planen bara innehåller primitiva operatorer Planering i icke-deterministiska domäner 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 Linköpings universitet 13