PDDL具有持续作用的所有效果



我既使用持久操作,又试图能够清除某种类型所有元素的谓词。见下文。这可能吗?如果是这样,有谁知道正确的语法?谢谢!

(:durative-action init
:parameters (?r - robot)
:duration ( = ?duration 1)
:condition (and
(at start (robot_uninitialized ?r))
(at start (robot_free ?r))
)
:effect (and
(at start(not(robot_free ?r)))
(at end (assign (robot_on_fastener_number_in_sequence) 1))
(at end (not(robot_uninitialized ?r)))
(at end (robot_free ?r))
(at end (forall (?f - fastener) (not(fastener_selected ?f))))
)
)

我正在运行 popf 计划器,提供的错误是:Syntax error in timed effect.

VAL 解析器确实显示了Syntax error in timed effect错误。我试图颠倒at endforall的顺序,它停止了抱怨。由于 popf 使用相同的解析器,它也应该对该语法感到满意。

:effect (and
(forall (?f - fastener) 
(at end (not (fastener_selected ?f)))
)
)

但在这种情况下,VAL 以相反的顺序接受语法:

:condition (and
(at end (forall (?f - fastener) 
(fastener_selected ?f))
)
)

完整示例:http://editor.planning.domains/#read_session=BCBDpV4YQE

通常使用的"完整"PDDL3.1 BNF 版本明确指出您正在尝试的内容是不允许的。但是,这很可能是从原始语法定义中继承下来的错误,该错误向下传播到解析器实现(反之亦然?

定性作用效应<da-effect>定义如下:

<da-effect> ::= (and <da-effect>*)
<da-effect> ::= <timed-effect>
<da-effect> ::= (forall (<typed list (variable)>) <da-effect>)
<da-effect> ::= (when <da-GD> <timed-effect>)

所以你可以有一个普通的<timed-effect>,一个<da-effect>的组合,或者将<da-effect>包裹在一个forallwhen中(如果:conditional-effects要求得到规划者的支持(。

因此,从技术上讲,您也可以嵌套forall

然后定义如下<timed-effect>

<timed-effect> ::= (at <time-specifier> <cond-effect>)
<timed-effect> ::= (at <time-specifier> <f-assign-da>)
<timed-effect> ::= (<assign-op-t> <f-head> <f-exp-t>)

<cond-effect>定义为:

<cond-effect> ::= (and <p-effect>*)
<cond-effect> ::= <p-effect>

<p-effect>不支持条件效应:

<p-effect> ::= (not <atomic formula(term)>)
<p-effect> ::= <atomic formula(term)>
<p-effect> ::= (<assign-op> <f-head> <f-exp>)
<p-effect> ::= (assign <function-term> <term>)
<p-effect> ::= (assign <function-term> undefined)

然而,有趣的是,在最初的PDDL2.1(Fox和Long,2003(中,<timed-effect>定义如下:

<timed-effect> ::= (at <time-specifier> <a-effect>)
<timed-effect> ::= (at <time-specifier> <f-assign-da>)
<timed-effect> ::= (<assign-op-t> <f-head> <f-exp-t>)

现在<a-effect>没有在任何地方定义,它可能只是一个错字,它很可能应该是<da-effect>.在这种情况下,您正在尝试的语法将起作用。

此错误被延续到 PDDL3.1 并"更正"><cond-effect>(大概而不是<da-effect>(,这引起了您的问题。

最新更新