微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PDDL持续行动:持续时间灵活

如何解决PDDL持续行动:持续时间灵活

我正在基于功能(charge_level)的PDDL2.1中实施收费操作。 (charge_level)功能值有效并更新〜10Hz。

我想创建一个名为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的值,则应将其委托给计划执行基础结构。在实践中,根据规划器外部的条件fully_charged评估布尔谓词(> (charge_level) HIGH_THRES))更为简单,这是状态推断的一部分。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。