Classical Planning: Exploring the Boundaries

Classical Planning: Exploring the Boundaries [email protected] – 2016 Modeling in PDDL vs. Modeling in the State Transition System What can ...
Author: Kerry May
4 downloads 0 Views 3MB Size
Classical Planning: Exploring the Boundaries

[email protected] – 2016

Modeling in PDDL vs. Modeling in the State Transition System

What can be modeled at all vs. What can be modeled conveniently, efficiently



What is a "statement"? Integer An actual number, a member of ℤ

3 "Integer Statements" A way of describing a number using a specific language "10" chars "1" "0" "X" "0x0A" "p#c" [in some made-up language] …

jonkv@ida

Preliminaries



What is a "statement"? Planning Problem

The actual structure: A state transition system, an initial state, a set of goal states

s0 s2

s1 s3 s5

s4 s6

s7

s8

4 Problem Statement

A way of describing the problem Many problem statements correspond to the same problem – Could list all states, actions, transitions – Could use PDDL: (:action MOVE :parameters (?disk ?source ?dest) …) … – General Problem Solver language –…

jonkv@ida

Preliminaries (2)

5

Real World

The "real domain"

A way of writing it down Abstraction Approximation

State Trans Syst Σ = (S,A,γ)

Equivalence

First-order language L defined by predicates, objects Operators O

States need no internal structure

States are sets of atoms, induced by the predicates and objects in L

Actions are unstructured symbols

Operators are structured, have preconditions and effects

State transitions are unstructured (γ specified by state / action symbols)

Each operator specifies part of γ, through its preconds and effects

jonkv@ida

Problems vs. Problem Statements 1

6

Real World + current problem

The "real problem"

A way of writing it down Abstraction Approximation

Planning Problem P = (Σ, s0, Sg)

Equivalence

Language L defined by predicates, objects Problem Statement in L P=(O,s0,g)

Specifies the ID of the initial state: s0

Specifies the true atoms in the init state: { attached(p1,loc1), in(c1,p1), … }

Specifies a set of possible goal states: Sg = { s0, s1, s2, s20, s21, s22, s4912, … }

Specifies a set of literals that must hold: g = { in(c1,p2), in(c2,p2) , … }

jonkv@ida

Problems vs. Problem Statements 2

7

Real World + current problem Language L defined by predicates, objects Planning Problem P = (Σ, s0, Sg)

Problem Statement P=(O,s0,g)

Limits what can be modeled

Limits what is easy to express

Some extensions require changing the STS

Many extensions can easily be translated into the same STS structure Can still be called classical planning, since no STS changes are required

Planners use the language, not the STS: An extension changing the STS may be easily handled (action costs) or hard (probabilities), one that leaves the STS unchanged may be easy or hard…

jonkv@ida

Boundaries: Of what?



Let's model a "drive" operator for a truck  ”Natural” parameters: The truck and the destination ▪ (:action drive :parameters (?t – truck ?dest – location) :precondition … :effect … )  ”Natural” precondition: ▪ There must exist a path between the current location and the destination ▪ Should use the predicate (path-between ?loc1 ?loc2 – location)  How? ▪ (:precondition (path-between …something… ?dest)) ??? ▪ In a first-order predicate representation, we can only test whether a truck is at some specific location: (at ?t ?location)

9

jonkv@ida

Properties of Objects

10

jonkv@ida

Alternative Representations Three wide classes of logic-based representations (general classes, containing many languages!) Propositional (boolean propositions)

First-order (boolean predicates)

State-variable-based (non-boolean functions)

atHome, atWork

at(truck, location)

loc(truck) = location

PDDL :strips (if you avoid objects)

PDDL :strips, …

Read chapter 2 of the book for another perspective on representations…



11

Classical planning with classical representation  A state defines the values of logical atoms (boolean) ▪ adjacent(location, location) – can you go directly from one loc to another? ▪ loaded(robot, container) – is the robot loaded with the given container?

May be wasteful: Can represent a container being on many robots, which never happens

c3 c1 Can be convenient, space-efficient  often used internally!



p1

loc2

c2 p2

loc1

r1 Seems more powerful, but is equivalent!

Alternative: Classical with state-variable representation  A state defines the values of arbitrary state variables ▪ boolean adjacent(location, location) ;; still boolean! ▪ container carriedby(robot) ;; which container is on the robot?

jonkv@ida

Classical and State-Var Representation



