大数据最全[PDDL人工智能] 01
二.VSCode安装教程
第一步,在VSCode中安装PDDL插件。
- 点击扩展按钮
- 搜索PDDL
- 点击安装“Install”按钮即可

安装成功后如下图所示:

第二步,在VSCode中安装VAL语法检查。

在VS Code安装PDDL成功后,打开PDDL Overview进行安装VAL。
- View -> Command Palette -> PDDL: show overview page

安装过程如下图所示,对应“VAL tools”点击“Download”。

第三步,安装成功之后,可以看到详细的配置信息如下:
- planning engine(在线规划引擎)
Planning service: http://solver.planning.domains/solve - PDDL parser(PDDL解析器)
c:\Users\xxx\AppData\Roaming\Code\User\globalStorage\jan-dolejsi.pddl\val\Val-20210215.2-win64\bin\Parser.exe - Plan Validator(规划验证器)
c:\Users\xxx\AppData\Roaming\Code\User\globalStorage\jan-dolejsi.pddl\val\Val-20210215.2-win64\bin\Validate.exe

此时,我们可以进入后续的PDDL代码编写过程。同时,存在部分在线访问的问题,后续尝试解决。
VSCode PDDL
VSCode是建模规划域的良好工具,其扩展将PDDL引入了一流的编程语言家族中,让其与C#、Python、JavaScript等处于同等级别。PDDL旨在通过以下功能帮助新手并为专家赋能。
- 规划领域建模
planning domain modeling - 通过回归或可扩展性测试用例的数量规划域验证
planning domain validation by number of regression or scalability test cases - 通过从模板生成问题文件来规划工业化解决方案
planning solution industrializing by problem file generation from templates - 计划验证
plan validation
当扩展在 .pddl 文件(通常包含域或问题定义)或选定的PDDL命令被激活时,即可配置解释器(parser)或规划器(planner)。
三.PDDL基础案例快速入门
1.Getting started
创建PDDL文件并运行计划程序,下面是官方最简单的入门步骤:
- (1) 点击
File > Open Folder打开VS Code中一个空白文件夹。 - (2) 点击
File > New File创建两个名为domain.pddl和question.pddl的空白文件,这两个文件将显示在资源管理器窗格中,在编辑器中并排打开它们。 - (3) 打开
domain.pddl文件并输入domain。自动模板会插入域文件的整个结构,使用 Tab 和 Enter 键跳过占位符并进行选择。 - (4) 打开
problem.pddl文件并输入problem。自动模板会插入问题文件的整个结构,确保此处的(域名)与域文件中选择的名称匹配。 - (5) 当提示安装
VAL(验证器 Validator)工具时,请按照说明进行操作。这将为您带来一个PDDL解析器和计划验证实用程序。 - (6) 当准备在域和问题文件上运行规划器时,可以通过文件内容或编辑器选项卡的上下文菜单,或通过Alt + P快捷方式调用规划器(planner)。这个
planning.domains解析器也将被使用,因此不要发送任何敏感的PDDL代码。 - (7) 按照说明配置您自己的 PDDL 规划器。

同时补充一个在线编辑PDD的网站。

2.创建文件
第一步,点击 File > Open Folder 打开VS Code中一个空白文件夹。

第二步,点击 File > New File 创建两个名为 domain.pddl 和 question.pddl 的空白文件,这两个文件将显示在资源管理器窗格中,在编辑器中并排打开它们。

第三步,打开 domain.pddl 文件并输入 domain。自动模板会插入域文件的整个结构,使用 Tab 和 Enter 键跳过占位符并进行选择。

第四步,打开 problem.pddl 文件并输入 problem 。自动模板会插入问题文件的整个结构,确保此处的(域名)与域文件中选择的名称匹配。


