pddl中forall和when的用法
时间: 2024-02-15 18:02:43 浏览: 186
PDDL中的forall和when都是用于描述动作的前置条件和效果的逻辑运算符。
1. forall
forall是一个量词,表示对于所有的具有某些共同特征的对象,它们都满足某个条件。在PDDL中,forall通常用于描述动作的前置条件,例如:
```
(:action move
:parameters (?x ?y ?z)
:precondition (and
(at ?x ?y ?z)
(forall (?i)
(or (not (occupied ?i ?x ?y ?z))
(adjacent ?i ?x ?y ?z)))))
```
上述代码中,move动作的前置条件包括物体?x在位置(?y, ?z)上,并且对于所有可能占据此位置的物体?i,要么?i不在此位置,要么?i与?x相邻。这个条件使用了量词forall来描述所有可能的物体?i。
2. when
when是一个条件语句,表示当某个条件成立时,才执行某个动作的效果。在PDDL中,when通常用于描述动作的效果,例如:
```
(:action pickup
:parameters (?x ?y ?z)
:precondition (and (at ?x ?y ?z)
(clear ?x))
:effect (and (not (at ?x ?y ?z))
(holding ?x)
(when (not (clear ?y))
(not (clear ?y)))))
```
上述代码中,pickup动作的效果包括把物体?x从位置(?y, ?z)拿起,并且当位置?y上有其他物体时,将其标记为不可用(即不再清空)。
总之,forall和when都是PDDL中常用的逻辑运算符,分别用于描述动作的前置条件和效果。对于规划问题的建模和求解,了解这些运算符的用法是非常重要的。
阅读全文