首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PDDL2.1:“总括”的目的

PDDL2.1:“总括”的目的
EN

Stack Overflow用户
提问于 2020-09-14 14:20:46
回答 2查看 172关注 0票数 1

我正在使用PDDL2.1持续性操作,我很难理解over all的目的。

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

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

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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

票数 1
EN

Stack Overflow用户

发布于 2020-09-14 15:03:34

如果您只想防止基于条件的操作发生,则使用at startover all用于必须在整个操作期间保持的条件。所以你可以把你的状态解释为,“在整个移动过程中,千万不要让电池水平降到12以下”。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63886211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档