

![0_image_0.png](0_image_0.png)

true in the current state in order for the operator to be applicable, and a *delete list* **del(**o) and *add list* add(o**) giving the operator's negative and positive effects. Like in PDDL, the**
preconditions and effects may include logical connectives and quantifiers. The operators also can do numeric computations and assignments to local variables (an example appears later in Figure 11). Just as in PDDL, no two operators can have **the same name; thus for**
each primitive task, all applicable actions are instances of the same operator.

Each operator also has an optional *cost* **expression (the default value is 1). This expression can be arbitrarily complicated and can use any of the variables that appear in the**
operator's head and precondition. The cost of a plan is the sum of the costs of the operator instances.

## 3.1.3 Methods

Each method indicates how to decompose a compound task into a **partially ordered set of** subtasks, each of which can be compound or primitive. The simplest version of a method has three parts: the *task* **for which the method is to be used, the** *precondition* **that the** current state must satisfy in order for the method to be applicable, and the *subtasks* **that** need to be accomplished in order to accomplish that task.

As an example, Figure 3 is a simplified version of a SHOP2 method for one of the domains in the AIPS-2002 Planning Competition, the ZenoTravel domain. This method gives a way to transport a person ?p **by aircraft from one location** ?c1 **to another location** ?c2 **if the aircraft is not already at** ?c1.

1 The :ordered **keyword specifies that the subtasks**
are totally ordered: first move the aircraft to ?c1**, then board the person, then move the**
aircraft to ?c2, then debark the person.2 **To specify an unordered set of subtasks, we would**