Заявление Forall применяется к подмножеству элементов в домене PDDL?

Случай использования

Прежде всего, я хочу объяснить свой случай использования: я хочу разделить поле на разные сектора, и все растения должны быть проанализированы роботами (только один робот на сектор). Я хочу проверить: предпосылки того, что все растения для одного сектора уже проанализированы, чтобы робот вернулся в «дом».

Проблема

Вот домен 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))
)...

person Alvaro Luis    schedule 17.04.2019    source источник


Ответы (1)


Вы проверили языковую функцию «подразумевать», как определено в PDDL 2.1? (Возможно, он уже был определен до версии 2.1 — не уверен.) С его помощью вы можете определить:

(forall (?pPrime - plant)
  (imply (at ?s ?pPrime) (analyzed-plant ?pPrime ?s))
)

Примечание. Я не уверен, что порядок параметров в (at ?s ?pPrime) правильный. Предполагается кодировать, что завод ?pPrime находится в секторе ?s.

Условие расширяется до большого набора следствий, читая, что для всех растений p' (независимо от того, где они находятся) выполняется: «if plant p' is in s, then it's analyzed in s». Это должно кодировать именно то, что вы ищете.

person Prof.Chaos    schedule 22.04.2019
comment
Это полностью сработало. Просто упомянем условие в «подразумеваемом» утверждении (завод-в-секторе? pPrime?s). Благодарю вас! - person Alvaro Luis; 28.04.2019
comment
Вы имеете в виду, что он должен читать (завод-в-секторе ?pPrime ?s) вместо (at ?s ?pPrime) в операторе imly? Я ограничивал те предикаты, которые определены в вашем примере. завод-в-секторе там не существует. - person Prof.Chaos; 29.04.2019
comment
Вы правы, что предикат отсутствует, я обновил сообщение с ним. Решение: (для всех (?pPrime - завод) (подразумевается (завод-в-секторе ?pPrime ?s) (анализируемый-завод ?pPrime ?s)) ) - person Alvaro Luis; 04.05.2019