Заявление Forall применяется для подмножества элементов в домене PDDL? - PullRequest
1 голос
/ 17 апреля 2019

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

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

Задача

Здесь находится домен PDDL.Моя проблема заключается в предварительных условиях действия "tracker-back-home".Сейчас я проверяю, все ли растения уже проанализированы, но мне нужно знать, проанализированы ли все растения определенного сектора ? 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))
)...

1 Ответ

1 голос
/ 22 апреля 2019

Вы проверяли языковую функцию "подразумевать", как определено в 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". Это должно кодировать именно то, что вы ищете.

...