一个PDDL简单教程

本文是一个关于PDDL(Planning Domain Definition Language)的简单教程,介绍了PDDL的基本结构和关键语法,包括exists、forall、and、or、not等表达式,并提供了相关工具和官方文档链接,帮助读者学习和理解PDDL。

一个PDDL简单教程

(照例mark一下学习收获)

首先介绍一下pddl结构:

我的理解是,这是一个strips的模型实现语言
pddl➡️planner➡️plan

对于strips来说,包含的元素有
p(predicates)
f(fluents/facts)
I(only one initial state)
g(a set of goal states)
o(operator)

1)一个domain file:
主要含type,predicates,action的precondition,add, delete的操作

2)一个problem file:
含initial state和goal state

然后工具

1)online pddl:
http://editor.planning.domains.

2)vscode:
extensions里面install pddl

然后,运行的时候,双击对应的domain file和problem file,保证上面菜单只有这两个被打开,然后运行快捷键是option+p(Mac)

简单例子很多地方都有,代码还是比较容易懂的,就不在这里讲了,下面主要列一下可用的语法:

1)exists

注意这个exists一定要加s,不然就一直报错说‘(’问题。。。ps出现这种报错问题可以先看看语法有没有错,单词拼写有没有错

假设type中定义了一个type叫做node

(:types
	node
)

我们有个predicates叫做(cat ?pos - node),意思是在这个position上有只猫
官方document对exist的定义是(exists (node)(condition))
eg:

(exists
	(?pos - node)
	(cat ?pos)
)

意思是,存在位置上有猫的位置

能用在precondition formula和effect formula

2)forall

forall用法和exists差不多
eg:

(forall
	(?pos - node)
	(cat ?pos)
)

意思是,对所有位置上有猫的点

只能用在precondition formula

3)and和or和not

and:
括号内两个条件都为真(and(predicate_1)(predicate_2)),则整个才为真;

or:
括号内只要有一个条件为真(or(predicate_1)(predicate_2)),整个为真;

not:
(not(predicate))

3)=

(= ?pos1 ?pos2)

4)when

条件判断,用在effect formula

when(
	(predicate_1)
	(predicate_2)
)

当predicate_1发生时,执行predicate_2

pddl得到的不一定是optimal,他只负责给出一个plan,他的结果取决于使用的solver

附上官方document链接:
http://users.cecs.anu.edu.au/~patrik/pddlman/writing.html

一个example:
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值