是否可以在 PDDL 中进行类型比较?
Is it possible to have type comparison in PDDL?
例如,如果我这样声明类型:
:types
bag
light heavy - bag
也就是说有两种包,轻和重。是否可以在一个动作中检查 bag 类型的变量是否属于 light 类型,而无需 light 的实例 比较?
我知道可以进行这样的相等比较:
(when ( = ?light ?bag))
但这会检查两个变量是否具有相同的值,而不是相同的类型。
我尝试了 (when ( = light ?bag))
,即使规划器没有抛出错误,它似乎也不起作用。
为了回应 Chaos 教授的评论,他们指出这是不可能的,我得出了一个解决方法,我们创建谓词 (is_light ?x - light)
并在操作中使用 (when (is_light ?lightobj) (dosomething))
。初始化 light 对象时,问题文件中使用了谓词。
例如,如果我这样声明类型:
:types
bag
light heavy - bag
也就是说有两种包,轻和重。是否可以在一个动作中检查 bag 类型的变量是否属于 light 类型,而无需 light 的实例 比较?
我知道可以进行这样的相等比较:
(when ( = ?light ?bag))
但这会检查两个变量是否具有相同的值,而不是相同的类型。
我尝试了 (when ( = light ?bag))
,即使规划器没有抛出错误,它似乎也不起作用。
为了回应 Chaos 教授的评论,他们指出这是不可能的,我得出了一个解决方法,我们创建谓词 (is_light ?x - light)
并在操作中使用 (when (is_light ?lightobj) (dosomething))
。初始化 light 对象时,问题文件中使用了谓词。