首页 > 解决方案 > PDDL2.1:“总体”的目的

问题描述

我正在使用 PDDL2.1 持续动作,我很难理解over all.

我有一个函数charge_level,它每 10Hz 更新一个值。在一个持续动作move中,我说condition: (over all (>= (charge_level) 12))

我将其解释为“在执行操作时,验证charge_level是否大于或等于 12,否则会move失败,并且计划者应该找到符合条件的新操作at start (< (charge_level) 12)”。然而,计划者似乎并没有那样计划。我很感激对此的任何澄清。

谢谢!

标签: planningpddl

解决方案


条件的语义over all确实正如@haz 在他的回答中所说的那样(它可以防止计划者与您的move操作并行安排另一个违反over all条件的操作),但我认为让您感到困惑的是计划和计划执行之间的区别. 在计划执行过程中,由于电池故障或传感器故障等原因,(charge_level)可能会在任何时候意外下降。在这种情况下,您的计划执行应该停止行动(以及整个计划)并重新计划。那时,计划者可以选择在新状态下满足前提条件的任何动作。所以不一定。12moveat start (< (charge_level) 12)

在计算计划时,计划者不能停止或暂停 PDDL 持续动作。然而,如果你告诉计划者,随着时间的(charge_level)推移变化如何,它可以计算move动作的最长可能持续时间,然后在将另一个动作实例move安排到同一个计划之前做一些其他的事情,例如给电池充电。在这种方法中,不涉及任何失败,只是在不违反任何约束(包括条件)的情况下推断给定动作可以持续多长时间以实现目标over all

如果这是您想要的行为,您将需要将其建模(charge_level)为一个不断变化的函数。如果你想看一个例子,这里是发电机咖啡机。这是生成器域的一瞥:

发电机不得耗尽燃料:

(over all (>= (fuel-level ?g) 0))

1燃料每单位时间减少一个单位#t

(decrease (fuel-level ?g) (* #t 1))

给定初始(fuel-level)值,计算动作的最大持续时间是一个简单的计算。为了获得这种灵活性,您需要指定动作持续时间 unconstrained :duration (>= ?duration 0),就像在咖啡机领域中一样。

现在,为了能够处理包含连续数值效应的此类模型,您将需要一个支持该:continuous-effects要求的规划器,例如OPTICPOPF


推荐阅读