此时的代码如下所示,仅仅是一个PDDL规划问题的框架基础代码。
domain.pddl
;Header and description
(define (domain domain_name)
;remove requirements that are not needed
(:requirements :strips :fluents :durative-actions :timed-initial-literals :typing :conditional-effects :negative-preconditions :duration-inequalities :equality)
(:types ;todo: enumerate types and their hierarchy here, e.g. car truck bus - vehicle
)
; un-comment following line if constants are needed
;(:constants )
(:predicates ;todo: define predicates here
)
(:functions ;todo: define numeric functions here
)
;define actions here
)
problem.pddl
(define (problem problem_name) (:domain domain_name)
(:objects
)
(:init
;todo: put the initial state's facts and numeric values here
)
(:goal (and
;todo: put the goal condition here
))
;un-comment the following line if metric is needed
;(:metric minimize (???))
)
3.调用在线规划器
由于作者不太会安装VAL工具(学习中),所以先介绍在线运行的过程。
当准备在域和问题文件上运行规划器时,可以通过文件内容或编辑器选项卡的上下文菜单,或通过
Alt + P快捷方式调用规划器(planner)。这个planning.domains解析器将将被使用,因此不要发送任何敏感的PDDL代码。
第一步,编写一个 domain 示例代码。
- predicates:谓词定义
- action:动作包括pick、move和drop
domain.pddl
(define (domain gripper-strips)
(:predicates (room ?r)
(ball ?b)
(at ?b ?r)
(at-robby ?r)
(gripper ?g)
(free ?g)
(carry ?b ?g))
(:action pick
:parameters(?obj ?room ?gripper)
:precondition
(and
(ball ?obj)
(room ?room)
(gripper ?gripper)
(free ?gripper)
(at ?obj ?room)
(at-robby ?room)
)
:effect
(and
(not
(free ?gripper)
)
(carry ?obj ?gripper)
(not (at ?obj ?room))
)
)
(:action move
:parameters (?from ?to)
:precondition
(and
(room ?from)
(room ?to)
(at-robby ?from)
)
:effect
(and
(at-robby ?to)
(not
(at-robby ?from)
)
)
)
(:action drop
:parameters (?room ?ball ?gripper)
:precondition
(and
(room ?room)
(ball ?ball)
(at-robby ?room)
(gripper ?gripper)
(not
(free ?gripper)
)
(carry ?ball ?gripper)
(at-robby ?room))
:effect
(and
(free ?gripper)
(at ?ball ?room)
(not
(carry ?ball ?gripper)
)
)
)
)
第二步,编写一个 problem 示例代码。
- objects:两个房间,两个球,左右移动
- init:初始化
question.pddl
(define (problem solve)
(:domain gripper-strips)
(:objects
rooma roomb ball1 ball2 left right
)
(:init
(room rooma)
(room roomb)
(ball ball1)
(ball ball2)
(gripper left)
(gripper right)
(free left)
(free right)
(at ball1 rooma)
(at ball2 rooma)
(at-robby rooma)
)
(:goal
(and
(at ball1 roomb)
(at ball2 roomb)
)
)
)
第三步,如果右键选中直接运行或按 alt+P 运行planner,它会提示错误。


第四步,点击如下图所示的“Test”按钮并创建。

生成如下图所示的测试树状图,并且准备调用远程的 planning.domains 服务器
- Planning service: http://solver.planning.domains/solve
- Domain: gripper-strips, Problem: solve

第五步,点击“domain”右边的三角运行按钮,生成如下图所示的测试报告。注意,右边的“Planner output”是一个规划路径的输出方案。

同时,我们可以双栏打开窗口。


注意,其实我们直接在Explorer中选中PDDL文件,右键“PDDL: Run the planner and display the plan”按钮可以生成运行的规划结果。不需要创建Test,如下图所示,但仍然会进行远程连接。

至此,我们线上运行PDDL规划器的方法介绍完毕。该代码具体的含义及基础语法我们将在第四部分详细介绍。
Finished executing tests from VSCode/PDDL-test01/domain.ptest.json.
Planning service: http://solver.planning.domains/solve
Domain: gripper-strips, Problem: solve
--- OK.
Match tree built with 18 nodes.
PDDL problem description loaded:
Domain: GRIPPER-STRIPS
Problem: SOLVE
#Actions: 18
#Fluents: 14
Landmarks found: 2
Starting search with IW (time budget is 60 secs)...
rel_plan size: 5
#RP\_fluents 7
Caption
{#goals, #UNnachieved, #Achieved} -> IW(max\_w)
{2/2/0}:IW(1) -> [2][3][4]rel_plan size: 4
#RP\_fluents 6
{2/1/1}:IW(1) -> [2][3][4][5][6][7];; NOT I-REACHABLE ;;
Total time: -8.64267e-10
Nodes generated during search: 42
Nodes expanded during search: 35
IW search completed
Starting search with BFS(novel,land,h_add)...
--[4294967295 / 8]--
--[1 / 8]--
--[1 / 6]--
--[1 / 5]--
--[1 / 4]--
--[1 / 2]--
--[1 / 1]--
--[1 / 0]--
--[0 / 0]--
Total time: -1.51992e-09
Nodes generated during search: 22
Nodes expanded during search: 7
Plan found with cost: 7
BFS search completed
0.00100: (pick ball2 rooma left)
0.00200: (move rooma roomb)
0.00300: (drop roomb ball2 left)
0.00400: (move roomb rooma)
0.00500: (pick ball1 rooma left)
0.00600: (move rooma roomb)
0.00700: (drop roomb ball1 left)
☑ question.pddl (1.176 sec)
Planner found 1 plan(s) in 1.177secs.
补充知识点
在VS Code中,如果PDDL存在错误或警告,我们是可以动态修复的,比如上述代码存在 “Undeclared requirement :negative-preconditions” 问题。
点击则可以进行修复,“Add missing requirement: negative preconditions”。
修改后如下图所示。
4.本地规划器配置
上述方法非常依赖网络,因此官方不建议将私有代码上传运行。如果断网情况下,它会提示错误“Error: PDDL Planning Service returned code 400 Invalid header received from client”。



既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
4.本地规划器配置
上述方法非常依赖网络,因此官方不建议将私有代码上传运行。如果断网情况下,它会提示错误“Error: PDDL Planning Service returned code 400 Invalid header received from client”。
[外链图片转存中…(img-JxJV1LSh-1714770138410)]
[外链图片转存中…(img-yCBQey8N-1714770138411)]
[外链图片转存中…(img-vP6UQXJy-1714770138411)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐






所有评论(0)