Случай использования
Прежде всего, я хочу объяснить свой случай использования: я хочу разделить поле на разные сектора, и все растения должны быть проанализированы роботами (только один робот на сектор). Я хочу проверить: предпосылки того, что все растения для одного сектора уже проанализированы, чтобы робот вернулся в «дом».
Проблема
Вот домен PDDL. Моя проблема заключается в предпосылках действия «трекер-возврат-домой». Теперь я проверяю, все ли растения уже проанализированы, но мне нужно знать, проанализированы ли все растения конкретного сектора ?s. Это можно сделать с помощью инструкции forall?
(define (domain killbee)
(:requirements :strips :typing)
(:types
bee location - object
;Inheritance
tracker - bee
hive plant sector - location
)
(:predicates
(directly-connected ?l1 - location ?l2 - location)
(at ?l1 - object ?l2 - object) ;location is hive, plant or sector
(free-sector ?s - sector)
(bee-with-sector ?b - tracker)
(tracker-ready-to-move ?b - tracker)
(analyzed-plant ?p - plant ?s - sector)
(sector-tracked ?s - sector)
(plant-in-sector ?p - plant ?s - sector)
)
...
...
(:action tracker-back-home
:parameters (?b - tracker ?p - plant ?h - hive ?s - sector)
:precondition
(and (tracker-ready-to-move ?b)
(at ?b ?p)
(not (at ?b ?h))
(forall (?x - plant) (analyzed-plant ?x ?s)))
)
:effect
(and
(not (at ?b ?p))
(at ?b ?h)
(sector-tracked ?s)
(not (bee-with-sector ?b))
(free-sector ?s))
)...