PDDL持续行动:灵活的持续时间 [英] PDDL Durative-Action: Flexible duration
本文介绍了PDDL持续行动:灵活的持续时间的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我在PDDL2.1中实现了一个基于函数(charge_level)
的计费操作。(charge_level)
的函数值工作并更新约10赫兹。
charge
的操作,该操作将一直持续到charge_level
达到阈值。这是
(:durative-action charge
:duration ( CONTINUE UNTIL (> (charge_level) HIGH_THRES)))
:condition (and
(at start ( < (charge_level) LOW_THRES)))
:effect (and
)
))
我如何实现这一点?我试图将?duration
变量赋给charge_level
并设置:duration (> ?duration HIGH_THRES)
,但它无法成功计划。
提前谢谢!
推荐答案
答案取决于您的解决方案的两个方面:
- 您正在使用的计划器的功能
- 您为计划模型和执行/控制选择的抽象级别
对于第一个方面:如果您的域也对其他操作中的释放效果进行建模,并且如果您的规划者支持连续效果,您可以以类似于boil
操作的方式对操作进行建模:
(:durative-action boil-water
:parameters ()
:duration (>= ?duration 0)
:condition (and
(at start (and
(not (boiling))
))
(over all (and
(<= (water-temperature) 100)
))
)
:effect (and
(at start (and
(boiling)
))
(at end (and
(not (boiling))
))
(increase (water-temperature) (* #t 1.0))
)
)
您可以找到full example is here。
连续效应(increase (water-temperature) (* #t 1.0))
定义了温度随时间变化的速度。有了这一点,规划者就可以推理出行动应该需要多长时间。这就是为什么定义持续时间没有任何上限:duration (>= ?duration 0)
的原因。这是假设问题中的域或目标中有另一个操作,它要求water-temperature
具有一定的数值。否则,计划员没有理由将该操作添加到计划中。
另一种方法是使用PDDL+中定义的process
(和event
)。
charge_level
的值,您应该将其委托给您的计划执行基础设施。在实践中,作为状态推理的一部分,根据规划器外部的条件(> (charge_level) HIGH_THRES))
计算布尔谓词fully_charged
要简单得多。
这篇关于PDDL持续行动:灵活的持续时间的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文