我正在使用PDDL2.1持续性操作,我很难理解over all
的目的。
我有一个函数charge_level
,它每10赫兹更新一次。在持续性动作move
中,我说condition: (over all (>= (charge_level) 12))
.
我将其解释为“在执行操作时,验证charge_level
大于或等于12,否则move
会失败,规划者应该找到条件at start (< (charge_level) 12)
的新操作”。然而,规划者似乎并没有这样的计划。我很感激在这方面的任何澄清。
谢谢!
发布于 2020-09-25 14:21:24
over all
条件的语义确实正如@haz在他的回答中所说的那样(它阻止规划者将另一个与您的move
操作并行的违反over all
条件的操作进行调度),但是我认为让您困惑的是计划执行和计划执行之间的区别。在计划执行期间,由于电池故障或传感器故障等原因,(charge_level)
可能会在任何一点上意外跌落到12
以下。在这种情况下,您的计划执行应该停止move
操作(因此是整个计划)并重新计划。在这一点上,规划师可以选择任何行动,其中有一个满意的前提条件,在新的状态。所以不一定是at 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)
,计算动作的最大持续时间是一个简单的计算。为了实现这种灵活性,您需要指定不受约束的动作持续时间( :duration (>= ?duration 0)
),就像在咖啡机域中一样。
现在,要能够处理包括连续数值效应在内的此类模型,您需要一个支持:continuous-effects
需求的规划师,例如光学性或POPF。
发布于 2020-09-14 15:03:34
如果您只想防止基于条件的操作发生,则使用at start
。over all
用于必须在整个操作期间保持的条件。所以你可以把你的状态解释为,“在整个移动过程中,千万不要让电池水平降到12以下”。
https://stackoverflow.com/questions/63886211
复制相似问题