如何解决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 举报,一经查实,本站将立刻删除。