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;然而,需要注意的是,其中一些規劃器僅用於支援一組有限的表徵特徵(例如,沒有條件效應、沒有派生謂詞等),這可能會使建模更加困難,並最終在許多實際情況中降低規劃效率。雖然我強烈推薦 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。