我似乎无法理解 pddl 中的动作和目标

Posted

技术标签:

【中文标题】我似乎无法理解 pddl 中的动作和目标【英文标题】:I can't seem to understand actions and goal in pddl 【发布时间】:2020-10-15 09:55:21 【问题描述】:

我对 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。没有计划能解决它

【问题讨论】:

【参考方案1】:

问题在于您的操作及其参数的前提条件。您只声明了两个参数?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.) .这里的要点是,对于旅行动作的实例,您必须为每个变量 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。引入类型区域、人员、潜艇……然后动作定义如下所示:

(: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)))
    )

【讨论】:

我已经试过这个并且输出给了我这个`(:action travel:parameters(seaport regionempty Captain Captain):precondition(和(at-region seaport)(at-bridge Captain)(at- bridge Captain) ) :effect (and (at-region regionempty) (not (at-region seaport) ) ) )` 为什么输出两次船长,而不是船长和导航员? 哦,那是我的错。在 PDDL 中,您可以选择具有相同值的参数。在这种情况下,?p1?p2 都被选为captain,因为(at-bridge captain) 保持不变。您可以通过在前提条件中添加不等于约束 (not (= ?p1 ?p2)) 来更改此设置。为此,您可能必须将 (:requirements :equality) 添加到域中(取决于规划者)。

以上是关于我似乎无法理解 pddl 中的动作和目标的主要内容,如果未能解决你的问题,请参考以下文章

[PDDL人工智能] 02.PDDL规划领域定义语言之语法理解和示例详解

[PDDL人工智能] 02.PDDL规划领域定义语言之语法理解和示例详解

PDDL forall 与持续动作中的 when 条件

PDDL 持续动作:灵活的持续时间

使用didSet将目标添加到UITableViewCell中的UIButton

目标动作模式的快速无法识别的选择器