首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PDDL错误编译

PDDL错误编译
EN

Stack Overflow用户
提问于 2017-09-01 13:16:37
回答 1查看 6.5K关注 0票数 0

我刚开始使用PDDL,我一直在尝试blocksworld问题,但是我得到了错误:

未能解析问题-没有args必须是一个只有一个元素的列表,在第16行(‘:需要域定义)第16行中获得了原始sobre (default_object ?obj,default_object ?obj 2),原语libre (default_object ?obj 3),原语en (default_object ?obj,default_object ?from)的语法错误。

我的档案是:

代码语言:javascript
复制
(define (domain blocly)
   (:predicates (espacio ?e)  
        (ficha ?t)  
        (sobre ?t ?t)  
        (en ?t ?e)  
        (vacio ?e)  
        (libre ?t))  


    (:action movefichaficha
       :parameters (?ficha ?ficha2 ?ficha3 ?from ?to)
       :precondition (and  (ficha ?ficha) (ficha ?ficha2) (ficha ?ficha3) (espacio ?from) (espacio ?to)
                     (sobre ?ficha ?ficha2) (libre ?ficha) (libre ?ficha3) (en ?ficha ?from) (en ?ficha2 ?from) 
                     (en ?ficha3 ?to))
       :effect (and (sobre ?ficha ?ficha3) (en ?ficha ?to) (libre ?ficha2)
               (not (sobre ?ficha ?ficha2) (libre ?ficha3) (en ?ficha ?from)))) 

    (:action movefichaesp
       :parameters (?ficha ?ficha2 ?from ?to)
       :precondition (and  (ficha ?ficha) (ficha ?ficha2) (espacio ?from) (espacio ?to)
                     (sobre ?ficha ?ficha2) (vacio ?to) (en ?ficha ?from) (en ?ficha2 ?from))
       :effect (and  (libre ?ficha2) (en ?ficha ?to) (arriba ?ficha ?to)
               (not (vacio ?to) (en ?ficha ?from) (sobre ?ficha ?ficha2))))

    (:action moveoespficha
       :parameters  (?ficha ?ficha2 ?from ?to)
       :precondition (and  (ficha ?ficha) (ficha ?ficha2) (espacio ?from) (espacio ?to)
                     (libre ?ficha) (libre ?ficha2) (en ?ficha ?from) (en ?ficha ?to) ())
       :effect (and  (vacio ?from) (en ?ficha ?to) (sobre ?ficha ?ficha2)
             (not (libre ?ficha2) (en ?ficha ?from) (en ?ficha ?from)))))

而这些:

代码语言:javascript
复制
(define (problem blockly-world)  
   (:domain blocly)  
   (:objects t1 t2 t3 e1 e2 e3)  
   (:init (ficha t1)   
          (ficha t2)  
          (ficha t3)  
          (espacio e1)  
          (espacio e2)  
          (espacio e3)  
          (sobre t3 t2)  
          (sobre t2 t1)  
          (en t1 e1)  
          (en t2 e1)  
          (en t3 e1)  
          (libre t3)  
          (vacio e2)  
          (vacio e3))  
   (:goal (and (sobre t1 t2)  
               (sobre t2 t3)))  
EN

回答 1

Stack Overflow用户

发布于 2017-09-01 21:24:10

源代码中存在一些问题。

  • 问题文件缺少最终的)
  • 一元 not逻辑运算符使用不当。 (非(vacio ?to) (en ?ficha ?from) (sobre ?ficha ?ficha 2)) 应该重写为 (不)(不)
  • 域文件使用未声明的谓词arriba。由于它对en有相同的定义--在(:init ...)块中没有提到--所以我不确定这是否是因为将arriba重命名为en而忘记更改最后一次出现的错误,还是没有。如果不是错误,您可以通过添加 (阿里巴) 添加到谓词列表中。您应该检查自己是否需要向问题文件中的(:init ...)块添加某些内容。

下面,您可以找到源代码的适当缩进版本,并对前两个已识别的问题进行适当的修复,并尝试解决第三个问题:

blocky-prob.pddl:

代码语言:javascript
复制
(define (problem blockly-world)  
    (:domain blocly)  
    (:objects t1 t2 t3 e1 e2 e3)  
    (:init
          (ficha t1)   
          (ficha t2)  
          (ficha t3)  
          (espacio e1)  
          (espacio e2)  
          (espacio e3)  
          (sobre t3 t2)  
          (sobre t2 t1)  
          (en t1 e1)  
          (en t2 e1)  
          (en t3 e1)  
          (libre t3)  
          (vacio e2)  
          (vacio e3)
    )  
   (:goal (and
              (sobre t1 t2)
              (sobre t2 t3)
          )
   )
) 

block-domain.pddl:

代码语言:javascript
复制
(define (domain blocly)
    (:predicates
        (espacio ?e)  
        (ficha ?t)  
        (sobre ?t ?t)  
        (en ?t ?e)
        (arriba ?t ?e)
        (vacio ?e)  
        (libre ?t)
    )  

    (:action movefichaficha
        :parameters (?ficha ?ficha2 ?ficha3 ?from ?to)
        :precondition
            (and
                (ficha ?ficha)
                (ficha ?ficha2)
                (ficha ?ficha3)
                (espacio ?from)
                (espacio ?to)
                (sobre ?ficha ?ficha2)
                (libre ?ficha)
                (libre ?ficha3)
                (en ?ficha ?from)
                (en ?ficha2 ?from) 
                (en ?ficha3 ?to)
            )
        :effect
            (and
                (sobre ?ficha ?ficha3)
                (en ?ficha ?to)
                (libre ?ficha2)
                (not (sobre ?ficha ?ficha2))
                (not (libre ?ficha3))
                (not (en ?ficha ?from))
            )
    )

    (:action movefichaesp
        :parameters (?ficha ?ficha2 ?from ?to)
        :precondition
            (and
                (ficha ?ficha)
                (ficha ?ficha2)
                (espacio ?from)
                (espacio ?to)
                (sobre ?ficha ?ficha2)
                (vacio ?to)
                (en ?ficha ?from)
                (en ?ficha2 ?from)
            )
        :effect
            (and
                (libre ?ficha2)
                (en ?ficha ?to)
                (arriba ?ficha ?to)
                (not (vacio ?to))
                (not (en ?ficha ?from))
                (not (sobre ?ficha ?ficha2))
            )
    )

    (:action moveoespficha
        :parameters  (?ficha ?ficha2 ?from ?to)
        :precondition
            (and
                (ficha ?ficha)
                (ficha ?ficha2)
                (espacio ?from)
                (espacio ?to)
                (libre ?ficha)
                (libre ?ficha2)
                (en ?ficha ?from)
                (en ?ficha ?to) 
            )
        :effect
            (and
                (vacio ?from)
                (en ?ficha ?to)
                (sobre ?ficha ?ficha2)
                (not (libre ?ficha2))
                (not (en ?ficha ?from))
                (not (en ?ficha ?from))
            )
    )
)

在我的机器上,PDDL解算器fast-downward.py正确地解析了代码,这也找到了解决方案。因为我不知道您想要建模什么,所以我无法验证它是否与您想要的模型匹配。

注释:即使您只是为了个人原因而学习,也可以考虑养成使用英文名称作为谓词、对象和变量的习惯。此外,考虑到缩进源代码和恰当地描述您正在处理的情况有双重好处,既吸引了你的问题,也吸引了你的问题的好答案。

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

https://stackoverflow.com/questions/46001120

复制
相关文章

相似问题

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