Проблема с проверкой действий в PDDL - PullRequest
0 голосов
/ 08 февраля 2020

Надеюсь, у вас все хорошо. У меня есть проблема, решая домен PDDL и файл проблемы. Задача состоит в следующем:

Два спортсмена A0; A1 и тренер T готовятся к соревнованию в тренировочной обстановке, показанной на рисунке. Они начинаются в P0, и они должны быть все в P3, чтобы закончить sh испытание. Связи между местами выделены двумя путями: путь спортсмена (solid) и путь тренера (пунктир). A0; A1 может использовать только путь спортсмена, и они должны перепрыгнуть через первое препятствие O0, а затем присесть и пройти под вторым O1. Т, вместо этого, может идти только путь тренера. Агенты не могут двигаться одновременно, только один агент может перемещаться на каждом шаге из одного места Pi в другое место на пути. Кроме того, тренер должен оставаться на один или несколько шагов вперед, чтобы проверить работоспособность спортсменов, поэтому A0 и A1 никогда не должны ожидать T (т. Е. Им разрешено находиться только в местах, уже посещенных T). Спортсмены и тренеры могут быть все вместе в одном месте тренировочной трассы. Например, если T находится в P2, то A0; A1 может быть в P0; P1 или P2. Спортсмены могут делать шаги в произвольном порядке (то есть они всегда могут договориться о том, кто делает следующий шаг).

Image of the task

Я реализовал оба домен и проблема файлов, но это не работает, как ожидалось в заявлении. Что я делаю неправильно? Любая помощь приветствуется.

Код:

1. Домен

;Header and description

(define (domain competition-domain)
(:requirements :strips )
(:predicates ;todo: define predicates here
  (a1 ?x)(a2 ?x)(t ?x)(o ?x)(location ?x)(at ?x ?y))

;define actions here
(:action goto
    :parameters (?athlete ?from ?to)
    :precondition (and (a1 ?athlete)(a2 ?athlete)(location ?from)(location ?to)(at ?athlete ?from))
    :effect (and(at ?athlete ?to)
             (not(at ?athlete ?from))))

(:action jump
    :parameters (?athlete ?obstacle ?from ?to)
    :precondition (and (a1 ?athlete) (a2 ?athlete) (o ?obstacle)
                    (location ?from) (location ?to) 
                    (at ?athlete ?from))
    :effect (and(at ?athlete ?to)(not(at ?athlete ?from))))

(:action crouch
    :parameters (?athlete ?obstacle ?from ?to)
    :precondition (and (a1 ?athlete) (a2 ?athlete) (o ?obstacle)
                    (location ?from) (location ?to) 
                    (at ?athlete ?from))
    :effect (and(at ?athlete ?to)(not(at ?athlete ?from))))
)

2. Задача

(define (problem competition-problem) (:domain competition-domain)
(:objects A1 A2 T O0 O1 P0 P1 P2 P3
)

(:init
    ;todo: put the initial state's facts and numeric values here
    (a1 A1) (a2 A2) (t T) (location P0) (location P1) (location P2) (location P3)
    (at A1 P0) (at A2 P0) (at T P0) 
)

(:goal (and
    ;todo: put the goal condition here
    (at A1 P3) (at A2 P3) (at T P3)
))

)

Таким образом, моя главная проблема здесь заключается в том, чтобы применять действия и операторы для проверки препятствий .

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 09 февраля 2020

Рассматривали ли вы использование набора, а не только предикатов, см. Здесь

https://planning.wiki/ref/pddl/domain#object -типы

Я бы посоветовал вам выполнить дополнительные действия, одно действие для " «Движение тренера» и одно действие для «Движения спортсмена», то предварительное условие действия Движения спортсмена будет тогда фактом, который добавляется действием Движения тренера. То есть существует требование, чтобы тренер находился «в следующем месте» перед атлетом

Редактировать:

(define (domain competition-domain)
(:requirements :strips :typing)
(:types
   person location - object
   athlete trainer - person
   obstacle position - location 
   jump crouch - obstacle
)
(:predicates 
  (at ?p - person ?l - location)
  (jump ?o - obstacle)
  (crouch ?o - obstacle)
  (link ?ls - location ?le - location)
  (trainer-link ?ls - location ?le - location)
)

(:action JUMP
   :parameters (?a - athlete ?p - position ?j - jump)
   :precondition (and
       (at ?a ?p)
       (link ?p ?j)
   )
   :effect (and
       (not (at ?a ?p)
       (at ?a ?j)
   )
)
(:action MOVE-AFTER-JUMP
   :parameters (?a - athlete ?j - jump ?p - position)
   :precondition (and
       (at ?a ?j)
       (link ?j ?p)
   )
   :effect (and
       (not (at ?a ?j)
       (at ?a ?p)
   )
)
..rinse and repeat with trainer and crouch obstacles and move from position to position
)
...