Cassandra's action representation is a modified form of the STRIPS operator [Fikes and Nilsson 1971]. It consists of the preconditions for executing an action and the effects that may become true as a result of executing it, as in the standard STRIPS operator. The syntax is the same as that used in UCPOP [Penberthy and Weld 1992]. As in UCPOP, action effects are more complex than standard effects: they may have an associated set of secondary preconditions, which govern the occurrence of that effect [Pednault 1988, Pednault 1991]. Secondary preconditions allow the representation of context-dependent effects of actions, i.e., effects that depend upon the context in which the action is executed. The use of secondary preconditions is critical to Cassandra's ability to represent uncertain effects, and hence nondeterministic actions, as we discuss in Section 2.1.1.
Action: (make-selection ?machine ?selection) Preconditions: (:and (money-entered ?machine) (plugged-in ?machine)) Effects: (:when (available ?machine ?selection) ; secondary precondition :effect (:and (dispensed ?selection) (:not (money-entered ?machine)))) (:when (:not (available ?machine ?selection)) ; secondary precondition :effect (another-selection-indicator-on ?machine))
Figure 1 shows a simplified operator schema for the action of making a selection from a soft-drink machine (the effects describing how the ``make another selection'' indicator light is turned off are omitted). The operator describes two possible effects of carrying out the action: the effect of acquiring a soda, which depends on the secondary precondition that a soda of the selected type is available; and the effect of having the ``make another selection'' indicator light come on, which depends on the secondary precondition that a soda of the selected type is not available. Both effects depend upon the preconditions that money has been entered into the machine and that the machine is plugged in.