0

试图找出让机器人清洁瓷砖的这个 PDDL 问题,但据我所知,我一直坚持自己做错了什么,我只有上下运动动作和清洁动作,但它仍然无法编译。它只是给我一个错误,说无法解析域文件。

这是域:

(define (domain floor-tile)

    (:requirements :typing)

    ;; We have two types: robots and the tiles, both are objects
    (:types robot tile - object)

    ;; define all the predicates as they are used in the probem files
    (:predicates  

    ;; described what tile a robot is at
    (robot-at ?r - robot ?x - tile)

    ;; indicates that tile ?x is above tile ?y
    (up ?x - tile ?y - tile)

    ;; indicates that tile ?x is below tile ?y
    (down ?x - tile ?y - tile)

    ;; indicates that tile ?x is right of tile ?y
    (right ?x - tile ?y - tile)

    ;; indicates that tile ?x is left of tile ?y
    (left ?x - tile ?y - tile)

    ;; indicates that a tile is clear (robot can move there)
    (clear ?x - tile)

    ;; indicates that a tile is cleaned
    (cleaned ?x - tile)
    )




(:action clean-up

  :parameters (?r - robot ?x - tile ?y - tile )
  :precondition (and (up ?y ?x) (robot-at ?r ?x) (clear ?y))
  :effect (and (not (clear ?y))  (cleaned ?y) 
                 
)


 (:action clean-down

  :parameters (?r - robot?x - tile ?y - tile)
  :precondition (and (down ?y ?x) (robot-at ?r ?x) (clear ?y))
  :effect (and (not (clear ?y))  (cleaned ?y) 
                
)


 
(:action up 
    :parameters (?r - robot?x - tile ?y - tile)
    :precondition (and (up ?y ?x) (robot-at ?r ?x) (clear ?y))
    :effect (and (robot-at ?r ?y) (not(robot-at ?r ?x))) 
)


(:action down 
     :parameters (?r - robot?x - tile ?y - tile)
     :precondition (and (down ?y ?x) (robot-at ?r ?x)(clear ?y))
     :effect (and (robot-at ?r ?y) 
            (not(robot-at ?r ?x))) 
)

(:action right 
     :parameters (?r - robot?x - tile ?y - tile)
     :precondition (and (right ?y ?x) (robot-at ?r ?x) (clear ?y))
     :effect (and (robot-at ?r ?y) 
            (not(robot-at ?r ?x)))    
)

(:action left 
     :parameters (?r - robot?x - tile ?y - tile)
     :precondition (and (left ?y ?x) (robot-at ?r ?x) (clear ?y))
     :effect (and (robot-at ?r ?y ) 
            (not(robot-at ?r ?x)))
)
)

这是问题所在:

(define (problem prob001)
 (:domain floor-tile)
 (:objects tile_0-1 tile_0-2  
           tile_1-1 tile_1-2  
           tile_2-1 tile_2-2  - tile
           robot1 - robot
)
 (:init 
   (robot-at robot1 tile_1-1)
   (clear tile_0-1)
   (clear tile_0-2)
   (clear tile_1-2)
   (clear tile_2-1)
   (clear tile_2-2)
   (up tile_1-1 tile_0-1)
   (up tile_1-2 tile_0-2)
   (up tile_2-1 tile_1-1)
   (up tile_2-2 tile_1-2)
   (down tile_0-1 tile_1-1)
   (down tile_0-2 tile_1-2)
   (down tile_1-1 tile_2-1)
   (down tile_1-2 tile_2-2)
   (right tile_0-2 tile_0-1)
   (right tile_1-2 tile_1-1)
   (right tile_2-2 tile_2-1)
   (left tile_0-1 tile_0-2)
   (left tile_1-1 tile_1-2)
   (left tile_2-1 tile_2-2)
)
 (:goal (and
    (cleaned tile_0-1)
    (cleaned tile_0-2)
    (cleaned tile_1-1)
    (cleaned tile_2-2)
))

)
4

1 回答 1

1

:effect都缺少括号。添加这些括号后,在线编辑器的求解器表明无法达到目标,但至少可以解析。clean-upclean-down

于 2020-08-02T02:35:02.537 回答