Как определить пул действий таким образом, чтобы они зависели от переменных в GOAP? - PullRequest
0 голосов
/ 29 мая 2020

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

У меня есть следующий код. Здесь нет планировщика, только определения действий, состояния и т.д. положение, подняв предмет и переместив его в другое положение. Позже целью может быть перемещение n предметов или что-то в этом роде.

Действия будут такими:

  1. Goto (ставит агента на позицию)
  2. PickUp (помещает предмет во владение)
  3. Goto (ставит агента на позицию)
  4. Drop (помещает предмет в нужное место) Цель достигнута!

Но как сделать Я использую здесь действие Goto дважды? Эффект тот же, установка переменной isAtPosition. Нужно ли мне создавать новую переменную состояния для «isAtItemPosition» или «isAtDestinationPosition»?

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

Как мне закодировать информацию о состоянии таким образом, чтобы одни и те же действия из пула можно было применять на разных этапах с разным эффектом? (Перейти к положению элемента или перейти к положению назначения).

1 Ответ

0 голосов
/ 29 мая 2020

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

Если вы можете, я бы подумал об использовании немного более мощного представления, например STRIPS, или PDDL . Это значительно упростит описание несколько более сложного сценария ios, и это будет иметь дополнительное преимущество, заключающееся в том, что вы можете использовать готовые решатели для разработки планов для ваших агентов.

В PDDL вы может иметь действие (move ?agent ?from ?to) с предварительным условием, что агент находится в местоположении ?from, и эффектом, что они будут в местоположении ?to после выполнения действия. Для подбора объекта у вас может быть (pick-up ?agent ?object) с предварительным условием, что и агент, и объект находятся в одном месте. Это гораздо более общий c, чем фиксированные логические действия, и позволит более легко расширять его в дальнейшем.

...