robossembler.org/docs/pddl/assembly_domain_soar.pddl

102 lines
3.7 KiB
Text
Executable file

;; Assembly domain in ADL (from the SGP distribution).
(define (domain assembly_soar)
(:requirements :adl)
(:types
assembly
resource
) ;; individual parts are atomic assemblies
(:predicates
(available ?x - (either resource assembly))
(complete ?a - assembly)
(requires ?a - assembly ?r - resource)
(committed ?r - resource ?a - assembly)
(incorporated ?part ?whole - assembly)
(part-of ?part ?whole - assembly)
(to-be-removed ?part ?whole - assembly)
(assemble-order ?part1 ?part2 ?whole - assembly)
(transient-part ?part ?whole - assembly)
;; after ?part1 is included, ?part2 must be removed
;; for the ?whole to be complete:
(remove-order ?part1 ?part2 ?whole - assembly))
(:action detect
:parameters (?res - resource ?as - assembly)
:precondition (available ?res)
:effect (and (not (available ?res))
(object-detected ?res ?as)))
(:action commit
:parameters (?res - resource ?as - assembly)
:precondition (available ?res)
:effect (and (not (available ?res))
(committed ?res ?as)))
(:action release
:parameters (?res - resource ?as - assembly)
:precondition (committed ?res ?as)
:effect (and (not (committed ?res ?as))
(available ?res)))
(:action assemble
:parameters (?part ?whole - assembly)
:precondition (and (forall (?res - resource)
(imply (requires ?whole ?res)
(committed ?res ?whole)))
(or (part-of ?part ?whole)
(transient-part ?part ?whole))
(available ?part)
(forall (?prev - assembly)
(imply (assemble-order ?prev ?part ?whole)
(incorporated ?prev ?whole))))
:effect (and (incorporated ?part ?whole)
(not (available ?part))
(when (and (not (exists (?p - assembly)
(and (part-of ?p ?whole)
(not (= ?p ?part))
(not (incorporated ?p ?whole)))))
(not (exists (?tp - assembly)
(and (transient-part ?tp ?whole)
(incorporated ?tp ?whole)))))
(and (complete ?whole)
(available ?whole)))))
;; you can remove the last part added, or a cleanup part at the
;; end.
(:action remove
:parameters (?part ?whole - assembly)
:precondition (and (forall (?res - resource)
(imply (requires ?whole ?res)
(committed ?res ?whole)))
(incorporated ?part ?whole)
(or (and (transient-part ?part ?whole)
(forall (?prev1 - assembly)
(imply
(remove-order ?prev1 ?part ?whole)
(incorporated ?prev1 ?whole))))
(and (part-of ?part ?whole)
(not (exists (?prev2 - assembly)
(and (assemble-order
?prev2 ?part ?whole)
(incorporated
?prev2 ?whole)))))))
:effect (and (not (incorporated ?part ?whole))
(available ?part)
(when (and (not (exists (?p - assembly)
(and (part-of ?p ?whole)
(not (incorporated ?p ?whole))
)
)
)
(not (exists (?tp - assembly)
(and (transient-part ?tp ?whole)
(not (= ?tp ?part))
(incorporated ?tp ?whole))
)
)
)
(and (complete ?whole)
(available ?whole))
)
))
)