CPS 270: Artificial Intelligence Planning: Vincent Conitzer
CPS 270: Artificial Intelligence Planning: Vincent Conitzer
CPS 270: Artificial Intelligence Planning: Vincent Conitzer
http://www.cs.duke.edu/courses/fall08/cps270/
Planning
Start2: HasTimeForStudy(You) AND Creative(You) AND Knows(Advisor,AI) AND Knows(Advisor,Math) AND Knows(Advisor,Coding) AND Knows(Advisor,Writing)
(Good luck with that plan)
IsUmbrella(Umbrella) CanBeCarried(Umbrella)
WalkWithoutUm
brella(Home, HandEmpty IsUmbrella(Umbrella)
Work) HandEmpty
WalkWithoutUmbrella(
Home, Umbrella) (!)
Backward state-space search
(regression planning)
Predecessors: for every action that accomplishes one of
the literals (and does not undo another literal), remove
that literal and add all the preconditions
WalkWithUmbrella(
TakeObject(location2, umbr)
location1, Work,
At(location1) At(location1)
umbr)
At(location2) Holding(umbr) At(Work)
IsAt(umbr, location2) IsUmbrella(umbr) Dry
CanBeCarried(umbr) Dry
GOAL
IsUmbrella(umbr)
HandEmpty
WalkWithUmbrella(location2, location1)
Dry
Move(x,y,z)
Preconditions:
On(x,y), Clear(x), Clear(z)
Effects:
On(x,z), Clear(y), NOT(On(x,y)), NOT(Clear(z))
Blocks world: MoveToTable action
B D
A C
MoveToTable(x,y)
Preconditions:
On(x,y), Clear(x)
Effects:
On(x,Table), Clear(y), NOT(On(x,y))
Blocks world example
B D
A C
Goal: On(A,B) AND Clear(A) AND On(C,D)
AND Clear(C)
A plan: MoveToTable(B, A), MoveToTable(D,
C), Move(C, Table, D), Move(A, Table, B)
Really two separate problems
A partial-order plan
B D
Start
A C
MoveToTable( MoveToTable(
Goal: On(A,B) AND B,A) D,C)
Clear(A) AND
On(C,D) AND Move(A, Move(C,
Table, B) Table, D)
Clear(C)
Any total order on the actions consistent with
this partial order will work Finish
A partial-order plan (with more detail)
Start
On(B,A) Clear(B) On(A, Table) On(C, Table) Clear(D) On(D,C)
MoveToTable(B, MoveToTable(D,
A) C)
Move(A,T Move(C,T
able, B) able, D)
Finish
Not everything decomposes into
multiple problems: Sussman Anomaly
C
A B
Goal: On(A,B) AND On(B,C)
Focusing on one of these two individually first
does not work
Optimal plan: MoveToTable(C,A),
Move(B,Table,C), Move(A,Table,B)
An incorrect partial order plan for
the Sussman Anomaly
Start
Clear(C) On(C, A) On(A, Table) On(B, Table) Clear(B)
Clear(C) On(C, A)
Clear(C) On(B, Table) Clear(B)
MoveToTable(C,
A) Move(B,
Table,C)
Clear(A) On(A, Table) Clear(B) Move(B,Table,C) must be
Move(A, after MoveToTable(C,A),
otherwise it will ruin
Table,B)
Clear(C)
Move(A,Table,B) must be
On(A, B) On(B, C) after Move(B,Table,C),
Finish otherwise it will ruin
Clear(B)
Corrected partial order plan for the
Sussman Anomaly
Start
Clear(C) On(C, A) On(A, Table) On(B, Table) Clear(B)
Clear(C) On(C, A)
Clear(C) On(B, Table) Clear(B)
MoveToTable(C,
A) Move(B,
Table, C)
Clear(A) On(A, Table) Clear(B)
Move(A,
Table, B)
No more flexibility in the
order due to protection of
On(A, B) On(B, C) causal links
Finish
Searching for partial-order plans
Somewhat similar to constraint satisfaction
Search state = partially completed partial order plan
Not to be confused with states of the world
Contains actions, ordering constraints on actions, causal links, some open
preconditions
Search works as follows:
Choose one open precondition p,
Consider all actions that achieve p (including ones already in the plan),
For each such action, consider each way of resolving conflicts using ordering
constraints
Why do we need to consider only one open precondition (instead of
all)? Is this true for backward state-space search?
Tricky to resolve conflicts if we leave variables unbound
Searching for a partial-order plan
Start
At(Home) IsAt(Umbrella,Home) CanBeCarried(Umbrella) IsUmbrella(Umbrella) HandEmpty Dry
TakeObject(Home,
Umbrella)
At(Home)Holding(Umbrella) IsUmbrella(Umbrella)
WalkWithUmbrella(H
At(Home) ome, Work
WalkWithoutUmbrella(H
ome, Work
Finish
Planning graphs
On(C, A) On(C, A)
Each level has literals
Move(C,A,B)
that could be true at
On(A, Table) On(A, Table) that level
Clear(C)
Mutex (mutual
Clear(C)
exclusion) relations
MoveToTable(C,A)
indicate incompatible
On(B, Table)
On(B, Table) actions/literals
Clear(B) Clear(B)
Move(B,Table,C) Clear(A) continued on board
On(C, B)
On(C, Table)
On(B, C)
Reasons for mutex relations
between actions:
Inconsistent effects: one action negates effect of
the other
Interference: effect of one action negates
precondition of the other
Competing needs: the actions have preconditions
that are mutex
between literals:
Inconsistent support: any pair of actions that can
achieve these literals is mutex
A problematic case for
planning graphs
FeedWith(x, y)
Preconditions: Edible(y)
Effects: NOT(Edible(y)), Fed(x)
Start: Edible(Bread1), Edible(Bread2)
Goal: Fed(Person1), Fed(Person2),
Fed(Person3)
Planning graph for feeding
Edible(Bread1) Edible(Bread1)
FeedWith(Person1,
Any two of these could
Bread1)
simultaneously be true at
time 1, so no mutex
FeedWith(Person2,
Bread1) relations
Fed(Person1)
Really need 3-way mutex
FeedWith(Person3, relations, but experimentally
Bread1)
Fed(Person2) this is computationally not
worthwhile
FeedWith(Person1,
Bread2)
Fed(Person3)
FeedWith(Person2,
Bread2)
FeedWith(Person3,
Edible(Bread2) Bread2) Edible(Bread2)
Uses of planning graphs
If the goal literals do not all appear at a level (or
have mutex relations) then we know we need
another level
Converse does not hold
Useful heuristic: first time that all goal literals
appear at a level, with no mutex relations
Graphplan algorithm: once all goal literals appear,
try to extract solution from graph
Can use CSP techniques by labeling each action as in
the plan or out of the plan
In case of failure, generate another level