一份完整的PDDL程序代码是由domain
文件和problem
文件组成。在详细介绍这两者之前,我们先看一下PDDL代码中常见的数据成员(本文章涉及的数据成员仅为最基础的解决一个简单问题需要,其它待深入学习以后才能了解)
- objects:在规划过程中涉及到的对象
- init: 初始状态
- goal: 目标,也就是我们要到达的目标下各个对象的状态
- predicates:objects的属性的描述,可以为True或者False
- action:对objects的操作,action应该包含三个描述,一个是涉及的对象,一个是进行action之前涉及对象的状态,以及action之后对象的状态
其中,init
, goal
, objects
是problem文件的组成部分,其它是domain文件的组成。
接下来我们通过一个例子来说明
假设有两个房间rooma和roomb,有两个球ball1和ball2都在rooma中,我们有一个机器人robby在romma中
robby有两只手臂left和right,现在我们要让robby把两个球从rooma中移到roomb中去
domain
domain的定义
(define (domain <domain name>)
(:predicates <predicates pddl codes>)
(:action <action name>
:parameters <parameters pddl codes>
:preco