PDDL1.2语法介绍之域文件介绍
PDDL1.2中的域文件定义了问题的"通用性",也就是说,无论我们试图解决怎样的问题,这些内容都不会改变。
在PDDL1.2中,域中定义的内容主要包括模型中可以存在的对象类型,谓词和动作。
Domain Name(域名)
支持:通用 使用:高
(domain <name>)
域总是从命名开始,在我们打开第一个括号并写下(define
后的下一个参数应该是(domain <name>)
,尽管大多数规划人员从您在命令行中传递给它们的文件中获取域,并且不会费心检查域文件中的域名是否与问题文件中的域名相对应,但有些人会这样做。最好的做法是包含此名称,以防万一。
(domain construction)
当我们扩展域的时候会使用这个名称。
Extends (扩展)
支持:差 用法:稀有/无
:extends
参数允许域扩展其“父”域。使用:extends
参数时,域从其父域继承以下内容:**
- requirements
- types
- constants
- actions
- axioms
- timeless propositions
Requirements(要求)
支持:通用 用法:高
(:requirements <requirement_name>)
Requirements是类似于编程语言中的import/include语句,由于PDDL是一种声明性的语言,因此为了在某些方面更加方便,我们使用:requirement
。
:requirements
可以通过空格分隔的列表指定多个,例如(:requirements :strips :adl :typing)
以下是 1998 年 AIPS 竞赛技术手册规定的Requirements列表,但是,现在有些已经不支持了。
Strips 支持:通用 用法:高
(:requirements :strips)
允许使用 STRIPS指定的基本的添加和删除操作
Add:
:effect (walls-built ?s)
Delete:
:effect (not (walls-built ?s))
Typing 支持:通用 使用:高
(:requirements :typing)
Typing与面向对象编程中的类和子类有点类似,例如
(:types
site material - object
bricks cables windows - material)
Disjunctive Preconditions 支持:高 用法:低
(:requirements :disjunctive-preconditions)
允许使用逻辑词or
在goal和precondition中,例如
(or
(walls-built ?s)
(windows-fitted ?s))
Equality 支持:高 使用:低
(:requirements :equality)
允许使用=
来对对象作比较,例如例如,如果我们有两个对象?s1
和?s2
作为参数,我们可以比较他们是否相同
(not (= ?s1 ?s2))
Existential Preconditions 支持:高 使用:低
(:requirements :existential-preconditions)
允许使用逻辑词exists
在goal和precondition中。exists
实际上是一个额外的参数,除了例如条件的子集之外,我们不需要它。
(exists (?c - crane)
(crane-is-free ?c))
通常,exists不支持仅向action
参数添加一个额外的参数
Universal Preconditions 支持:高 使用:低
(:requirements :universal-preconditions)
允许使用逻辑词forall
在goal和precondition中。Universal
本质上是exists
语句的对应部分,它提供了提供一个条件,该条件在一个类型的所有对象上为真,或仅在所有对象上为真。
(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)
允许在action
扩展中使用foreach
,本质上允许在对象类型或所有对象上应用效果。这个需求意味着:action-expandations
需求的存在,因此相当于(:requirements :action-expansions :foreach-expansions)
。
DAG Expansions 支持:差/无 使用:稀有/无
(:requirements :dag-expansions)
允许将action
扩展中描述的扩展标记以便你可以区分规划器选择了哪个子动作。例如,如果我们定义了一个move
动作,它利用了不同的运输方式,我们可能想确切地知道标签使用了哪种方式。
(:requirements :action-expansions :dag-expansions)
Domain Axioms 支持:中 使用:低
(:requirements :domain-axioms)
允许使用公理,公理本质上是由其他谓词隐含的谓词。
Subgoals Through Axioms 支持:差/无 使用:稀有/无
(:requirements :subgoals-through-axioms)
Subgoals Through Axioms通过显示公理是目标的子集来创建子目标的一种方法。这是多余的,因为规划器可以通过域预处理进行提取。用户不应该告诉规划器它应该使用什么技术来解决问题,因此通过Subgoals Through Axioms在某种程度上与此背道而驰。
Safety Constraints 支持:差/无 使用:稀有/无
(:requirements :safety-constraints)
Safety Constraints是一个谓词,为了使计划被认为是有效的,该谓词必须在计划结束时为真。
Expression Evaluation 支持:差/无 使用:稀有/无
(:requirements :expression-evaluation)
允许在axioms
中使用eval
,两个谓词相互比较,如果它们相等则eval
返回true。
(eval (im-not-true ?a) (im-true ?b))
,如果我们假设im-not-true
为false,im-true
为true,则计算结果为false。
此要求意味着:domain-axioms
要求的存在,因此等同于:
(:requirements :domain-axioms :expression-evaluation)
Fluents 支持:意义已经改变 使用:罕见
(:requirements :fluents)
允许使用(fluents t)
,但 PDDL1.2 中的 fluent 支持与更高版本的 PDDL 模型数值不同。
Open World 支持:差/无 使用:稀有/无
(:requirements :open-world)
在规划中,假设所有未知值都为假。也就是说,如果我们不知道谓词的值,那么我们假设它为假。这被称为“封闭世界”假设。这个要求改变了规划器做出“开放世界”的假设。也就是说,未知的值不一定是错误的。这在更现代的规划器中很少得到支持,并且通常是规划器执行中的标志,而不是域中的要求。
True Negation 支持:差/无 使用:稀有/无
(:requirements :true-negation)
不要将否定视为失败,而是将其视为一阶逻辑。此要求意味着:open-world
要求的存在,因此等同于:
(:requirements :open-world :true-negation)
ADL 支持:高 使用:低
(:requirements :adl)
ADL是一个超级需求,它添加了以下需求:
:strips
:typing
:disjunctive-preconditions
:equality
:quantified-preconditions
:condition-effects
UCPOP 支持:差/无 使用:稀有/无
(:requirements :ucpop)
UCPOP是一个超级需求,它添加了以下需求:
:adl
:domain-axioms
:safety-constraints