这可能是一个完全幼稚的问题,但我很想知道具体原因。为什么首先开发 PDDL?为什么我们不能使用一阶逻辑进行推理?
2 回答
求解效率
使用更具体的语言来表达您的问题,可以应用更具体的算法来解决它们。
从理论上讲,FOL 是不可判定的,而 PDDL 的大多数风格仍然是可判定的,因为 PDDL 只能表达规划问题。例如,带有参数化动作的经典规划是“唯一的”,如 EXPSPACE-complete。
当然,如果你知道的话,用更一般/更具表现力的 FOL 表达的 EXPSPACE 完全问题仍然可以在 EXPSPACE 中解决。但是想出一个通用的 FOL 求解器来保证仅使用指数空间来解决 EXPSPACE 中的所有问题有多难?
建模效率
在实践方面,使用为规划问题建模而设计的语言来表达规划问题比在 FOL 中写下来要方便得多。
你不想写 C++ 而不是汇编程序吗?即使您可以用 C++ 编写的所有内容都可以用汇编程序表示。
ziggystar没有明确提到的另一点是——除了使用 PDDL 比 FOL 更方便的事实之外——规划问题的语义与 FOL 完全不同。
虽然汇编程序和 C++ 都用于描述计算机程序(汇编程序比 C++ 更通用,因为后者被翻译成汇编程序),但 FOL 的用途与 PDDL 完全不同(而 FOL,正如ziggystar指出的那样,比 PDDL 更通用)。
FOL 旨在表达对象之间的陈述、命题和关系,例如(引用ziggystar的示例,来自类似问题Reason for the development of First Order Logic and PDDL)“所有人都可以思考”。通常,在使用 FOL 时,我们只关心一个公式是否成立(或者,例如,一个命题是否从另一个命题而来)。最突出的例子是以下一组命题(在 FOL 中形式化):(1)“所有人都是会死的”。(2) “苏格拉底是人。” 当使用 FOL 将其形式化时,我们可以问 (3) “苏格拉底是凡人”是否源自“(1) 和 (2)”。任何完整的 FOL 推理器都会以“是”来回答这个问题。
计划(以及因此依赖于 PDDL 描述的问题)是关于询问是否存在将初始状态(对世界先于一个动作执行的描述)转换为某个期望目标的一系列动作(即,实例化的 PDDL 运算符模式)状态。因此,计划是关于行动的执行和推理是否存在这样的序列。这基本上与FOL无关。
由于 FOL 比大多数标准规划形式(例如,“PDDL 风格”)更具表现力,因此也可以使用 FOL 来描述规划问题。然而,由于规划和 FOL 的语义完全不同,人们不得不“误用”FOL 来表达规划问题——而如何做到这一点实际上是一个复杂的研究问题。如果您有兴趣:谷歌搜索“规划为 SAT”。