PDDL

从 Pddl 开始
#f03c15 注意:这项工作正在进行中,每周更新一次。

欢迎来到学习PDDL,一个简短的指南,开始使用PDDL。

本指南专为首次阅读的读者、需要复习的人以及像我这样的有时需要一些语法理智检查的其他人而设计。

如果你在这里读到任何你认为需要改进的东西,请在GitHub上为它做贡献。

介绍
PDDL 是少数为创建人工智能 (AI) 规划标准而设计的语言之一。它于1998年开发,并在ICAPS推出,经过多年的改进和扩展[1]。

目前最流行的PDDL是PDDL2.1,它是PDDL的扩展,用于表达时间域[2]:PDDL 3 [3]为 PDDL 2.1 增加了轨迹限制和偏好,PDDL+ +4 允许在 PDDL 中建模混合离散连续域。

环境设置
您可以使用您自己的文本编辑器,但我建议使用带有包控制的崇高文本。这样,您可以使用myPDDL 包,这将给你语法高光。

PDDL 的组件
在我们开始编写 PDDL 之前,我们需要了解如何在 PDDL 中模拟"世界"。

一个世界是由一组国家描述的,每个国家都包含一个事实和/或对象列表。一个世界从初始状态开始,并受一组规则和约束的制约,这些规则和约束限制了每个状态中可以采取哪些行动,并且每个动作通常代表向不同状态的过渡。

在"世界"中,有些事情我们需要跟踪。

对象:我们感兴趣的世界的东西。
谓词:我们感兴趣的事实(例如物体的属性),可以是真或假。
初始状态:我们开始的世界状态,即一开始是真实的事物。
目标规范:我们想结束的世界状态,即我们希望在最后成为真实事物。
行动/操作者:改变世界状况的方法,即改变事实的事情。
PDDL 语法
首先你需要知道,PDDL文件通常有扩展。.pddl

有两个PDDL文件,你需要学习的语法:

域文件
域名文件建立了世界的上下文。它决定了各州可以包括哪些细节(谓词),以及我们可以做些什么来在世界各州之间移动(行动)。

域文件的基本语法是:

(define (domain )
(:predicates

)

(:action

)
)
世界的名字在哪里?

在下面的例子中,谓词和行动都将变得更加清晰。

问题文件
问题文件表示我们在该域中建立的世界的实例。它决定了计划开始时的真实情况(初始状态),以及我们希望在计划结束时的真实情况(目标状态)。

问题文件的基本语法是:

