如何在PDDL中正确指定空前置条件?
PDDL无前置条件动作的正确写法
你之前尝试的几种写法都不符合PDDL语法规范,以下是两种可正常运行的正确实现方式:
方式1:直接省略:precondition字段
如果动作不需要任何前置条件,完全可以不声明:precondition这一项,示例代码:
(:action doSomething :parameters (?t - t1) :effect (donesomething ?t) )
方式2:使用合法的空前置条件表达式
如果需要显式声明无前置条件,需使用PDDL标准支持的空合取(and)或小写布尔常量(true)(必须用括号包裹),示例:
(:action doSomething :parameters (?t - t1) :precondition (and) :effect (donesomething ?t) )
或者:
(:action doSomething :parameters (?t - t1) :precondition (true) :effect (donesomething ?t) )
错误写法的原因
- 仅写
:precondition无后续内容:属于语法缺失,解析器会判定前置条件未完整定义,直接报错。 - 写
:precondition():PDDL不允许空括号表达式,属于非法语法。 - 写
:precondition True:PDDL的布尔常量要求小写true且必须用括号包裹,大写True不符合规范。
内容的提问来源于stack exchange,提问作者user84209
相关产品推荐
相关产品推荐

