当我们已经有了一阶逻辑时,为啥还需要 PDDL?
Posted
技术标签:
【中文标题】当我们已经有了一阶逻辑时,为啥还需要 PDDL?【英文标题】:Why do we need PDDL, when we already have first order logic?当我们已经有了一阶逻辑时,为什么还需要 PDDL? 【发布时间】:2011-09-22 05:59:56 【问题描述】:这可能是一个完全幼稚的问题,但我很想知道具体原因。为什么首先开发 PDDL?为什么我们不能使用一阶逻辑进行推理?
【问题讨论】:
Reason for the development of First Order Logic and PDDL 的可能重复项 【参考方案1】:求解效率
使用更具体的语言来表达您的问题,可以应用更具体的算法来解决问题。
从理论上讲,FOL 是不可判定的,而大多数 PDDL 风格仍然是可判定的,因为 PDDL 只能表达规划问题。例如带有参数化动作的经典规划“仅”像 EXPSPACE-complete。
当然,用更一般/表达性 FOL 表达的 EXPSPACE 完全问题仍然可以在 EXPSPACE 中解决,如果你知道的话。但是,想出一个通用的 FOL 求解器,保证仅使用指数空间来解决 EXPSPACE 中的所有问题,这有多难?
建模效率
在实践方面,使用专为规划问题建模而设计的语言来表达规划问题比用 FOL 写下来要方便得多。
难道您不喜欢编写 C++ 而不是汇编程序吗?即使您可以用 C++ 编写的所有内容都可以用汇编程序表达。
【讨论】:
只是为了正确起见:在其“典型形式”(即“具有参数化动作的经典规划”)中不是 EXPTIME-complete,而是 EXPSPACE-complete。但是,如果既没有负面的前提条件也没有负面的影响,它就变成了 EXPTIME 完备的(参见 Erol 等人在 1995 年发表的文章“领域独立规划的复杂性、可判定性和不可判定性结果”)。【参考方案2】:ziggystar 未明确提及的另一点是 - 除了使用 PDDL 比 FOL 更方便的事实之外 - 规划问题的语义与 FOL 完全不同。
虽然汇编程序和 C++ 都用于描述计算机程序(汇编程序比 C++ 更通用,因为后者被翻译成汇编程序),但 FOL 的用途与 PDDL 完全不同(而 FOL,作为 ziggystar em> 指出,比 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”。
【讨论】:
以上是关于当我们已经有了一阶逻辑时,为啥还需要 PDDL?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我们已经有了 mapDispatchToProps 还需要 redux-thunk
Angular JS:当我们已经有了具有作用域的指令控制器时,还需要指令的链接函数吗?