PDDL Durative-Action:灵活的持续时间
PDDL Durative-Action: Flexible duration
我正在 PDDL2.1 中实现基于函数 (charge_level)
的充电操作。 (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)
但它不会成功计划。
提前致谢!
答案取决于您解决方案的两个方面:
- 您正在使用的规划器的功能
- 您 select 的规划模型和 execution/control
抽象级别
对于第一个方面:如果您的域还对其他动作中的放电效果进行建模,并且如果您的规划器支持连续效果,则您可以采用类似于此 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
要简单得多。
我正在 PDDL2.1 中实现基于函数 (charge_level)
的充电操作。 (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)
但它不会成功计划。
提前致谢!
答案取决于您解决方案的两个方面:
- 您正在使用的规划器的功能
- 您 select 的规划模型和 execution/control 抽象级别
对于第一个方面:如果您的域还对其他动作中的放电效果进行建模,并且如果您的规划器支持连续效果,则您可以采用类似于此 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
要简单得多。