AI Search · Exam notes
One planning comprehension per paper, four sub-questions on one start/goal pair: which actions are applicable? which are relevant? which action pairs are mutex in Layer 1? which proposition pairs are mutex in Layer 1? One chain answers all: test preconditions against the start state, test effects against the goal, then build one planning-graph layer and check producers.
| Predicate | Meaning |
|---|---|
| on(X,Y) | X sits directly on Y |
| onTable(X) | X sits on the table |
| clear(X) | nothing is on X |
| holding(X) | the arm holds X |
| armEmpty | the arm holds nothing |
| Action | Preconditions | Add | Delete |
|---|---|---|---|
| Pickup(X) | onTable(X), clear(X), armEmpty | holding(X) | onTable(X), armEmpty |
| Putdown(X) | holding(X) | onTable(X), armEmpty | holding(X) |
| Unstack(X,Y) | on(X,Y), clear(X), armEmpty | holding(X), clear(Y) | on(X,Y), armEmpty |
| Stack(X,Y) | holding(X), clear(Y) | on(X,Y), armEmpty | holding(X), clear(Y) |
3a. Start and goal, redrawn from the data (solve from this, then check the animation)
Start. Arm: empty.
Goal: on(B,C), on(A,B).
| State | Propositions |
|---|---|
| Start | onTable(A), onTable(B), onTable(C), clear(D), clear(E), clear(C), on(D,A), on(E,B), armEmpty |
| Goal | on(B,C), on(A,B) |
| Layer 1 action | Grounded pre / add / del |
|---|---|
| Unstack(D,A) | pre: armEmpty, clear(D), on(D,A). add: holding(D), clear(A). del: on(D,A), armEmpty. |
| Unstack(E,B) | pre: armEmpty, clear(E), on(E,B). add: holding(E), clear(B). del: on(E,B), armEmpty. |
| Pickup(C) | pre: armEmpty, clear(C), onTable(C). add: holding(C). del: onTable(C), armEmpty. |
| No-ops (9) | Each start proposition persists itself: pre P, add P, no deletes. |
New propositions in Layer 1: clear(A), holding(D), clear(B), holding(E), holding(C). Everything else persists via no-ops.
3b. Walkthrough: test every candidate on chips, one step at a time
Why this step
Tracker
3c. The four questions
Blocks World with one arm, start and goal as above. Candidates: Putdown(D), Unstack(D,A), Unstack(E,B), Pickup(C), Pickup(A), Stack(A,B), Stack(B,C).
3d. Answers first, then the working
Applicable: Unstack(D,A), Unstack(E,B), Pickup(C). Relevant: Stack(A,B), Stack(B,C). Mutex actions: (Unstack(D,A), Pickup(C)), (Unstack(D,A), Unstack(E,B)). Mutex propositions: (clear(A), holding(E)), (clear(A), clear(B)).
| Candidate | Pre check | Applicable? |
|---|---|---|
| Putdown(D) | holding(D) missing (arm is empty) | No |
| Unstack(D,A) | armEmpty, clear(D), on(D,A) all present | Yes |
| Unstack(E,B) | armEmpty, clear(E), on(E,B) all present | Yes |
| Pickup(C) | armEmpty, clear(C), onTable(C) all present | Yes |
| Pickup(A) | clear(A) missing (D sits on A) | No |
| Stack(A,B) | holding(A) missing | No |
| Stack(B,C) | holding(B) missing | No |
| Candidate | add vs goal | del vs goal | Relevant? |
|---|---|---|---|
| Putdown(D) | {armEmpty, onTable(D)} hits nothing | - | No |
| Unstack(D,A) | {holding(D), clear(A)} hits nothing | - | No |
| Unstack(E,B) | {holding(E), clear(B)} hits nothing | - | No |
| Pickup(C) | {holding(C)} hits nothing | - | No |
| Pickup(A) | {holding(A)} hits nothing | - | No |
| Stack(A,B) | adds on(A,B): hits goal | {holding(A), clear(B)} misses goal | Yes |
| Stack(B,C) | adds on(B,C): hits goal | {holding(B), clear(C)} misses goal | Yes |
Solve each with a pen before opening the answer. Each drill is self contained.
Start: onTable(A), onTable(B), clear(A), clear(B), armEmpty. Goal: on(A,B). Q1: which of Pickup(A), Pickup(B), Unstack(A,B), Stack(A,B), Putdown(A) are applicable? Q2: which are relevant?
Why this step
Tracker
Applicable: Pickup(A), Pickup(B). Unstack(A,B) needs on(A,B), absent. Stack(A,B) and Putdown(A) need holding, absent. Relevant: Stack(A,B) only: it adds on(A,B) and deletes neither goal literal. Pickup adds only holding, Unstack adds holding(A) and clear(B), Putdown adds onTable: none hit the goal.
Same start as P1. Layer 1 actions: Pickup(A), Pickup(B), plus no-ops. New props: holding(A), holding(B). Q1: is (Pickup(A), Pickup(B)) mutex? Q2: which of (holding(A), holding(B)), (holding(A), armEmpty), (onTable(A), clear(A)), (clear(A), holding(B)) are mutex in Layer 1?
Why this step
Tracker
Q1: yes, interference: each deletes \(armEmpty\), which the other needs. Q2: (holding(A), holding(B)) mutex (sole producers Pickup(A), Pickup(B) are mutex). (holding(A), armEmpty) mutex (holding(A) only from Pickup(A), which deletes \(armEmpty\) that the persisting no-op needs). (onTable(A), clear(A)): both persist by no-ops only: not mutex. (clear(A), holding(B)): clear(A) by no-op, holding(B) by Pickup(B), and Pickup(B) neither needs nor deletes clear(A): not mutex.