首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何检查PDDL中的条件?

如何检查PDDL中的条件?
EN

Stack Overflow用户
提问于 2020-04-13 19:51:47
回答 1查看 175关注 0票数 0

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

我见过这样的例子:

代码语言:javascript
复制
< (passengers ?lift) (capacity ?lift)

所以很明显,在这个场景中,'lift‘有一个容量属性和一个乘客属性。有没有人能举例说明这个对象声明是什么样子?

对于这个糟糕的问题,我很抱歉,我是PDDL的新手,并且仍然在努力理解它。

以下是我的加载函数,用于将货物加载到车辆上:

代码语言:javascript
复制
  (: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

EN

回答 1

Stack Overflow用户

发布于 2020-04-13 20:41:56

这完全取决于您愿意使用的规划类型。如果它是2.1,那么您可以使用数值变量来执行您想要的操作(这就是您在该示例中发现的)。论文[here]中的图1也显示了这一点。

如果这只是你希望使用的经典规划,那么你需要在编码方面更聪明一点。在?numnumber类型的对象的情况下,需要创建像(capacity ?vehicle ?num)这样的谓词,而您可以创建有限数量的谓词。如果你的能力足够小,这是可行的。

一如既往,一个有效的示例将有助于您了解问题的症结所在。

编辑:确认PDDL2.1后

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

前提条件中的at?vehicle

  • Your容量检查中缺少空位的
  • 应包括货物大小。例如,

增加中的(< (+ (loadedCargo ?vehicle) (cargosize ?cargo)) (capacity ?vehicle))

  • Bad变量名称(应为?cargo)

  • Your increase应使用中缀表示法,并包括货物大小:(increase (loadedCargo ?vehicle) (cargosize ?cargo))

  • You需要从当前位置移除货物,其效果为:(not (at ?cargo ?location))

我认为这就是我在示例中看到的所有错误,但我还没有对其进行测试。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61187292

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档