PDDLStream 是一个规划框架,由动作语言和算法套件组成,用于在存在采样程序的情况下进行人工智能 (AI) 规划。 PDDLStream 通过引入流、采样过程的声明性规范来扩展规划域定义语言 (PDDL)。 PDDLStream 算法是独立于域的,并且仅通过每个采样器的黑盒描述来解决 PDDLStream 问题。 PDDLStream 的主要应用是通用机器人任务和运动规划 (TAMP)。
默认pddlstream分支(主)是pddlstream的最新稳定“版本”。向下的pddlstream分支是pddlstream的最新和高级版本,但也有些实验性。
凯兰·R·加勒特、托马斯·洛萨诺-佩雷斯、莱斯利·P·凯尔布林。 PDDLStream:通过乐观自适应规划集成符号规划器和黑盒采样器,自动规划和调度国际会议 (ICAPS),2020 年。
凯兰·加勒特:[用户名]@csail.mit.edu
PDDLStream 是 PDDLStream/STRIPStream 规划框架的“第三版本”,旨在取代以前的版本:
PDDLStream 对这些版本进行了多项表示和算法改进。最值得注意的是,它尽可能遵守 PDDL 约定和语法,并包含多种新算法。
$ git clone --recursive --branch main [email protected]:caelan/pddlstream.git
$ cd pddlstream
pddlstream$ git submodule update --init --recursive
pddlstream$ ./downward/build.py
如有必要,请参阅 FastDownward 的文档以获取更详细的安装说明。
PDDLStream 主动支持 python2.7 以及最新版本的 python3。
确保在拉取新提交时递归更新pddlstream的子模块。
pddlstream$ git pull --recurse-submodules
该存储库包含多个机器人和非机器人 PDDLStream 示例域。
使用以下命令在 OS X 或 Linux 上安装 PyBullet:
$ pip install pybullet numpy scipy
示例:
pddlstream$ python -m examples.pybullet.tamp.run
pddlstream$ python -m examples.pybullet.pr2.run
pddlstream$ python -m examples.pybullet.turtlebot_rovers.run
pddlstream$ python -m examples.pybullet.pr2_rovers.run
pddlstream$ python -m examples.pybullet.pr2_belief.run
pddlstream$ python -m examples.pybullet.kuka.run
有关我的 PyBullet 规划基元库的更多信息,请参阅 https://github.com/caelan/pybullet-planning。
使用以下命令在 Linux 上安装 numpy 和 Python TKinter:
$ sudo apt-get install python-tk
$ pip install numpy
示例:
pddlstream$ python -m examples.continuous_tamp.run
pddlstream$ python -m examples.motion.run
pddlstream$ python -m examples.discrete_tamp.run
pddlstream$ python -m examples.discrete_tamp.run
无需额外依赖即可运行的简单示例:
pddlstream$ python -m examples.blocksworld.run
pddlstream$ python -m examples.blocksworld.run_derived
pddlstream$ python -m examples.kitchen.run
测试用例或高级(且未记录)功能:
pddlstream$ python -m examples.advanced.adl.run
pddlstream$ python -m examples.advanced.defer.run
pddlstream$ python -m examples.advanced.exogenous.run
pddlstream$ python -m examples.advanced.fluent.run
pddlstream$ python -m examples.advanced.satisfy.run
pddlstream$ python -m examples.advanced.wild.run
使用 PDDLStream 的修改转换器解决的未修改的 PDDL IPC 示例:
pddlstream$ python -m examples.ipc.rovers.run
pddlstream$ python -m examples.ipc.satellites.run
使用 PDDLStream 的外部项目:
PDDLStream 是一个由单一规划语言和多种规划算法组成的规划框架。有些算法与其他算法完全不同(例如增量算法与聚焦算法),因此规划时间也可能有很大差异。自适应算法通常对于具有许多可能采样路径的领域(例如机器人操作领域)表现最佳。
元过程solve(...)允许用户使用关键字参数algorithm={}在可用算法之间切换。
属性说明:
许多(但不是全部) pddlstream算法都有一个离散规划阶段,可以使用任何有限状态空间搜索算法来实现,例如广度优先搜索 (BFS) 和均匀成本搜索 (UCS)。然而,由于pddlstream扩展了 PDDL,因此该规划阶段也可以通过最先进的经典规划算法来实现,该算法利用 PDDL 等动作语言的分解结构来极大地提高经验规划效率。最佳优先启发式搜索算法以与域无关的方式自动导出启发式,是这些算法的一个示例类。
pddlstream预先打包了 FastDownward,这是一个丰富的库,其中包含许多最佳优先启发式搜索 PDDL 规划算法。我在 SEARCH_OPTIONS 中预先配置了少量有效且通用的搜索算法,可以使用关键字参数 planner=? 进行切换。我粗略地按照从最不懒惰(最低成本)到最懒惰(最低运行时间)的顺序对它们进行了排名:
离散规划阶段的运行时间根据所选的搜索算法而变化。对于许多非对抗性问题,这些算法要么立即解决问题,要么如果不够贪婪,则不会在 10 分钟内终止。我建议从一种更贪婪的配置开始,如果需要的话,可以转向一种不那么贪婪的配置。
任何PDDL规划算法都可以用来代替FastDownward;然而,需要注意的是,其中一些规划器仅用于支持一组有限的表征特征(例如,没有条件效应、没有派生谓词等),这可能会使建模更加困难,并最终在许多实际情况中降低规划效率。 -世界(非IPC)规划领域。虽然我强烈推荐 FastDownward,但我过去接触过的一些 PDDL 规划器并取得了一些成功,包括:
古典规划师
数字规划师:
时间规划师:
多样化的规划者:
“退役”文件夹表示不再持续受支持的代码,因此可能已过时。
按照以下说明在 OS X 或 Ubuntu 上安装 Drake:http://drake.mit.edu/installation.html。
或者,按照以下说明通过 docker 安装 Drake:http://manipulation.csail.mit.edu/install_drake_docker.html。使用带有 docker 标签 drake-20181128 的适当 docker_run_bash 脚本。
示例:
~/pddlstream$ python -m examples.drake.run
其他 PDDLStream + Drake 示例可在以下位置找到:https://github.com/RobotLocomotion/6-881-examples。