Мне кажется, проблема в том, что вы используете when
, с которым FastForward может не справиться. Вы можете попытаться перефразировать вашу проблему без нее.
У вас есть шесть ячеек. Просто введите предикат (food <cell>)
, который изначально установлен в true, как в
(food a1) (food a2) ...
Эффект перемещения будет (not (food ?to))
, ie, еда в этой ячейке будет удалена. Затем вам нужно перефразировать вашу цель на
(and (not (food a1)) (not (food a2)) ...)
Это менее изящно, но должно сработать.
Действие move
должно выглядеть примерно так:
(:action move
:parameters (?from - cell ?to - cell ?p - pacman ?g - ghost)
:precondition (and
(adjacent ?from ?to)
(at ?from ?p)
(not (at ?to ?g)))
:effect (and
(at ?to ?p)
(not (at ?from ?p))
(not (food ?to))))