Back to the "drive" operator…  ”Natural” parameters: The truck and the destination ▪ (:action drive :parameters (?t – truck ?dest – location) :precondition … :effect … )  ”Natural” precondition: ▪ There must exist a path between the current location and the destination ▪ Should use the predicate (path-between ?loc1 ?loc2 – location) ▪ State variable representation  can express the location of the truck: (:precondition (path-between (location-of ?t) ?dest)) ▪ No STS extensions are required!

12

jonkv@ida

Property Values 1



To avoid using state variables:  Add a parameter to the operator ▪ (:action drive :parameters (?t – truck ?from – location ?dest – location) :precondition … :effect … )  Constrain that variable in the precondition ▪ :precondition (and (at ?t ?from) (path-between ?from ?dest)) ▪ Can only apply those instances of the operator where ?from is the current location of the truck

13

jonkv@ida

Property Values 2



Example:  Initially: ▪ (at truck5 home)

14 These parameters are "extraneous" in the sense that they do not add choice: We can choose truck and dest (given some constraints): from is uniquely determined by state + other params!

 Action: ▪ (:action drive :parameters (?t – truck ?from – location ?dest – location) :precondition (and (at ?t ?from) (path-between ?from ?dest)) :effect … )  Which actions are executable? ▪ (drive truck5 work home) – no, precond false ▪ (drive truck5 work work) – no, precond false ▪ (drive truck5 work store) – no, precond false ▪ (drive truck5 home store) – precond true, can be applied!

