我似乎无法理解 pddl 中的动作和目标
I can't seem to understand actions and goal in pddl
我对pddl理解有问题,我正在尝试做一个飞船计划,只要船长和领航员在舰桥上,飞船就可以移动到一个区域。
这是我的域文件操作代码
(:action travel :parameters (?x ?y)
:precondition (and (REGION ?x) (REGION ?y) ; travel between regions
(at-region ?x) (at-bridge ?x) (at-bridge ?y))
:effect (and (at-region ?y)
(not (at-region ?x)))
)
当我尝试这个问题文件时
(:init (SUBMARINE submarine)
(ROOM bridge) (ROOM sickbay) ; 2 rooms - bridge and sickbay
(PERSONNEL captain) (PERSONNEL navigators)
(REGION regionempty) (REGION seaport)
(at-region seaport) (at-bridge captain) (at-bridge navigators)
)
(:goal (and (at-region regionempty))
)
我收到错误消息:ff:目标可以简化为 FALSE。没有计划可以解决它
问题出在你的动作的前提条件和它的参数上。您只声明了两个参数 ?x
和 ?y
。对于那些你需要持有五样东西才能执行旅行动作的人:
(region ?x)
(region ?y)
(at-region ?x)
(at-bridge ?x)
(at-bridge ?y)
问题是数字4和5。?x
和?x
应该是你想去旅行的地区(也就是1.-3.)表达的。但是你说 region ?x
也必须在桥 (4.) 并且 region ?y
必须在新娘处 (5.)。这里的要点是,对于旅行动作的实例,您必须 select 每个变量 s.t 一个值。所有先决条件同时成立。
解决您的问题的方法是添加两个附加参数:
(:action travel :parameters (?x ?y ?p1 ?p2)
:precondition (and (REGION ?x) (REGION ?y) ; travel between regions
(at-region ?x) (at-bridge ?p1) (at-bridge ?p1))
:effect (and (at-region ?y)
(not (at-region ?x)))
)
最后,您是非类型化 PDDL 并使用一元谓词检查类型。这已经很过时了。出于建模目的,您应该始终使用类型化变量。 IE。引入类型 region, personnel, submarine, ... 然后动作定义如下所示:
(:action travel :parameters (?x ?y - region ?p1 ?p2 - personnel)
:precondition (and (at-region ?x) (at-bridge ?p1) (at-bridge ?p1))
:effect (and (at-region ?y)
(not (at-region ?x)))
)
我对pddl理解有问题,我正在尝试做一个飞船计划,只要船长和领航员在舰桥上,飞船就可以移动到一个区域。
这是我的域文件操作代码
(:action travel :parameters (?x ?y)
:precondition (and (REGION ?x) (REGION ?y) ; travel between regions
(at-region ?x) (at-bridge ?x) (at-bridge ?y))
:effect (and (at-region ?y)
(not (at-region ?x)))
)
当我尝试这个问题文件时
(:init (SUBMARINE submarine)
(ROOM bridge) (ROOM sickbay) ; 2 rooms - bridge and sickbay
(PERSONNEL captain) (PERSONNEL navigators)
(REGION regionempty) (REGION seaport)
(at-region seaport) (at-bridge captain) (at-bridge navigators)
)
(:goal (and (at-region regionempty))
)
我收到错误消息:ff:目标可以简化为 FALSE。没有计划可以解决它
问题出在你的动作的前提条件和它的参数上。您只声明了两个参数 ?x
和 ?y
。对于那些你需要持有五样东西才能执行旅行动作的人:
(region ?x)
(region ?y)
(at-region ?x)
(at-bridge ?x)
(at-bridge ?y)
问题是数字4和5。?x
和?x
应该是你想去旅行的地区(也就是1.-3.)表达的。但是你说 region ?x
也必须在桥 (4.) 并且 region ?y
必须在新娘处 (5.)。这里的要点是,对于旅行动作的实例,您必须 select 每个变量 s.t 一个值。所有先决条件同时成立。
解决您的问题的方法是添加两个附加参数:
(:action travel :parameters (?x ?y ?p1 ?p2)
:precondition (and (REGION ?x) (REGION ?y) ; travel between regions
(at-region ?x) (at-bridge ?p1) (at-bridge ?p1))
:effect (and (at-region ?y)
(not (at-region ?x)))
)
最后,您是非类型化 PDDL 并使用一元谓词检查类型。这已经很过时了。出于建模目的,您应该始终使用类型化变量。 IE。引入类型 region, personnel, submarine, ... 然后动作定义如下所示:
(:action travel :parameters (?x ?y - region ?p1 ?p2 - personnel)
:precondition (and (at-region ?x) (at-bridge ?p1) (at-bridge ?p1))
:effect (and (at-region ?y)
(not (at-region ?x)))
)