SLIDE 20 77
jonkv@ida
Background 1
State-space planning commits immediately to action order Selects an action that seems “useful” According to heuristics According to relevance, in regression planning Puts it in its final place in the plan Continues from the resulting state (progression)… … Or from the resulting goal (regression) goal putdown(D) unstack(D,F) g1 g2 initial s2 stack(A,C) unstack(A,B) s1
78
jonkv@ida
Background 2: Example
Heuristic forward-chaining might begin as follows: Luckily, the heuristic always selected useful actions Picking up b1 is necessary, driving is necessary, putting b1 down is necessary But we still have a problem! At some time, the robot also has to pick up block b2 The best plan would be to do that right after pickup(b1,A): The robot has two arms Can't insert a new action there in state space search!
put(b1, B) effects: at(b1,B), ¬holding(b1) We want: at(b1,B) at(b2,B) We have: robot-at(A) at(b1,A) at(b2,A) drive(A,B) effects: ¬robot-at(A), robot-at(B) pickup(b1,A) effects: holding(b1), ¬at(b1,A) robot-at(A) holding(b1) at(b2,A) robot-at(B) holding(b1) at(b2,A) robot-at(B) at(b1,B) at(b2,A)
79
jonkv@ida
Background 3: Alternative A
The planner can backtrack, wasting some of its effort,
- r continue from where it is:
put(b1, B) effects: at(b1,B), ¬holding(b1) We want: at(b1,B) at(b2,B) We have: robot-at(A) at(b1,A) at(b2,A) put(b2, B) effects: at(b2,B), ¬holding(b2) drive(A,B) effects: ¬robot-at(A), robot-at(B) pickup(b1,A) effects: holding(b1), ¬at(b1,A) pickup(b2,A) effects: holding(b2), ¬at(b2,A) drive(B,A) effects: ¬robot-at(B), robot-at(A) drive(A,B) effects: ¬robot-at(A), robot-at(B) robot-at(A) holding(b1) at(b2,A) robot-at(B) holding(b1) at(b2,A) robot-at(B) at(b1,B) at(b2,A) robot-at(A) at(b1,B) at(b2,A) robot-at(A) at(b1,B) holding(b2) robot-at(B) at(b1,B) holding(b2) robot-at(B) at(b1,B) at(b2,B) Results in a suboptimal plan! We could have done it in 5 actions.
80
jonkv@ida
Background 4: What We Prefer
We want: at(b1,B) at(b2,B) We have: robot-at(A) at(b1,A) at(b2,A) pickup(b1,A) effects: holding(b1), ¬at(b1,A)
Since the first three actions we found were actually useful for the goal, we would prefer if we could just slide the last ones over…
robot-at(A) holding(b1) at(b2,A) put(b1, B) effects: at(b1,B), ¬holding(b1) drive(A,B) effects: ¬robot-at(A), robot-at(B) robot-at(B) holding(b1) at(b2,A) robot-at(B) at(b1,B) at(b2,A) pickup(b2,A) effects: holding(b2), ¬at(b2,A) robot-at(A) at(b1,B) holding(b2)
…and then insert another pickup action inbetween! This is no longer state-space search! Requires different techniques…