@@ -175,3 +175,38 @@ 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
+
179
+ def three_block_tower ():
180
+ init = [expr ('On(A, Table)' ),
181
+ expr ('On(B, Table)' ),
182
+ expr ('On(C, A)' ),
183
+ expr ('Block(A)' ),
184
+ expr ('Block(B)' ),
185
+ expr ('Block(C)' ),
186
+ expr ('Clear(B)' ),
187
+ expr ('Clear(C)' )]
188
+
189
+ def goal_test (kb ):
190
+ required = [expr ('On(A, B)' ), expr ('On(B, C)' )]
191
+ for q in required :
192
+ if kb .ask (q ) is False :
193
+ return False
194
+ return True
195
+
196
+ ## Actions
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' )]
200
+ precond_neg = []
201
+ effect_add = [expr ('On(b, y)' ), expr ('Clear(x)' )]
202
+ effect_rem = [expr ('On(b, x)' ), expr ('Clear(y)' )]
203
+ move = Action (expr ('Move(b, x, y)' ), [precond_pos , precond_neg ], [effect_add , effect_rem ])
204
+
205
+ # MoveToTable
206
+ precond_pos = [expr ('On(b, x)' ), expr ('Clear(b)' ), expr ('Block(b)' ), expr ('b != x' )]
207
+ precond_neg = []
208
+ effect_add = [expr ('On(b, Table)' ), expr ('Clear(x)' )]
209
+ effect_rem = [expr ('On(b, x)' )]
210
+ moveToTable = Action (expr ('MoveToTable(b, x)' ), [precond_pos , precond_neg ], [effect_add , effect_rem ])
211
+
212
+ return PDLL (init , [move , moveToTable ], goal_test )
0 commit comments