我必须创建PPDL,在其中车辆通过地图运输货物。一辆车的载客量取决于它能运载多少货物。在车辆装载货物之前,它需要知道车辆是否有足够的容量来运载该货物。如何为vehicle对象分配容量?
我见过这样的例子:
< (passengers ?lift) (capacity ?lift)所以很明显,在这个场景中,'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
发布于 2020-04-13 20:41:56
这完全取决于您愿意使用的规划类型。如果它是2.1,那么您可以使用数值变量来执行您想要的操作(这就是您在该示例中发现的)。论文[here]中的图1也显示了这一点。
如果这只是你希望使用的经典规划,那么你需要在编码方面更聪明一点。在?num是number类型的对象的情况下,需要创建像(capacity ?vehicle ?num)这样的谓词,而您可以创建有限数量的谓词。如果你的能力足够小,这是可行的。
一如既往,一个有效的示例将有助于您了解问题的症结所在。
编辑:确认PDDL2.1后
我可以看到您发布的PDDL存在的问题:
前提条件中的at?vehicle
增加中的(< (+ (loadedCargo ?vehicle) (cargosize ?cargo)) (capacity ?vehicle))
?cargo)
(increase (loadedCargo ?vehicle) (cargosize ?cargo))
(not (at ?cargo ?location))我认为这就是我在示例中看到的所有错误,但我还没有对其进行测试。
https://stackoverflow.com/questions/61187292
复制相似问题