PDDL - недопустимые предикаты и правильное использование forall

teoML

Я новичок в планировании pddl, и теперь я пытаюсь создать домен и файл проблемы в качестве упражнения. Краткое описание домена: У меня есть пара машин, которые можно взять и поставить в места А и Б. Задача проста: взять все машины из места А и переместить их в место Б. Я создал следующий файл домена:

(define (domain test) ; Domain name must match problem's

  ; Define what the planner must support to execute this domain
  ; Only domain requirements are currently supported
  ( :requirements
    :strips                 
    :negative-preconditions 
    :equality               
    :typing               
    :adl
  )
 
 
  (:types
   car
   place
  )
  
  
  (:predicates
    (at ?o - car ?p - place )
    (taken ?o - car )
  )
  
   (:action take
   :parameters (?o1 - car  ?o2 - place )
   :precondition (and 
                    (at ?o1 ?o2)
                    (not (taken ?o1))
                 )   
   :effect (and 
             (not (at  ?o1 ?o2 ))
             (taken ?o1)
           )
   )
   
   
   (:action put
   :parameters (?o1 - car  ?o2 - place )
   :precondition (and 
                    (not (at ?o1 ?o2))
                    (taken ?o1)
                 )   
   :effect (and 
             (at  ?o1 ?o2) 
             (not (taken ?o1) )
           )
   )
   
   (:action takeAll
   :parameters ()
   :precondition (forall (?c - car ?p - place)
                    (and 
                    (at ?c ?p)
                    (not (taken ?c))
                    )
            )
   :effect (forall (?c - car)
                    (taken ?c)
                    )
            )
            
   )

Файл проблемы выглядит так:

(define (problem test)
    (:domain test)
    
    (:objects
    c1 - car
    c2 - car
    c3 - car
    
    A - place
    B - place
    )
    
    (:init
        (at c1 A)
        (at c2 A)
        (at c3 A)
        (not (taken c1))
        (not (taken c2))
        (not (taken c3))
    )

    (:goal (and
            (at c1 B)
            (at c2 B)
            (at c3 B)
            )
    )
    
  )

Я использую онлайн-планировщик и решатель, доступные здесь, и мне интересно, почему он выводит, что у меня есть несколько недопустимых предикатов.

test
  takeall precondition contains ["forall", ["?c", "-", "car", "?p", "-", "place"], ["and", ["at", "?c", "?p"], ["not", ["taken", "?c"]]]], not a valid predicate
  takeall effect contains ["forall", ["?c", "-", "car"], ["taken", "?c"]], not a valid predicate
  :equality requirement is unnecessary
test
  Initial state contains ["not", ["taken", "c1"]], not a valid predicate
  Initial state contains ["not", ["taken", "c2"]], not a valid predicate
  Initial state contains ["not", ["taken", "c3"]], not a valid predicate

Может ли кто-нибудь объяснить мне, что именно я делаю неправильно? С takeAllэкшеном я хотел немного поэкспериментировать forall. И интерпретировать это надо так: в предусловиях сказано, что все объекты типа car не в состоянии «занято» и находятся в каком-то месте. Эффект должен быть в том, что все автомобили находятся в состоянии, взятом. Самое короткое решение должно быть (согласно моему здравому смыслу) взять все, положить (c1, B), (положить c2, B), (положить c3, B) Я ценю вашу помощь!

сделать

Вы выполняете классическое планирование, что означает, что начальное состояние должно указывать только то, что верно (все остальное предполагается ложным). Удалите эти негативные потоки из своей инициализации, и, возможно, это сработает.

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=324238049&siteId=291194637