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

Posted

技术标签:

【中文标题】PDDL forall 与持续动作中的 when 条件【英文标题】:PDDL forall with when condition in durative-action 【发布时间】:2020-07-20 19:52:38 【问题描述】:

这个问题建立在previous question about forall 子句之上。我想用一个'when'语句来限制forall,如下所示:

(:durative-action finish
  :parameters (?r - robot ?p - part)
  :duration ( = ?duration 1)
  :condition (and
      (at start (robot_free ?r))
      (at start (forall (?f - fastener_loc)
                    when (part_fastener ?p ?f)
                     (loc_not_fastened ?f)
                )
      )
     )
  :effect (and
      (at start(not (robot_free ?r)))
      (at end (part_free ?p))
      (at end (robot_free ?r))
     )
)

这在没有'when'语句的情况下有效。当我包含“when”语句时,我收到了几个错误:

Error: Syntax error in durative-action declaration.
Error: Unreadable structure
Error: Syntax error in domain

提前感谢您的帮助。

【问题讨论】:

【参考方案1】:

我能够让它与一个暗示语句一起工作。

(:durative-action finish
  :parameters (?r - robot ?p - part)
  :duration ( = ?duration 1)
  :condition (and
      (at start (robot_free ?r))
      (at start (forall (?f - fastener_loc)
                    (imply (part_fastener ?p ?f)(loc_not_fastened ?f))
                )
      )
     )
  :effect (and
      (at start(not (robot_free ?r)))
      (at end (part_free ?p))
      (at end (robot_free ?r))
     )
)

不确定这是否也适用于when 语法。

【讨论】:

【参考方案2】:

when 子句需要用(括号)包裹

【讨论】:

when 子句以及when 和以下子句周围尝试了括号。同样的错误... 啊,对。错过了这是在condition 块中,而不是effect 块中。前者只使用imply,后者只使用when

以上是关于PDDL forall 与持续动作中的 when 条件的主要内容,如果未能解决你的问题,请参考以下文章

Forall 语句适用于 PDDL 域中的元素子集?

如何在 PDDL forall 中获取 break 的功能

PDDL forall 语法

when、while和as的区别﹖

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

英语四级语法辨析:when, while与as的用法区别