(define (problem )<br/> (:domain )<br/> (:objects<br/> <br/> )

(:init
	<predicates>
)
(:goal 
	<predicates>
)


问题文件的标题在哪里,并指相应的域名文件的名称。

简单的例子:让我们吃!
Gripper

试想一下,我们有一个机器人抓手手臂,一个纸杯蛋糕和一个盘子。夹板是空的,纸杯蛋糕在桌子上,我们想把纸杯蛋糕放在盘子里。

在我们在 PDDL 中建模之前,让我们来看看 PDDL 问题的组件:

首先,我们定义域。

(define (domain letseat)
然后,我们定义对象:盘子,抓手,纸杯蛋糕。我们还将将纸杯蛋糕和手臂标记为可游荡的,一个小黑客,以帮助我们使用我们稍后将创建的谓词查询这些对象的位置。

(:requirements :typing)

(:types
location locatable - object
bot cupcake - locatable
robot - bot
)
我们还需要定义一些谓词。握把臂是空的吗?纸杯蛋糕在哪里?

(:predicates
(on ?obj - locatable ?loc - location)
(holding ?arm - locatable ?cupcake - locatable)
(arm-empty)
(path ?location1 - location ?location2 - location)
)
We’ll also have to define actions/operators. We need to be able to pick up and drop the cupcake, as well as move the arm between the table and the plate.

(:action pick-up
:parameters
(?arm - bot
?cupcake - locatable
?loc - location)
:precondition
(and
; Note how we use the same variable loc
; in both lines below. This is to make
; sure it’s looking at the same location.
(on ?arm ?loc)
(on ?cupcake ?loc)
(arm-empty)
)
:effect
(and
(not (on ?cupcake ?loc))
(holding ?arm ?cupcake)
(not (arm-empty))
)
)

(:action drop
:parameters
(?arm - bot
?cupcake - locatable
?loc - location)
:precondition
(and
(on ?arm ?loc)
(holding ?arm ?cupcake)
)
:effect
(and
(on ?cupcake ?loc)
(arm-empty)
(not (holding ?arm ?cupcake))
)
)

(:action move
:parameters
(?arm - bot
?from - location
?to - location)
:precondition
(and
(on ?arm ?from)
(path ?from ?to)
)
:effect
(and
(not (on ?arm ?from))
(on ?arm ?to)
)
)
把以上所有内容放入一个文件,你有一个域名文件!

现在,我们将查看问题文件。我们将首先让它知道它与哪个域关联,并定义世界上存在的对象。

(define (problem letseat-simple)
(:domain letseat)
(:objects
arm - robot
cupcake - cupcake
table - location
plate - location
)
然后,我们将定义初始状态:抓手是空的,蛋糕在桌子上,手臂可以在两者之间移动。

(:init
(on arm table)
(on cupcake table)
(arm-empty)
(path table plate)
)
最后,我们定义了目标规格:盘子里的纸杯蛋糕。

(:goal
(on cupcake plate)
)
把这一切放在一起,你会有问题的文件!

如果您使用OPTIC运行此方案,您将获得此解决方案:

Initial heuristic = 3
Initial stats: t=0s, 4299060kb
b (2 @ n=3, t=0s, 4300084kb)b (1 @ n=6, t=0s, 4308276kb)
;;;; Solution Found
; Time 0.00
; Peak memory 4308276kb
; Nodes Generated: 5
; Nodes Expanded: 3
; Nodes Evaluated: 6
; Nodes Tunneled: 1
; Nodes memoised with open actions: 0
; Nodes memoised without open actions: 6
; Nodes pruned by memoisation: 0
0: (pick-up arm cupcake table) [1]
1: (move arm table plate) [1]
2: (drop arm cupcake plate) [1]
练习:
下面是一些任务,使其更加复杂,并加强您的理解。

在桌子上添加第二个纸杯蛋糕,并将其添加到目标规格中,以确保它也放在盘子里。
在域中添加独角兽对象,使独角兽吃蛋糕的目标。独角兽只能吃纸杯蛋糕,如果它在盘子里。
不太简单的示例
如果你想检查出一些更复杂的东西,看看驱动程序的域名。

过去的基础知识
如果您是第一个定时器,请在完全了解基本知识之前不要冒险进入此部分。

持久行动
实际上,您可以在时间域中提供操作持续时间。

每个条件和效果都给出了它应该发生的时间。

有几种类型的时间限制:

(at start (<condition/effect>)),这意味着这必须是真实的或发生在行动的开始。 ,这意味着这必须是真实的或发生在行动的结尾。(at end (<condition/effect>))(over all ())

下面是我们上一个示例转化为持久动作的操作示例。(move)

(:durative-action move
:duration (= ?duration 10) ; Duration goes here.
:parameters
(?arm - bot
?from - location
?to - location)
:condition ; Note how this is “condition” not “pre-condition”
(and
(at start (on ?arm ?from))
(over all (path ?from ?to))
)
:effect
(and
(at start (not (on ?arm ?from)))
(at end (on ?arm ?to))
)
)
功能
Tbc

流程与事件
Tbc

贡献
票价阿拉布德(作者)
安德鲁·科尔斯博士(编辑)
如果您想被列为贡献者,请提出拉取请求。

引用
[1] PDDL 的维基百科页面

[2] 福克斯, M. 和朗, D. (2003).PDDL2.1:用于表达时间规划域的PDDL扩展。[在线]提供于:http://www.jair.org/papers/paper1129.html[2017年11月20日访问]。

[3] 格列维尼, A. 和长, D. (2005) 计划限制和偏好在 PDDL3.第27卷,第235-297页。[在线]http://www.cs.yale.edu/homes/dvm/papers/pddl-ipc5.pdf提供

[4] 福克斯,M.和朗,D.(2006)建模混合离散连续域规划。第27卷,第235-297页。[在线]http://www.jair.org/papers/paper2044.html提供

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值