Ошибка pddl: синтаксическая ошибка в объявлении длительного действия

#r #pddl

#r #pddl

Вопрос:

Я внедряю систему в pddl, и мне приходится использовать durative-action, это мой код, но он выдает ошибку в названии.

 (define (domain rooms)
(:requirements  :strips :typing  :durative-actions )
(:types
  room
  zone
  robot
  door
  elevator
)

(:predicates
  (robot_at ?r - robot ?x - room)
  (robot_at_zone ?r - robot ?x - room ?z - zone)
  (zone_at_room ?z - zone ?x - room)
  (is_next ?x - room ?y - room)
  (is_in_other_floor ?x - room ?y - room)
  (door_closed ?d - door ?x - room ?y - room)
  (door_opened ?d - door ?x - room ?y - room)  
)

(:durative-action go_room
  :parameters (?r - robot ?x - room ?y - room  ?d - door)
  :duration (= ?duration 5)
  :condition 
    (and  
      (robot_at ?r ?x)  
      (is_next ?x ?y)
      (door_opened ?d ?x ?y)
    )
  :effect 
    (and 
      (robot_at ?r ?y) 
      (not (robot_at ?r ?x))
    )
)

 

Комментарии:

1. Можете ли вы правильно отформатировать свой вопрос?

Ответ №1:

вам необходимо указать, когда выполняются условия и эффекты, используя ключевые at start слова , at end или over all (over all действует только для условий).

Например:

 (:durative-action go_room
  :parameters (?r - robot ?x - room ?y - room  ?d - door)
  :duration (= ?duration 5)
  :condition 
    (and  
      (at start (robot_at ?r ?x)) 
      (over all (is_next ?x ?y))
      (over all (door_opened ?d ?x ?y))
    )
  :effect 
    (and 
      (at end (robot_at ?r ?y))
      (at start (not (robot_at ?r ?x)))
    )
)