PDDL持续行动:灵活的持续时间 [英] PDDL Durative-Action: Flexible duration

查看:10
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