@@ -175,7 +175,7 @@ def goal_test(kb):
175
175
leave_overnight = Action (expr ("LeaveOvernight" ), [precond_pos , precond_neg ], [effect_add , effect_rem ])
176
176
177
177
return PDLL (init , [remove , put_on , leave_overnight ], goal_test )
178
-
178
+
179
179
def three_block_tower ():
180
180
init = [expr ('On(A, Table)' ),
181
181
expr ('On(B, Table)' ),
@@ -195,18 +195,44 @@ def goal_test(kb):
195
195
196
196
## Actions
197
197
# 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)' )]
200
199
precond_neg = []
201
200
effect_add = [expr ('On(b, y)' ), expr ('Clear(x)' )]
202
201
effect_rem = [expr ('On(b, x)' ), expr ('Clear(y)' )]
203
202
move = Action (expr ('Move(b, x, y)' ), [precond_pos , precond_neg ], [effect_add , effect_rem ])
204
203
205
204
# 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)' )]
207
206
precond_neg = []
208
207
effect_add = [expr ('On(b, Table)' ), expr ('Clear(x)' )]
209
208
effect_rem = [expr ('On(b, x)' )]
210
209
moveToTable = Action (expr ('MoveToTable(b, x)' ), [precond_pos , precond_neg ], [effect_add , effect_rem ])
211
210
212
211
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