常见的parser支持基础内容¶
BNF文法描述PDDL: pddl3BNF https://github.com/nergmada/planning-wiki/blob/master/_citedpapers/pddl3bnf.pdf
github仓库合集 https://github.com/topics/pddl ,其中parser有很多:
python
https://github.com/hfoffani/pddl-lib 一个PDDL库,通过使用**ANTLR 4**语法来解析PDDL文件,它提供了一个非常简单的界面来与域问题进行交互。该库发布一个对象类,其API公开了用于获取以下内容的方法:
- 初始状态。
- 目标。
- 运算符列表。
- 正面和负面的先决条件以及正面和负面的影响。
- 给定算子的*接地*状态(接地变量,前提条件和影响)。
用户足以专注于状态空间或计划空间搜索算法的实现。
pip install pddlpy
西班牙组universal-pddl-parser https://github.com/wisdompoet/universal-pddl-parser 一种用于解析PDDL格式的任何计划问题的算法。当前支持STRIPS计划,时间计划,多主体计划。Scons构建。
https://github.com/makintunde/ply-pddl-parser A PDDL parser written using PLY.
a collection of utilities to read PDDL and POND (Partially-Observable Non-Deterministic) files.https://github.com/boompig/pddl-parser-2
java https://github.com/gerryai/pddl-parser
js
pddl2json
尝试针对pegjs.org的基本STRIPS PDDL语法分析器。 实例学习怎么从pddl到json结构化数据
https://gist.github.com/primaryobjects/22363e71112d716ea183
pip install pddlpy#pddl parser
# 读取pddl文件进入内存,变成python可以访问的结构化数据格式
# 需要函数pddl2json则是输出转换json结构,这种结构化文件网络编程javascript几乎唯一选择
https://pegjs.org/online 在线工具peg.js
https://www.upf.edu/web/ai-ml/universal-pddl-parser 其学校介绍软件的网页
AIG软件资料库 UPF人工智能与机器学习小组,巴塞罗那
FOND/QNP的parser¶
qnp看作DFA的话,其实随着sensor(x>0 or x == 0)可以确定直到下一个动作,而FOND看作NFA的话,则是更多的现有solver正在做的事。我认为部分的原因是parser。两个都描述那样一张有些节点有两个后续状态的迁移图,表现力等价.高阶语言QNP/FOND巧妙设计量化值解决实例数量/参数未定CP问题更简单的描述,不需要像递阶语言STRPIPS逻辑公式中层层嵌套forall/exists等效表示临界状态(异或后继状态展开一阶逻辑公式不唯一已经很要命了)。
qnp严格来说或者需要时序相关动作或者直接输入一张迁移图的边。而FOND只需要定制一个节点可以用(oneof 几个候选后继状态)
表示*互斥或*(**xor**每次只有一个后继状态满足a⊕b = (¬a ∧ b) ∨ (a ∧¬b)=(a ∧ b) ∨ (¬a ∧¬b)=(a ∧ b) ∨ ¬(a ∨ b)
a⊕b =(a ∨ b) ∧ (¬a ∨ ¬b)=(a ∨ b) ∧ ¬ (a ^ b)
但是不会出现两者都假的后续状态,xor二元运算符经过柯里化就能实现任意元switch case选择后继状态语句功能),而不是逻辑中**or**的*相容或*不可以cnt既大于零又等于零。
*FOND-SAT*用了*PRP*里的parser定制:requirement :non-deterministic
for effect \(X_i > 0 /X_i =0\),来描述PDDL输入的非确定性状态图,就是他们源码文件夹的translator下都一样。和MyND文件下translator-fond文件夹一摸一样,MyND除了translator-fond还有translator-pond部分可观测的pddl输入的parser文件。PRP也能处理pond的pddl输入,不太确定是谁先写的parser。