Forall 语句应用于 PDDL 域中的元素子集?
Forall statement applied for a subset of elements in PDDL Domain?
使用案例
首先,我想说明一下我的使用案例:我想把一块田地分成不同的扇区,所有的植物都应该由机器人来分析(每个扇区只有一个机器人)。我想检查一下:先决条件是已经分析了一个扇区的所有植物,以便机器人 return 到 'home'。
问题
这是域 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))
)...
您是否查看了 PDDL 2.1 定义的语言功能 "imply"? (也许它已经在 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
”。这应该准确编码您要查找的内容。
使用案例
首先,我想说明一下我的使用案例:我想把一块田地分成不同的扇区,所有的植物都应该由机器人来分析(每个扇区只有一个机器人)。我想检查一下:先决条件是已经分析了一个扇区的所有植物,以便机器人 return 到 'home'。
问题
这是域 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))
)...
您是否查看了 PDDL 2.1 定义的语言功能 "imply"? (也许它已经在 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
”。这应该准确编码您要查找的内容。