我既使用持久操作,又试图能够清除某种类型所有元素的谓词。见下文。这可能吗?如果是这样,有谁知道正确的语法?谢谢!
(: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 end
和forall
的顺序,它停止了抱怨。由于 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>
包裹在一个forall
或when
中(如果: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>
(,这引起了您的问题。