Возможно ли сравнение типов в PDDL?

Например, если я объявляю типы как таковые:

:types
   bag
   light heavy - bag

Другими словами, есть два типа сумок: легкие и тяжелые. Можно ли в рамках действия проверить, относится ли переменная типа bag к типу light, не имея экземпляра light для сравнения?

Я знаю, что возможно сравнение равенства как таковое:

(when ( = ?light ?bag))

но это проверяет, имеют ли две переменные одинаковое значение, а не один и тот же тип.

Я попробовал (when ( = light ?bag)), и хотя планировщик не выдает ошибок, похоже, он не работает.


person McGuile    schedule 29.10.2017    source источник
comment
Короткий ответ: нет. В PDDL нет встроенной возможности сравнивать типы (или, точнее, проверять, относится ли переменная к определенному типу). Для этого есть обходные пути, но, возможно, вы сможете вывести их для себя. Если нет, так и скажите, может быть, я найду время объяснить.   -  person Prof.Chaos    schedule 30.10.2017
comment
Спасибо, я придумал обходной путь.   -  person McGuile    schedule 30.10.2017


Ответы (1)


В ответ на комментарий профессора Хаоса, в котором говорится, что это невозможно, я нашел обходной путь, в котором мы создаем предикат (is_light ?x - light) и используем (when (is_light ?lightobj) (dosomething)) в действии. Предикат используется в проблемном файле при инициализации объектов light.

person McGuile    schedule 30.10.2017