有疑问可邮箱联系博主本人:sfreebobo@163.com。
前言
此文章我会根据自身经验对有兴趣学习PDDL的同学做出一定的简单介绍与相关工具推荐,并且会一直对此博文进行更新。(2021/12/02)
更新日志
- 2022/5/9 更新了"本地规划器的快速部署:Optic、Metric-FF"。
- 2022/6/15 更新了VSCODE插件负责人的PDDL建模(Modeling in PDDL)教学链接,加入本地WEB调用规划器(planning as a service)。
- 2023/12/21
- 更新了TFD的仓库地址:由于原有官方gitlab仓库失踪,所以更新为github上的替代仓库
- 更新了planutils的使用介绍(这个蛮好用的,如果大家不太清楚具体使用逻辑请评论告知,我可以单独出个新手入门指南)
一、简介
PDDL发展多年,目前已经有PDDL1.0最初的Strips版本发展到如今PDDL3.1加强时态版。当我们打算开始学习PDDL的时候一定要清楚的知道自己所要解决的问题应使用何种PDDL版本进行求解,如果涉及到时态问题,那就是PDDL2.1、PDDL2.2、PDDL3 +的范围。但是一定要注意,有时候一个规划器虽写明支持相应PDDL版本语法,但是它可能只是支持部分语法,我个人尝试经验中就发现PDDL3的语法是90%(保守)以上的规划器都不支持的,所以如果需要PDDL3的语法进行问题求解请慎重考虑自己的想法,或许可以换条路走。
总结:推荐使用经典的PDDL2.1语法进行问题规划。
二、基础学习资料介绍:
第一步: 基本语法的学习
首先我们需要了解基本的PDDL语法,清楚其可以以何种形式去定义求解问题后,我们才能继续进行学习,所以这里推荐通过半小时的时间速阅过所有PDDL版本以及其语法点后再进行下一步的学习。
有一定基础的可以看这下MOOC视频,增加对问题求解的认知。
第二步:通过大量代码案例来进一步加强语法了解
我们可以通过往届规划器比赛所使用案例进行学习,其中案例可以在Vscode插件所提供的planning.domains中进行本地请求加载或是去国际规划器比赛的代码库直接找Demo。
International Planner Competition (国际规划器比赛)
- IPC2018比赛: https://ipc2018.bitbucket.io/
- IPC2018比赛[经典赛道]:https://ipc2018-classical.bitbucket.io/#planners
- IPC2018比赛[时序赛道]:这个访问不到了,直接打开规划器代码仓库吧https://bitbucket.org/ipc2018-temporal/
1、使用VScode本地运行
搜索"PDDL"安装此插件,同时进入插件配置安装语法检查器
2、使用线上editer运行: 线上规划器官网地址/
在Vscode默认的“alt+p”调用规划器就是调用的这个网站的api地址: http://solver.planning.domains/
-
线上编辑器地址, 这个也可以保存session结合vscode一起使用
-
AI-planning规划组织Github地址,这个线上的项目就是由这个规划组织中的https://github.com/AI-Planning/cloud-solver这个项目,由Christian Muise组织制作的,有兴趣的可以通过Heroku部署自己的求解服务器。
!!!注意:线上规划器默认是不支持时态规划语法的,需通过加载相应插件才能解析。
第三步:选择自己的规划器
如果你不清楚你所需要的PDDL语法,请返回前面查看相应条目进行基础学习,明确版本。
具体自己的问题后再选择合适的规划器
!!!事先说明:大部分规划器编译环境都较为古早,如Ubuntu14、Ubuntu16等,如下载后遇到编译问题,可以尝试更换系统版本或gcc、g++、cmake等软件版本进行调试。
1、Temporal Related (时态相关)
-
TFD:
http://gki.informatik.uni-freiburg.de/tools/tfd/downloads.html原仓库已404,替代版本:https://github.com/caelan/TemporalFastDownward -
The ENHSP Planner: https://gitlab.com/enricos83/ENHSP-Public (未试验)
-
OPTIC: https://nms.kcl.ac.uk/planning/software/optic.html
OPTIC规划器是我目前了解到有PDDL3.0部分语法支持,注意,仅仅是部分而已,我并不推荐使用PDDL3.0语法进行问题规划,因为我目前(2021)没了解到有一款能够完整支持的规划器。
这个有两个版本:
(1)optic-clp,kcl网站上面有编译好的,linux环境均可。
(2)optic-cplex,可用于求解更大的问题,需要安装CPLEX,学校在列表里面的可以免费试用学术版,不过我在安装后个人并未发现史诗级提升,或许是本人问题定义不在此提升范畴。 -
POPF:https://nms.kcl.ac.uk/planning/software/popf.html
这个与Optic同出一脉,虽说Optic支持PDDL3.0的语法,但是目前最为通用的时态规划器却是POPF,由此也可看出Optic对PDDL3.0的不成熟。 -
TemporAl:https://bitbucket.org/ipc2018-temporal/team3/src/master/
这个出现在IPC2018时序赛道第一,说明中结合了多个规划器来解决各种问题。(未试验)
2、STRIP | ADL Related (无时态要求)
-
JavaFF: https://github.com/dpattiso/javaff
基于FF的java版本,需自行编译打包 -
Metric FF: https://fai.cs.uni-saarland.de/hoffmann/metric-ff.html
基于FF写的Metric版本,可以说Metric很强,不仅支持ADL,同时扩充了Numeric Fluents的支持(比如在action的前提中加入数值的判定),不过虽然NF是PDDL2.1的语法,但是Metric-FF版本没有加入Durative-action的求解,所以推荐无时态要求的同学进行使用。
3. 容器封装
如果你未确定自己的问题与哪个规划器最契合,那么你可以尝试planutils,planutils结合虚机提供了最新最全的规划器安装方式。
- Planutils: https://github.com/AI-Planning/planutils (2020新鲜出炉)
1、可通过docker直接部署调用planutils,多个规划器任你选用。(Docker里面也是安装singularity进行规划器调用的)
2、Python安装,https://pypi.org/project/planutils/
进阶1:可以搭配本地Web服务一同使用: 本地Web调用规划器: planning-as-a-service
进阶2:可以构建自己的singularity容器对规划器进行快速调用:singularity安装地址
通过以上三步我相信大家会对PDDL有了一个基本了解,剩下的就是不断完善自己的问题定义,并结合所选规划器的性能、设计、语法支持去进行这样一个求解问题的学习,如有任何问题都可以私信询问或是邮箱联系,由于时间安排,消息不一定能够及时回复也请谅解。
三、本地快速部署运行规划器
这里我选用Optic、SGPlan和Metrics-FF来进行演示,分别对应时态问题和非时态问题。
时态:Optic-CLP
optic-cplex 版更换的为求解器,其中cplex需要教育账号申请或购买,经本人19年的尝试经验,其对于大部分规划问题提升并不明显,不过具体问题具体讨论,有需求的同学可以进行调试部署。
Optic原有开发环境为Ubuntu14,所以现在一般直接下载编译会发现gcc或各类库包的版本对应不上,需要自行修改头文件里面的库包版本再编译,这里使用的是我19年修改编译好后的一个版本库https://github.com/Dongbox/optic-clp-release,下载后直接赋值chmod +x optic-clp
后调用即可,基本调用为optic-clp domain.pddl problem.pddl
。
optic默认求解的时候一般会根据约束优化结果,在得到一个结果后使用best-first search进行求解(打印G表明在搜索中),但是一般都求不出更好的结果,如果有应用需求的可以使用timeout获取到规划器的一个结果。
查看KCL官方网址获得更多使用说明:https://nms.kcl.ac.uk/planning/software/optic.html
时态:SGPlan
SGPlan能适应更多语法(或者说不会出现莫名其妙的报错),但执行效率没有Optic高(单个人使用经历而言),所以如果想要快速开始可以使用SGPlan先构建自己的模型,需要优化再迁移到Optic上使用。
主页:https://wah.cse.cuhk.edu.hk/wah/programs/SGPlan/
下载最新版本:
https://wah.cse.cuhk.edu.hk/wah/programs/SGPlan/SP5/sgplan522.zip
下载解压给权限一套操作chmod +x sgplan522
基本操作样例:
./sgplan522 -o ~/work/covid_resolution/domain.pddl -f ~/work/covid_resolution/problem.pddl -out ~/work/covid_resolution/plan
,-o对应domain领域文件、-f对应problem问题文件、-out对应结果输出地址。
非时态:Metric-FF
这个是FF的Metric版,最近推出了windows版本https://github.com/Vidminas/metric-ff-crossplatform,当然windows版也是需要编译的,我更多会选择使用WSL作为开发环境。选择工作目录后wget https://fai.cs.uni-saarland.de/hoffmann/ff/Metric-FF-v2.1.tgz
,解压tar zxvf Metric-FF-v2.1.tgz
,进入目录,make
编译。
基本使用语法为./ff -o domain.pddl -f problem.pddl
,更多使用说明请查看https://www.ida.liu.se/~TDDC17/info/labs/planning/2011-updated/run_ff.html。
其中未安装过编译工具的可能会提示缺失库包,那么安装即可,Ubuntu20上面未发现gcc版本问题。
# 这是规划器常见库包安装
sudo apt-get install cmake coinor-libcbc-dev coinor-libclp-dev \
coinor-libcoinutils-dev coinor-libosi-dev coinor-libcgl-dev doxygen libbz2-dev bison flex
查看FF官方网址获得更多使用说明:https://fai.cs.uni-saarland.de/hoffmann/metric-ff.html