Как проверить условия в PDDL? - PullRequest
0 голосов
/ 13 апреля 2020

Мне нужно создать PPDL, в котором автомобили перевозят автомобиль go по карте. У транспортного средства есть способность относительно того, сколько автомобиля go это может нести. Прежде чем автомобиль загрузит на него автомобиль go, он должен знать, достаточно ли места для этого транспортного средства, чтобы перевозить этот автомобиль go. Как назначить грузоподъемность для объекта транспортного средства?

Я видел такие примеры, как:

< (passengers ?lift) (capacity ?lift)

Так что в этом сценарии «лифт» имеет атрибут вместимости и атрибут пассажиров , Может ли кто-нибудь привести пример того, как выглядит это объявление объекта?

Извиняюсь за плохой вопрос, я новичок в PDDL и все еще пытаюсь обернуть его вокруг.

Вот моя функция загрузки для загрузки автомобиля go на транспортное средство:

  (:action load
     :parameters (?vehicle ?cargo ?location)
     :precondition (and (at?vehicle ?location)  (at ?cargo ?location) (< (loadedCargo ?vehicle) (capacity ?vehicle)))
     :effect (and (at ?c ?vehicle) (increase(loadedCargo ?vehicle) + 1))

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

Я почти уверен, что использую PDDL 2.1

1 Ответ

3 голосов
/ 13 апреля 2020

Все зависит от типа планирования, которое вы готовы использовать. Если это 2.1, то вы можете использовать числовые переменные c, чтобы делать то, что вы хотите (что вы нашли в этом примере). Рисунок 1 из статьи [ здесь ] также показывает это.

Если вы планируете использовать только классическое планирование, то вам нужно быть немного умнее в кодировании , Предикаты типа (capacity ?vehicle ?num) должны быть созданы, где ?num - это объект типа number, и вы создаете их конечное число. Это может работать, если ваши возможности достаточно малы.

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


Редактировать: после Подтверждение PDDL2.1

Проблемы, которые я вижу с PDDL, вы разместили:

  • Отсутствует пробел в at?vehicle
  • Ваша проверка вместимости в предварительном условии должна включать размер автомобиля go. Например,

    (< (+ (loadedCargo ?vehicle) (cargosize ?cargo)) (capacity ?vehicle))

  • Неверное имя переменной в (at ?c ?vehicle) (должно быть ?cargo)
  • Ваше увеличение должно использовать инфиксную нотацию и включать автомобиль go размер: (increase (loadedCargo ?vehicle) (cargosize ?cargo))
  • Вам нужно удалить автомобиль go из текущего местоположения в качестве эффекта: (not (at ?cargo ?location))

Я думаю, что это все, что я вижу неправильно с примером, но я не проверял его.

...