Conformant Planning

Conformant planning means "synthesizing a strong plan under the assumption of null run-time observability". A conformant plan consists of a sequence of actions that is guaranteed to achieve the goal regardless of the uncertainty in the initial condition and in the nondeterministic effects of actions.

Further information on conformant planning can be found here.

An example

Consider the example depicted below. A stack of five numbers must be sorted in ascendent order. A "binary sort" operation is available.

(define (domain conformant_sort)
  (:types element_no)
       (element_value ?e - element_no) - element_no)

  (:action sort
   :parameters (?e1 - element_no
                ?e2 - element_no)
   :precondition (not (= ?e1 ?e2))
           (when (> (element_value ?e1) (element_value ?e2))
                  (assign (element_value ?e1) (element_value ?e2))
                  (assign (element_value ?e2) (element_value ?e1)))))

The following problem describes the goal of sorting the stack starting from a random configuration, without ever being able to observe the status of the stack.
Notice that range types are instantiated in the problem using the NuPDDL keyword :typedef.

(define (problem conformant_sort_pb)
        (:domain conformant_sort)
            element_no        - (range 1 5))
           (forall (?e - element_no)
             (unknown (element_value ?e))))
           (forall (?e1 - element_no)
             (forall (?e2 - element_no)
               (imply (> ?e1 ?e2)
                      (>= (element_value ?e1) (element_value ?e2)))))))

To solve the problem, run

MBP-solve -plan_output - <domain> <problem>

where <domain> and <problem> are the domain and problem above.