planning - 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)
”。然而,计划者似乎并没有那样计划。我很感激对此的任何澄清。
谢谢!
解决方案
条件的语义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)
值,计算动作的最大持续时间是一个简单的计算。为了获得这种灵活性,您需要指定动作持续时间 unconstrained :duration (>= ?duration 0)
,就像在咖啡机领域中一样。
现在,为了能够处理包含连续数值效应的此类模型,您将需要一个支持该:continuous-effects
要求的规划器,例如OPTIC或POPF。
推荐阅读
- python - 在 GPU 中支持更多等级(pytorch/openmpi)
- javascript - 屏幕缩小时如何制作幻灯片?
- spring-boot - 集群部署中 websocket 服务的工作
- c - 将十六进制数字反转为字符串
- ssl - 为什么 chrome 不能信任我的网站?(但 firefox 和 explorer 可以)
- python-3.x - 如何在 AIMA 代码中测试 BFS 算法以寻找路线?
- docker - kubectl 在 mac 上的 docker 容器中失败并显示“无法连接到服务器:EOF”,但在 linux 上没有
- regex - 忽略“空格键+I 或 V 或 X” - 正则表达式
- r - 如何在 facet_wrap 中改变小提琴宽度
- python - 问题 - Visual Studio 2015 的 PJSUA2 痛饮