With quantification, we could have changed the precondition: (exists (?from – location) (and (at ?t ?from) (path-between ?from ?dest)) No need for a new parameter – in this case…

jonkv@ida

Property Values 3



15

What about effects?  Same ”natural” parameters: The truck and the destination ▪ (:action drive :parameters (?t – truck ?dest – location) :precondition … :effect … )  ”Natural” effects: ▪ The truck ends up at the destination: ▪ The truck is no longer where it started:

(at ?t ?dest) (not (at ?t …???... ))

 How do you find out where the truck was before the action? ▪ Using an additional parameter still works: (not (at ?t ?from)) ▪ The value of ?from is constrained in the precondition – before ▪ The value is used in the effect state

jonkv@ida

Property Values 4



17

We often need at least some ”primitive” support for numbers  Elevator domain: ▪ Which floor is an elevator at? ▪ Which is the next floor? ▪ Which is the previous floor?

jonkv@ida

Numbers 1



18

jonkv@ida

Numbers 2 PDDL 2.1 supports numeric fluents  (define (domain jug-pouring)

(:requirements :typing :fluents) (:types jug) (:functions (amount ?j - jug) (capacity ?j - jug)) (:action pour :parameters (?jug1 ?jug2 - jug) :precondition (>= (- (capacity ?jug2) (amount ?jug2)) (amount ?jug1)) :effect (and Change the value: (assign (amount ?jug1) 0) Absolute or (increase (amount ?jug2) (amount ?jug1))) relative to old value ) Easily supported by the formal STS, if you have a finite set of numbers (even 64-bit floating point is finite!) Unsupported in many planners due to constrained heuristics etc.



19

If there is no explicit support:  Create a type of ”pseudo-numbers” ▪ (:types … num …)  Define a set of value objects ▪ (:objects … n0 n1 n2 n3 n4 n5 n6 n7 – num)  Define the operations you need – for example, find the next number ▪ (:predicates … (next ?numA ?numB – num) ▪ (:init … (next n0 n1) (next n1 n2) (next n2 n3) … (next n6 n7))  Use the value objects as if they were numbers These are also ▪ (:action move-up "extraneous" parameters… :parameters (?e – elevator ?from ?to – num) :precondition (and (at ?elevator ?from) ;; Where is the elevator? (next ?from ?to) …) ;; Now ”to” is the next number :effects (and (not (at ?elevator ?from)) (at ?elevator ?to))) There is no ”next” for n7  Won’t be able to move up from the top floor (an "implicitly modeled" precondition)

jonkv@ida

Numbers 3



21

Suppose we have a number of ground robots

r1

 Can drive between ?from and ?to if there is a road,

or the robot has all-wheel-drive

r2 r3

 Disjunctive representation: ▪ (:requirements :disjunctive-preconditions …) (:action drive :parameters (?r - robot ?from ?to - location) :precondition (and (or (road-between ?from ?to) (all-wheel-drive ?r)) (at ?r ?from)) :effect (and (at ?r ?to) (not (at ?r ?from)) ))  The precondition no longer corresponds to a set of literals that must hold! ▪ Outside the book's classical representation… ▪ But can be modeled as an STS – only affects where edges go

jonkv@ida

Disjunctive Preconditions



Disjunctive preconditions:  Convenient  Easily supported by the formal model ▪ Simply an easier way of specifying the state transition function  Not always supported by planners ▪ Some algorithms are very efficient, but cannot handle disjunctions ▪ Some heuristics are very informative, but cannot handle disjunctions ▪ … ▪ Tradeoff between convenience and efficiency!

22

jonkv@ida

Disjunctive Preconditions (2)



23

Workaround 1: Rewrite the disjunction using two distinct operators

r1 r2

r3 ▪ (:action drive-on-road :parameters (?r - robot ?from ?to - location) :precondition (and (road-between ?from ?to) (at ?r ?from)) :effect (and (at ?r ?to) (not (at ?r ?from)) )) ▪ (:action drive-all-wheel-drive :parameters (?r - robot ?from ?to - location) :precondition (and (all-wheel-drive ?r) (not (road-between ?from ?to) (at ?r ?from)) :effect (and (at ?r ?to) (not (at ?r ?from)) )) Why should we have this?  Any problems?

What about the condition (a ∨ b ∨ c ∨ d) ∧ (e ∨ f ∨ g ∨ h)?

jonkv@ida

Disjunctive Preconditions (3)



Workaround 2: use a different domain formulation  Add a predicate: (can-drive-between ?robot ?from ?to) ▪ Specify its value explicitly in the initial state ▪ Redundant – but planners can use it efficiently!



Planners could:  Directly and efficiently support disjunctions ▪ Possible for some algorithms, some heuristics  Automatically rewrite into multiple operators ▪ Could lead to inefficient planning, without any indication of which constructs are inefficient  Disallow disjunctions ▪ Encourages writing another domain model – might be more efficient ▪ Can still use external rewriting tools

24

jonkv@ida

Disjunctive Preconditions (4)



Quantifiers in preconditions can be convenient  To drive a car, all doors must be closed ▪ (:requirements :universal-preconditions) (:action drive (:parameters ?car – car ?from ?to – location) (:precondition (forall (?door – door) (implies (belongs ?door ?car) (closed ?door)))))  Can be transformed to a conjunction by expanding the quantifier ▪ Suppose we have 4 doors: { d1, d2, d3, d4 } ▪ (:precondition (and (implies (belongs d1 ?car) (closed d1)) (implies (belongs d2 ?car) (closed d2)) (implies (belongs d3 ?car) (closed d3)) (implies (belongs d4 ?car) (closed d4)))) ▪ Must know which doors we have (instance-specific!) ▪ Suppose we have 100 cars, 400 doors…

26

jonkv@ida

Quantified Preconditions



Existential quantifiers are also convenient  To drive a car, I must have some matching key ▪ (:requirements :existential-preconditions) (:action drive (:parameters ?c – car ?from ?to – location) (:precondition (exists (?k – key) (and (have ?k) (matches ?k ?c)))))  Can be transformed to a disjunction by expanding the quantifier ▪ Suppose we have 4 keys: { k1, k2, k3, k4 } ▪ (:precondition (or (and (have k1) (matches k1 ?c)) (and (have k2) (matches k2 ?c)) (and (have k3) (matches k3 ?c)) (and (have k4) (matches k4 ?c)))) ▪ Could then transform this disjunction into multiple operators… ▪ Again, the domain can be modeled differently: (have-key-matching ?c)

27

jonkv@ida

Quantified Preconditions (2)



Alternative workarounds exist

28 c2

loc2

c3 p2  Introduce redundant predicates c1 r1 loc1 p1 ▪ Dock Worker Robots: (:predicates (at ?r - robot ?l - location) ; robot ?r is at location ?l ?l - location) ; there is a robot at location ?l (occupied …) ▪ Where (occupied ?loc) is the same as (exists (?r – robot) (at ?r ?loc))! Corresponds to (not (exists (?r2 – robot)) (at ?r2 ?to))

 Update redundant predicates when necessary ▪ (:action move :parameters (?r - robot ?from ?to - location) :precondition (and (adjacent ?from ?to) (at ?r ?from) (not (occupied ?to)) ) :effect (and (not (at ?r ?from)) (at ?r ?to) (not (occupied ?from)) (occupied ?to) ))

jonkv@ida

Quantified Preconditions (3)



Wumpus World:  Can move between two squares  Move into a pit  you die

▪ (:action move :parameters (?who – agent ?from – square ?to – square) :precondition (and (alive ?who) (at ?who ?from) (adjacent ?from ?to)) :effect (and (not (at ?who ?from)) (at ?who ?to) (when (or (pit ?to) (has-living-wumpus ?to)) (not (alive ?who))) ) Again, fits the same STS structure: Simply a more convenient way of specifying the transition function

30

jonkv@ida

Quantified Effects (1)



31

To remove conditional effects:  Convert to multiple actions ▪ (:action move-stay-alive :parameters (?who – agent ?from – square ?to – square) :precondition (and (alive ?who) (at ?who ?from) (adjacent ?from ?to) (not (pit ?to)) (not (has-living-wumpus ?to))) :effect (and (not (at ?who ?from)) (at ?who ?to) )) ▪ (:action move-and-die :parameters (?who – agent ?from – square ?to – square) :precondition (and (alive ?who) (at ?who ?from) (adjacent ?from ?to) (or (pit ?to) (has-living-wumpus ?to)) :effect (and Once more, a potential combinatorial (not (at ?who ?from)) explosion in the number of actions (at ?who ?to) (not (alive ?who)) If the planner can handle conditional )) effects: Probably more efficient!

jonkv@ida

Quantified Effects (2)



33 (and (at truck1 locA) (in pkg1 truck1) … (in pkg4 truck1) (at pkg1 locA) (at pkg2 locA) (at pkg3 locA) (at pkg4 locA))

▪ (:action drive-truck :parameters (?truck - truck ?loc-from ?loc-to – location ?city - city) :precondition (and (at ?truck ?loc-from) (in-city ?loc-from ?city) (in-city ?loc-to ?city)) :effect (and (at ?truck ?loc-to) (not (at ?truck ?loc-from)))) All packages in the truck should move Unknown how many  can't be parameters!

jonkv@ida

Motivation



34

If you drive a truck, all items in the truck should follow it  Example: ▪ (:requirements :universal-preconditions :conditional-effects …) (:action drive-truck :parameters (?truck - truck ?loc-from ?loc-to – location ?city - city) :precondition (and (at ?truck ?loc-from) (in-city ?loc-from ?city) (in-city ?loc-to ?city)) :effect (and (at ?truck ?loc-to) (not (at ?truck ?loc-from)) (forall (?x - obj) (when (in ?x ?truck) (and (not (at ?x ?loc-from)) (at ?x ?loc-to))))))  In this model, if an object is initially at locationA: ▪ (at ?obj locationA) remains true when the object is loaded into the truck ▪ (at ?obj locationA) becomes false only when the truck drives away

jonkv@ida

Universal and Conditional Effects



35

If a planner does not support this:  Quantifiers can be expanded for a specific problem instance, as before ▪ (forall (?x – obj) …)  (and (when (in packageA ?truck) (…)) (when (in packageB ?truck) (…)) … (when (in packageX ?truck) (…))

 Conditional effects can be expanded into multiple operators ▪ One with precond (and … (in packageA truck) (in packageB truck) …) ▪ One with precond (and … (not (in packageA truck)) (in packageB truck) …), and so on

Works – but can be inefficient!

jonkv@ida

Universal and Conditional Effects (2)



36

Sometimes you can use different domain models  Alternative: A package in a truck is not at any location at all! ▪ (at ?obj ?location) removed by load-package action, before driving ▪ (in ?obj ?truck) added instead  Driving a truck only moves the truck ▪ Packages are still in the same truck, at no location at all ▪ No need for quantified conditional effects here  Unloading a package: ▪ (in ?obj ?truck) removed ▪ (at ?obj ?new-location) added

Works – as long as no operator or goal cares about "at" for a package that is in a truck!

jonkv@ida

Universal and Conditional Effects (3)



Quantified goals:  Universal goals (all crates should be at their destinations) are simple ▪ Expand into a conjunction  Existential goals seem more difficult ▪ We defined a goal as a set of literals, all of which must be true



Can we indirectly implement existential goals even if only conjunctive goals are explicitly supported?  Yes, through new actions and predicates! ▪ Suppose we have a goal: (or a b c d) ▪ Add a new predicate “goal-achieved”, which replaces the goal ▪ Make the predicate false in the initial state ▪ Add an operator: (:action finish (:precondition (or a b c d)) (:effect goal-achieved)))

38

jonkv@ida

Quantified Goals

Suggest Documents