102 lines
3.7 KiB
Text
Executable file
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))
|
|
)
|
|
))
|
|
)
|