Planering • Sökning jämfört med planering • STRIPS operatorer • Icke-linjär planering Planering – Bild 1 Sökning jämfört med planering Antag att vi har uppgiften att köpa mjölk, bananer och en borrmaskin Standard sök algoritmer kommer att misslyckas: Eftersom heuristik / måltest inadekvat Planering – Bild 2 Sökning Representation av operatorer: Genererar efterföljare m h a någon funktion t.ex. succersor(NewState, State). Representation av tillstånd: En komplett beskrivning av ett tillstånd är given. För det flesta problem är tillstånd en enkel datastruktur t.ex. i 8-spelet eller var vi befinner oss i Rumänien. Representation av mål: Det enda sökalgoritmen vet om sitt mål ges av måltestfunktionen samt den heuristiskafunktionen. Problem: Heuristiken kan endast välja mellan olika tillstånd och ge oss ett närmare målet; inte eliminera handlingar från att bli undersökta. Den är en ”Black box”. Representation av en lösning: En obruten sekvens av operationer från ett starttillstånd till ett måltillstånd. Problem: Det gör att vi måste bestämma oss för var vi skall gå, innan vi bestämt oss för hur vi skall lösa problemet - köpa, låna, stjäla..- kan vi inte bestämma oss för var vi skall gå. Planering – Bild 3 Sökning jämfört med planering forts. Planeringssystem gör följande för att lösa dessa problem: 1) Genom att öppna upp representationen av tillstånd, mål och handlingar så kommer planeraren att kunna göra direkta kopplingar mellan tillstånd och handlingar. Tex om vi vet att Have(Milk) är inkluderat i vårt mål och att Buy(x) ger Have(x), så vet planeraren att det är bra att ha med Buy(Milk) i sin plan. 2) Tillåta planeraren att addera handlingar till planen när helst det behövs , snarare än att lägga till handlingar inkrementellt från ett start tillstånd. Det finns ingen koppling mellan ordningen som vi lägger till handlingar i planen och när de skall utföras. 3) De flesta problem har delproblem som är oberoende av varandra. Lös därför de oberoende problemen var och ett för sig. Planering – Bild 4 Planering i situations logik Plan_Result(p, s) är situationen som uppstår när vi utför en sekvens av handlingar p ifrån initial situationen s Plan_Result([], s) = s Plan_Result([a|p], s) = Plan_Result(p, Result(a, s)) Initial tillstånd s At(Home, S0) ¬Have(Milk, S0) ¬Have(Bananas, S0) ¬Have(Drill, S0) Handling som Efterföljare Tillstånds axiom a, s Have(Milk, Result(a, s)) [(a = Buy(Milk) At(Supermarket, s) (Have(Milk, s) a != Drop(Milk))] Fråga At(Home, Plan_Result(p, S0) ) Have(Milk, Plan_Result(p, S0) ) Have(Bananas, Plan_Result(p, S0) ) Have(Drill, Plan_Result(p, S0) ) Lösning p = [Go(SM), Buy(Milk), Buy(Bananas), Go(HWS), Buy(Drill), Go(Home)] Planering – Bild 5 Ytterligare Problem... Om vi skulle använda oss av situations logik och teorembevisare så skulle det leda till nya problem. Ineffektivt tex pga av att om planen p når målet så gör även [Inget|p] och [A,A-1|p] där Inget inte förändrar situationen (iaf inte så att vårt mål blir berört) och A-1 inversen av A, dvs s = Result(A-1, Result(A, s)), detta skulle kunna ge upphov till onödiga steg i vår plan. Genom att lägga restriktioner på språket så får vi mindre valmöjligheter och vi får en mindre domän att undersöka Vi använder oss av en icke-linjär planeringsalgoritm istället för en teorembevisare. Planering – Bild 6 STRIPS operatorer Enkla att förstå för människor dock begränsad uttryckskraft Handling: Buy(x) Villkor: At(p), Sells(p, x) Effekt: Have(x) P.g.a. begränsade språket så ger det en effektiv algoritm Villkor: konjunktion av positiva termer Effekter: konjunktion av termer Planering – Bild 7 STRIPS språket Tillstånd representeras som en konjuktion av funktionsfria grundade termer som kan vara negerade. Initialtillståndet vid banan, mjölk, borr problemet: At(Home) ¬Have(Milk) ¬Have(Bananas) ¬Have(Drill) En tillståndbeskrivning behöver inte vara komplett. Frånvaron av en term i ett tillstånd gör att vi betraktar det termen som falsk. Mål får även innehålla variabler: At(x) Sells(x, Milk) Planering – Bild 8 Typer av planerare Progressions planerare : Går från ett starttillstånd till ett måltillstånd. En vanlig sök algoritm fungerar bra. T.ex. breddenförst Problem: Hög branching faktor, får bara en lösning av många Icke-linjär regressions planerare: Går baklänges från ett mål tillstånd till ett start tillstånd. Går bra eftersom vi inte behöver ha kompletta tillstånd. Det finns tillräckligt med information i STRIPS-operatorerna för att gå baklänges. Låg branching faktor (Regression) samt vi får en generell lösning, lösningen motsvaras av en eller flera olika totalt initierade lösningar (Icke linjär) Planering – Bild 9 Tillstånds rymd jmf. Plan rymd Standard sökning: nod = konkret tillstånd i världen Planerings sökning: nod = partiell plan Definition: Öppet villkor är ett villkor som ännu ej blivit uppfyllt Operatorer på icke linjära partiella planer: addera en länk från en existerande handling till ett öppet villkor addera ett steg för att uppfylla ett öppet villkor synkronisera ett steg med ett annat (inga konflikter) Gå från icke kompletta / vaga planer (dvs partiella planer) till kompletta, korrekta planer. Planering – Bild 10 Sockor och sko problemet Op(Handling: RightShoe, Villkor: RightSock, Effekt: RightShoeOn) Op(Handling: RightSock, Effekt: RightSockOn) Op(Handling: LeftShoe, Villkor: LeftSock, Effekt: LeftShoeOn) Op(Handling: LeftSock, Effekt: LeftSockOn) Planering – Bild 11 Initial Plan Plan(Steps: { S1: Op(Handling: Start), S2: Op(Handling: Finish, Villkor: RightShoeOn, LeftShoeOn)} Orderings: {S1 < S2} Links:{} Planering – Bild 12 Sockor och sko problemet forts…. Plan(Steps: { S1: Op(Handling: Start), S2: Op(H: RightShoe, V: RightSockOn, E: RightShoeOn), S3: Op(Handling: Finish, Villkor: RightShoeOn, LeftShoeOn)} Orderings: {S1 < S2 < S3} Links:{S2--RightShoeOn-->S3} Planering – Bild 13 Sockor och skor forts... Plan(Steps: { S1: Op(Handling: Start), S2: Op(Handling: RightSock, E:RightSockOn), S3: Op(H: RightShoe, V: RightSockOn, E: RightShoeOn), S4: Op(Handling: Finish, Villkor: RightShoeOn, LeftShoeOn)} Orderings: {S1 < S2 < S3 < S4} Links:{S2--RightSockOn-->S3, S3--RightShoeOn-->S4} Planering – Bild 14 Sockor och sko problemet forts... Plan(Steps: { S1: Op(Handling: Start), S2: Op(H: RightSock, Effekt: RightSockOn), S3: Op(H: LeftSock, Effekt: LeftSockOn), S4: Op(H: RightShoeOn, P: RightSockOn, E: RightShoeOn), S5: Op(H: LeftShoeOn, P: LeftSockOn, E: LeftShoeOn), S6: Op(Handling: Finish, Villkor: RightShoeOn, LeftShoeOn)} Orderings: {S1 < S2, S3 < S4, S5 < S6} Links:{S3--LeftSockOn-->S5, S5--LeftShoeOn-->S6, S2--RightSockOn-->S4, S4--RightShoeOn-->S6} Planering – Bild 15 Icke linjära planer start LeftShoeOn, RightShoeOn Finish En plan är komplett oom varje villkor är uppfyllt Ett villkor är uppfyllt oom det uppfylls av en effekt i något tidigare steg och inget mellanliggande steg reverserar effekten Planering – Bild 16 Icke-linjär planerare function POP(initial, goal, operators) returns plan plan <- Make-Minimal-Plan(initial, goal) loop do if Solution?(plan) then return plan Sneed, c <- Select-Subgoal(plan) Choose-Operator(plan, operators, Sneed, c) Resolve-Threats(plan) function Select-Subgoal(plan) returns Sneed, c pick a plan step Sneed from Steps(plan) with a precondition c that has not been achived return Sneed, c Planering – Bild 17 Icke-linär planerare forts. Procedure Choose-Operator(plan, operator Sneed, c) choose a step Sadd from operators or Steps(plan) that has c as an effect if there is no such step then fail add the causal link Sadd --c--> Sneed to Links(plan) add the ordering constraint Sadd < Sneed to Orderings(plan) if Sadd is a newly added step from operators then add Sadd to Steps(plan) add Start < Sadd < Finish to orderings(plan) procedure Resolve-Threats(plan) for each Sthreat that threatens a link Si --c--> Sj in Links(plan) do choose either Demotion: Add Sthreat < Si to Orderings(plan) Promotion: Add Sj < Sthreat to Orderings(plan) if not consistent(plan) then fail Planering – Bild 18 Bananer, mjölk och borr Op(Handling: Go(there), Villkor: At(here), Effekt: At(there), ¬At(here)) Op(Handling: Buy(x), Villkor: At(store), Sells(store, x), Effekt: Have(x) Plan(Steps: { S1: Op(H: Start, E: At(Home), Sells(HWS, Drill), Sells(SM, Milk), Sells(SM, Bananas)), S2: Op(Handling: Finish, Villkor: Have(Drill), Have(Milk), Have(Bananas), At(Home)} Orderings: {S1 < S2} Links:{} Planering – Bild 19 Bananer, mjölk och borr... Initial tillståndet: Planering – Bild 20 Bananer, mjölk och borr... Plan(Steps: { S1: Op(H: Start, E: At(Home), Sells(HWS, Drill), Sells(SM, Milk), Sells(SM, Bananas)), S2: Op(H: Buy(Drill), V: At(store), Sells(store, Drill), E: Have(Drill)), S3: Op(H: Buy(Milk), V: At(store), Sells(store, Milk), E: Have(Milk)), S4: Op(H: Buy(Bananas), V: At(store), Sells(store, Bananas), E: Have(Bananas)), S5: Op(Handling: Finish, Villkor: Have(Drill), Have(Milk), Have(Bananas), At(Home)} Orderings: {S1 < S2, S3, S4 < S5} Links:{S2--Have(Drill)-->S5, S3--Have(Milk)-->S5, S4--Have(Bananas)-->S5 } Planering – Bild 21 Bananer, mjölk och borr... Tunna pilar= ordning Tjocka pilar= kausala länkar Planering – Bild 22 Bananer, mjölk och borr... Plan(Steps: { S1: Op(H: Start, E: At(Home), Sells(HWS, Drill), Sells(SM, Milk), Sells(SM, Bananas)), S2: Op(H: Buy(Drill), V: At(HWS), Sells(HWS, Drill), E: Have(Drill)), S3: Op(H: Buy(Milk), V: At(SM), Sells(SM, Milk), E: Have(Milk)), S4: Op(H: Buy(Bananas), V: At(SM), Sells(SM, Bananas), E: Have(Bananas)), S5: Op(Handling: Finish, Villkor: Have(Drill), Have(Milk), Have(Bananas), At(Home)} Orderings: {S1 < S2, S3, S4 < S5} Links:{S1--Sells(HWS, Drill)-->S2, S1--Sells(SM, Milk)-->S3, S1--Sells(SM, Bananas)->S4, S2--Have(Drill)-->S5, S3--Have(Milk)-->S5, S4--Have(Bananas)-->S5 } Planering – Bild 23 Bananer, mjölk och borr... Plan(Steps: { S1: Op(H: Start, E: At(Home), Sells(HWS, Drill), Sells(SM, Milk), Sells(SM, Bananas)), S2: Op(H: Go(HWS), V: At(x), E: At(HWS), ¬At(x)), S3: Op(H: Go(SM), V: At(x), E: At(SM), ¬At(x)), S4: Op(H: Buy(Drill), V: At(HWS), Sells(HWS, Drill), E: Have(Drill)), S5: Op(H: Buy(Milk), V: At(SM), Sells(SM, Milk), E: Have(Milk)), S6: Op(H: Buy(Bananas), V: At(SM), Sells(SM, Bananas), E: Have(Bananas)), S7: Op(Handling: Finish, Villkor: Have(Drill), Have(Milk), Have(Bananas), At(Home)} Orderings: {S1 < S2, S3 < S4, S5, S6 < S7} Links:{S2--Go(HWS)-->S4, S3--Go(SM)-->S5, S3--Go(SM)-->S6), S1--Sells(HWS, Drill)-->S4, S1-Sells(SM, Milk)-->S5, S1--Sells(SM, Bananas)-->S6, S2--Have(Drill)-->S5, S3--Have(Milk)-->S5, S4--Have(Bananas)-->S5 } Planering – Bild 24 Bananer, mjölk och borr... Här har vi nått en återvändsgränd. Planering – Bild 25 Bananer, mjölk och borr... Plan(Steps: { S1: Op(H: Start, E: At(Home), Sells(HWS, Drill), Sells(SM, Milk), Sells(SM, Bananas)), S2: Op(H: Go(HWS), V: At(Home), E: At(HWS), ¬At(Home)), S3: Op(H: Go(SM), V: At(Home), E: At(SM), ¬At(Home)), S4: Op(H: Buy(Drill), V: At(HWS), Sells(HWS, Drill), E: Have(Drill)), S5: Op(H: Buy(Milk), V: At(SM), Sells(SM, Milk), E: Have(Milk)), S6: Op(H: Buy(Bananas), V: At(SM), Sells(SM, Bananas), E: Have(Bananas)), S7: Op(Handling: Finish, Villkor: Have(Drill), Have(Milk), Have(Bananas), At(Home)} Orderings: {S1 < S2, S3 < S4, S5, S6 < S7} Links:{S1--At(Home)-->S2, S1-->At(Home)-->S3, S2--Go(HWS)-->S4, S3--Go(SM)-->S5, S3-Go(SM)-->S6 S1--Sells(HWS, Drill)-->S4, S1--Sells(SM, Milk)-->S5, S1--Sells(SM, Bananas)-->S6, S2--Have(Drill)-->S5, S3--Have(Milk)-->S5, S4--Have(Bananas)-->S5 } Planering – Bild 26 Synkronisering av ordningen Ett mellanliggande steg som förstör (Clobbering) ett villkor i en kausal länk t.ex. Go(Home) förstör för At(HWS): Demotion: lägg före Go(HWS) Promotion: lägg efter Buy(Drill) I vårt fall blir: Orderings: från {S1 < S2, S3 < S4, S5, S6 < S7} till {S1< S2 < S4 < S3 < S5, S6 < S7} Planering – Bild 27 Bananer, mjölk och borr... Det villkoret som hittills inte är uppfyllt är i at(home) Finish steget. Genom att lägga till ett Go(Home) steg så uppnår vi det, men introducerar ett till villkor At(x): 1. Om vi försöker att uppnå At(x) genom att länka x= Home från intitial tillståndet så finns det inget sätt vi kan göra det som inte förstör för Go(HWS) och Go(SM). 2. Om vi försöker att uppnå At(x) genom att länka x = HWS så finns det inget sätt att undvika att förstöra för Go(SM). 3. Om vi försöker att uppnå At(x) genom att länka x = SM så kan vi förstöra för Villkoret för Buy(Milk) och Buy(Bananas), men detta kan lösas genom att vi lägger en ordning så Go(Home) kommer efter dessa steg. Planering – Bild 28 Bananer, mjölk och borr... Planering – Bild 29 Bananer, mjölk och borr... Plan(Steps: { S1: Op(H: Start, E: At(Home), Sells(HWS, Drill), Sells(SM, Milk), Sells(SM, Bananas)), S2: Op(H: Go(HWS), V: At(Home), E: At(HWS), ¬At(Home)), S3: Op(H: Buy(Drill), V: At(HWS), Sells(HWS, Drill), E: Have(Drill)), S4: Op(H: Go(SM), V: At(HWS), E: At(SM), ¬At(HWS)), S5: Op(H: Buy(Milk), V: At(SM), Sells(SM, Milk), E: Have(Milk)), S6: Op(H: Buy(Bananas), V: At(SM), Sells(SM, Bananas), E: Have(Bananas)), S7: Op(H: Go(Home), V: At(SM), E: At(Home), ¬At(SM)), S8: Op(Handling: Finish, Villkor: Have(Drill), Have(Milk), Have(Bananas), At(Home)} Orderings: {S1 < S2 < S3 < S4 < S5, S6 < S7 < S8} Links:{S1--At(Home)-->S2, S2--Go(HWS)-->S3, S2--At(HWS)-->S4, S4--Go(SM)-->S5, S4--Go(SM)-->S6, S4-Go(SM)-->S7, S1--Sells(HWS, Drill)-->S3, S1--Sells(SM, Milk)-->S5, S1--Sells(SM, Bananas)-->S6, S3-Have(Drill)-->S8, S5--Have(Milk)-->S8, S6--Have(Bananas)-->S8, S7--Go(home)-->S8 } Planering – Bild 30 Bananer, mjölk och borr... Slutgiltiga lösningen Planering – Bild 31 Icke-linjär planerare Är komplett : Finns det en lösning så hittar vi den. Kan utökas för att hantera komplexa problem. Möjliga utökningar: Hantering av hierarkiska planer Att kunna hantera resurser, t.ex. tid, pengar. (Icke-linjära) planerare används inom en rad olika områden; allt från planeringen av sammansättningen av Jaguar bilar och hela fabriker produktions planering hos Hitachi till att planera tillverkningen av rymdskepp samt planeringen av rymdfärder. T.ex. Så har Hubble teleskopet två planerare en långtids planerare och en korttidsplanerare. Sedan kan astronomer skicka in förfrågningar där de anger prioritet samt en massa parametrar om vart teleskopet skall riktas, under vilka tider planeterna står som astronomerna vill osv planerarna räknar sedan ut en plan med avseende på indata och tar fram de kommandon som behövs för att utföra de förfrågningar som den fått. Planering – Bild 32