Проблематика использования деревьев поведения при разработке игр

 


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

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

Решением проблемы коммуникации и ручной оптимизации могут стать специализированные редакторы. С их помощью легче отслеживается разрастание и усложнение дерева. В случае, если редактор преобразует созданное в нем дерево во встраиваемую в проект игры структуру, также убирается проблема коммуникации. За исключением крайних случаев пропадает необходимость вручную согласовывать изменения дерева между дизайнером и программистом, ведь роль посредника между идеей и реализацией теперь возлагается на редактор. Упрощается и ускоряется внесение изменений в уже созданное дерево.

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

Впрочем, проблема оптимизации дерева поведения на программном уровне не имеет единого распространенного решения.

В общем варианте деревья поведения имеют проблему статической приоритезации. Поскольку при выполнении дерева поведения используется частный случай алгоритма прямого обхода дерева, совпадение условий выбора определенного поведения вычисляются в фиксированном порядке. Таким образом действия, соответствующие некоторым условиям всегда будут приоритетнее действий, соответствующих другим условиям. Это является одной их причин того, что при добавлении новых условий или вариантов поведений дерево может неконтролируемо расти в количестве узлов или усложняться за счет множественных проверок. При разработке такого дерева всегда надо учитывать приоритезацию и модифицировать его соответственно. Изменять поведение агента в зависимости от состояния окружения становится тем сложнее, чем больше параметров окружения учитывается и условий добавляется.

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