@@ -175,7 +175,7 @@ def goal_test(kb):
175175 leave_overnight = Action (expr ("LeaveOvernight" ), [precond_pos , precond_neg ], [effect_add , effect_rem ])
176176
177177 return PDLL (init , [remove , put_on , leave_overnight ], goal_test )
178-
178+
179179def three_block_tower ():
180180 init = [expr ('On(A, Table)' ),
181181 expr ('On(B, Table)' ),
@@ -195,18 +195,44 @@ def goal_test(kb):
195195
196196 ## Actions
197197 # Move
198- precond_pos = [expr ('On(b, x)' ), expr ('Clear(b)' ), expr ('Clear(y)' ), expr ('Block(b)' ),
199- expr ('Block(y)' ), expr ('b != x' ), expr ('b != y' ), expr ('x != y' )]
198+ precond_pos = [expr ('On(b, x)' ), expr ('Clear(b)' ), expr ('Clear(y)' ), expr ('Block(b)' ), expr ('Block(y)' )]
200199 precond_neg = []
201200 effect_add = [expr ('On(b, y)' ), expr ('Clear(x)' )]
202201 effect_rem = [expr ('On(b, x)' ), expr ('Clear(y)' )]
203202 move = Action (expr ('Move(b, x, y)' ), [precond_pos , precond_neg ], [effect_add , effect_rem ])
204203
205204 # MoveToTable
206- precond_pos = [expr ('On(b, x)' ), expr ('Clear(b)' ), expr ('Block(b)' ), expr ( 'b != x' ) ]
205+ precond_pos = [expr ('On(b, x)' ), expr ('Clear(b)' ), expr ('Block(b)' )]
207206 precond_neg = []
208207 effect_add = [expr ('On(b, Table)' ), expr ('Clear(x)' )]
209208 effect_rem = [expr ('On(b, x)' )]
210209 moveToTable = Action (expr ('MoveToTable(b, x)' ), [precond_pos , precond_neg ], [effect_add , effect_rem ])
211210
212211 return PDLL (init , [move , moveToTable ], goal_test )
212+
213+ def have_cake_and_eat_cake_too ():
214+ init = [expr ('Have(Cake)' )]
215+
216+ def goal_test (kb ):
217+ required = [expr ('Have(Cake)' ), expr ('Eaten(Cake)' )]
218+ for q in required :
219+ if kb .ask (q ) is False :
220+ return False
221+ return True
222+
223+ ##Actions
224+ # Eat cake
225+ precond_pos = [expr ('Have(Cake)' )]
226+ precond_neg = []
227+ effect_add = [expr ('Eaten(Cake)' )]
228+ effect_rem = [expr ('Have(Cake)' )]
229+ eat_cake = Action (expr ('Eat(Cake)' ), [precond_pos , precond_neg ], [effect_add , effect_rem ])
230+
231+ #Bake Cake
232+ precond_pos = []
233+ precond_neg = [expr ('Have(Cake)' )]
234+ effect_add = [expr ('Have(Cake)' )]
235+ effect_rem = []
236+ bake_cake = Action (expr ('Bake(Cake)' ), [precond_pos , precond_neg ], [effect_add , effect_rem ])
237+
238+ return PDLL (init , [eat_cake , bake_cake ], goal_test )
0 commit comments