PDDL невозможно компилировать - вождение автомобиля - PullRequest
0 голосов
/ 20 сентября 2019

Я новичок в PDDL, и в настоящее время я учусь, как упростить программирование, чтобы заставить автомобиль двигаться вперед от pt0pt0 к pt1pt1.

Однако я столкнулся с ошибкой компиляции при попытке запустить ее в редакторе PDDL.Может ли опытный программист посоветовать мне, что не так с моим кодом?Большое спасибо, спасибо.

problem.pddl

(define (problem parking) 
 (:domain grid_world) 
(:objects agent1  - agent
 pt0pt0 pt0pt1 pt1pt1  - gridcell
 ) 
(:init (at pt0pt0 agent1) (forward_next pt0pt0 pt0pt1) (forward_next pt0pt1 pt1pt1)) 
(:goal (at pt1pt1 agent1)) 
) 

domain.pddl

(define (domain grid_world ) 
(:requirements :strips :typing) 
(:types car
agent - car
gridcell
) 
(:predicates (at ?pt1 - gridcell ?car - car) 
(forward_next ?pt1 - gridcell ?pt2 - gridcell) 
) 
(:action FOWARD
:parameters ( ?agent - car ?pt1 - gridcell ?pt2 - gridcell) 
:precondition (and (at ?pt1 ?agent)) 
:effect (and (not (at ?pt1 ?agent)) (forward_next ?pt1 ?pt2) (at ?pt2 ?agent))
) 
) 

1 Ответ

1 голос
/ 27 сентября 2019

Пробелы незначительны в PDDL, поэтому наследование типов в объявлении : types должно быть либо

(:types
    car - object
    agent - car
    gridcell
)

, либо просто ...

(:types
    agent - car
    gridcell
)

Вы по сути определили циклическийЗависимость car agent - car.

После этой модификации вы получите следующий план:

0.00100: (foward agent1 pt0pt0 pt1pt1)

Это, вероятно, не то, что вы хотели, так что для быстрого наблюдения,переместите (forward_next ?pt1 ?pt2) от эффекта действия к предварительному условию.Вы получите этот план:

0.00100: (foward agent1 pt0pt0 pt0pt1)
0.00200: (foward agent1 pt0pt1 pt1pt1)

Вы можете найти фиксированный (и отформатированный для удобства чтения) PDDL в этом сеансе: http://editor.planning.domains/#read_session=qrAGLXX9O1

Нажмите Решить , чтобы попробоватьэто.

...