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中查看。