PDDL中Requirements是非常重要的,一般我们可以从不同版本的PDDL的all Requirements中获取到当前版本PDDL所支持的语法,同时在requirements中添加参数可以判断所使用规划器是否支持某项语法(也可以直接看规划器所对应的论文中提到的requirements入手),可以说requirements是学习每个版本PDDL不可缺少的一步。
(上图为PDDL2.2的requirements)
下面是我整理的从PDDL到PDDL3.0所有的requirements以及其简单介绍
|
Requirements |
|
Examples |
|
:STRIPS |
(:requirements :strips) 允许使用STRIPS中指定的基本添加和删除效果。 |
Add: :effect (walls-built ?s) Delete: :effect (not (walls-built ?s)) |
|
:TYPING |
(:requirements :typing) 允许使用对象键入。键入类似于面向对象编程中的类和子类 |
(:types site material - object bricks cables windows - material ) |
|
:Preferences |
(:requirements :preferences) 允许在问题定义(软目标)中使用偏好。 |
|
|
:Constraints |
(:requirements :constraints) 允许在域定义中使用约束(必须在每个 state中满足的目标) |
(:constraints (and (forall (?l - lorry ?loc - location) (at-most-once (at ?l ? loc))) ) ) |
|
:Numeric Fluents |
(:requirements :numeric-fluents) 允许包含:function表示域中数字变量的块。 |
(:functions (battery-amount ?r - rover) ) |
|
:Durative Actions |
(:requirements :durative-actions) 允许durative-action在域定义中使用。持续行动是指具有完成持续时间的行动。 |
(:durative-action move :parameters (<arguments>) :duration (= ?duration 5) :condition (logical_expression) :effect (logical_expression) ) |
|
:Durative Inequalities |
(:requirements :durative-inequalities) 允许使用不等式来表示持续时间。我们可以表达一个动作具有使用不等式的持续时间范围,而不是表达动作具有固定的时间长度。 |
|
|
:continuous Effects |
(:requirements :continuous-effects) 允许在持续行动中对数字使用连续效果。由于持续性操作需要一段时间,因此我们可以将数值中的更改建模为时间函数。实际上支持这种不稳定。线性函数对于规划者来说相对容易,但非线性效应仍然是研究领域。 |
|
|
:Negative Preconditions |
(:requirements :negative-preconditions) 允许not在前提条件下使用。一些规划者模仿行动的方式意味着他们无法处理负前提条件。对于每个谓词来说,这是一个严重的设计缺陷,这更加带来不便,因为它们是一个对立的谓词,当它是假的时候是真的。即rover-charged并且rover-not-charged是相互排斥的。在负前提条件不支持的情况下,我们可以引入第二个谓词,它表示我们想要表达负前提条件的谓词的否定。 |
|
|
:derived Predicates |
(:requirements :derived-predicates) 允许在域中使用派生谓词 |
(:derived (train-usable ?t (and (train-has-guard ?t (train-has-driver ?t ) ) |
|
:Timed Initial Literals |
(:requirements :timed-initial-literals) 允许在定义问题时使用Timed Initial Literals |
(at 10 (train-not-in-use t1)) |
|
:Disjunctive Preconditions |
(:requirements :disjunctive-preconditions) 允许使用or目标和前提条件 |
(or (walls-built ?s) (windows-fitted ?s) ) |
|
:Equality |
(:requirements :equality) |
(not (= ?s1 ?s2)) |
|
:Existential Preconditions |
(:requirements :existential-preconditions) |
(exists (?c - crane) (crane-is-free ?c) ) |
|
:Universal Preconditions |
(:requirements :universal-preconditions) |
(forall (?c - crane) (crane-is-free ?c) ) |
|
:Quantified Preconditions |
(:requirements :quantified-preconditions) 相当于 (:requirements :existential-preconditions :universal-preconditions) |
|
|
:Conditional Effects |
(:requirements :conditional-effects) 允许使用when表达动作效果。基本上说如果某些事情是真的,那么也应用这个效果。 |
(when ;Antecedent (and (has-hot-chocolate ?p ?c) (has-marshmallows ?c)) ;Consequence (and (person-is-happy ?p)) ) |
|
:Action Expansions |
(:requirements :action-expansions) 允许使用动作扩展。这允许定义变体条件和动作的效果。从本质上讲,我们可以定义一个MOVE动作来描述一个人的运动,但包括不同的扩展来描述飞机,火车,汽车或步行的运动。 这已经变得多余,因为我们只是表达多个动作,如MOVE-BY-PLANE和MOVE-BY-TRAIN。 |
|
|
:Foreach Expansions |
(:requirements :foreach-expansions) 允许使用foreach动作扩展,基本上允许在一种对象或所有对象中应用效果。该要求意味着要求的存在,:action-expansions因此等同于(:requirements :action-expansions :foreach-expansions) |
|
|
:DAG Expansions |
(:requirements :dag-expansions) 允许标记Action Expansions中描述的扩展,以便您可以区分计划程序选择的子操作。例如,如果我们定义了一个move使用不同传输模式的动作,我们可能想要确切地知道标记使用了什么模式。该要求意味着要求的存在,:action-expansions因此等同于(:requirements :action-expansions :dag-expansions) |
|
|
:Domain Axioms |
(:requirements :domain-axioms) 允许使用公理。公理本质上是其他谓词隐含的谓词。 参阅PDDL 1.2域参考中的公理部分 |
|
|
:subgoals through Axioms |
(:requirements :subgoals-through-axioms) |
|
|
:Safety Constraints |
(:requirements :safety-constraints) |
|
|
:expression Evaluation |
(:requirements :expression-evaluation) |
|
|
:Fluents |
(:requirements :fluents) |
|
|
:Open World |
(:requirements :open-world) 在计划中,假定所有未知值都是假的。也就是说,如果我们不知道谓词的值,那么我们认为它是假的。这被称为“封闭世界”假设。这个要求改变了计划者做出“开放世界”的假设。也就是说,未知的值不一定是错误的。这在现代规划者中很少得到支持,并且通常是计划执行中的标志,而不是域中的要求。 |
|
|
:True Negation |
(:requirements :true-negation) |
|
|
:ADL |
(:requirements :adl) |
|
|
:UCPOP |
(:requirements :ucpop) |
|
请注意并不是每个requirements规划器都需要支持的,不同规划器“特长”不同及其支持的语法也各有不同。
更为详细或具体的requirements可以去planning.wiki中查看。