【问题标题】:How to check conditions in PDDL?如何检查 PDDL 中的条件?
【发布时间】:2020-04-13 11:51:46
【问题描述】:

我必须创建 PPDL,其中车辆在地图上运输货物。车辆具有承载多少货物的能力。在车辆装载货物之前,它需要知道车辆是否有足够的容量来承载该货物。如何为车辆对象分配容量?

我见过这样的例子:

< (passengers ?lift) (capacity ?lift)

很明显,在这种情况下,“电梯”具有容量属性和乘客属性。有人可以提供这个对象声明的外观示例吗?

为这个糟糕的问题道歉,我是 PDDL 的新手,并且仍在努力解决这个问题。

这是我将货物装载到车辆上的装载函数:

  (:action load
     :parameters (?vehicle ?cargo ?location)
     :precondition (and (at?vehicle ?location)  (at ?cargo ?location) (< (loadedCargo ?vehicle) (capacity ?vehicle)))
     :effect (and (at ?c ?vehicle) (increase(loadedCargo ?vehicle) + 1))

另一个问题是有不同类型的车辆,我们需要一种方法来确定我们要装载哪种类型的车辆,因为不同的车辆具有不同的容量。

我很确定我使用的是 PDDL 2.1

【问题讨论】:

    标签: artificial-intelligence planning pddl


    【解决方案1】:

    这完全取决于您愿意使用的计划类型。如果它是 2.1,那么您可以使用数字变量来做您想做的事情(这就是您在该示例中找到的内容)。论文 [here] 中的图 1 也显示了这一点。

    如果您希望使用的只是经典规划,那么您需要在编码方面更聪明一点。需要创建像 (capacity ?vehicle ?num) 这样的谓词,其中 ?numnumber 类型的对象,并且您创建有限数量的谓词。如果您的容量足够小,这可以工作。

    与往常一样,一个工作示例将有助于您了解您遇到的问题。


    编辑:确认PDDL2.1后

    您发布的 PDDL 中我可以看到的问题:

    • at?vehicle 中缺少空格
    • 前提条件中您的容量检查应包括货物尺寸。例如,

      (&lt; (+ (loadedCargo ?vehicle) (cargosize ?cargo)) (capacity ?vehicle))

    • (at ?c ?vehicle) 中的变量名错误(应为 ?cargo
    • 您的增加应使用中缀符号并包括货物尺寸:(increase (loadedCargo ?vehicle) (cargosize ?cargo))
    • 您需要从当前位置移除货物作为效果:(not (at ?cargo ?location))

    我认为这是我在示例中看到的所有问题,但我还没有测试过。

    【讨论】:

    • 我已经对我的问题进行了编辑,我认为我使用的是 2.1。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-07
    • 2019-10-23
    • 1970-01-01
    • 2017-05-05
    • 2021-10-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多