Дерево поведения (искусственный интеллект, робототехника и управление)
Behavior tree — математическая модель исполнения планов, используемая в информатике, робототехнике, системах управления и видеоиграх. Поведенческие деревья описывают переключения между конечным набором задач модульным способом. Их основная сила заключается в возможности собирать очень сложные задачи из простых, без необходимости знать внутреннюю реализацию простых задач. Поведенческие деревья сходны с иерархическими конечными автоматами, однако в качестве базового строительного блока здесь выступает задача, а не состояние. Благодаря наглядности и простоте восприятия поведенческие деревья менее подвержены ошибкам и пользуются большой популярностью среди разработчиков видеоигр. Было показано, что поведенческие деревья являются обобщением ряда других архитектур управления[1][2].
Предпосылки
Структура управления на основе поведения была впервые предложена Родни Бруксом (Rodney Brooks) в статье «A robust layered control system for a mobile robot». В этом подходе список поведений мог использоваться в качестве альтернативных вариантов. Позже метод был расширен и обобщён в древовидную организацию поведений, что нашло широкое применение в игровой индустрии как мощный инструмент для моделирования поведения неигровых персонажей (NPC)[3][4][5].
Поведенческие деревья широко использовались в известных видеоиграх, таких как Halo, Bioshock и Spore. В последнее время поведенческие деревья предлагают как фреймворк для управления мультизадачами беспилотных летательных аппаратов, сложных роботов, роботизированных манипуляторов и многороботных систем[6][7][8][9][10]. В настоящее время поведенческие деревья рассматриваются как зрелый подход в учебниках по игровой ИИ[11][12], а также поддерживаются во многих игровых движках, таких как Unity и Unreal Engine.
Популярность поведенческих деревьев объясняется парадигмой их построения: возможность создавать сложное поведение, программируя только действия NPC, а затем проектируя структуру дерева (обычно с помощью drag-and-drop), где листья — это действия, а внутренние узлы осуществляют принятие решений. Деревья поведения интуитивно понятны, удобны для проектирования, тестирования и отладки, а также обеспечивают повышенную модульность, масштабируемость и повторное использование по сравнению с другими методами построения поведения.
Со временем реализации поведенческих деревьев развивались в части эффективности и возможностей для удовлетворения индустриальных требований, вплоть до появления событийно-ориентированных поведенческих деревьев[13]. Событийно-ориентированные поведенческие деревья устранили некоторые проблемы масштабируемости классических в силу иной организации исполнения и появления новых типов узлов, реагирующих на события и способных прерывать выполнение других узлов. В наши дни концепция событийно-ориентированного поведенческого дерева считается стандартом и реализуется в большинстве современных систем, хотя название «behavior tree» по-прежнему используется в силу привычки.
Ключевые понятия
Поведенческое дерево графически представляется ориентированным деревом, в котором узлы подразделяются на корневой, управляющие и исполнительные (задачи). Для каждой пары связанных узлов выходящий называется родителем, а входящий — потомком. Корень дерева не имеет родителей и имеет ровно одного потомка, управляющие узлы имеют одного родителя и минимум одного потомка, а исполнительные — одного родителя и не имеют потомков. Графически потомки управляющего узла располагаются под ним в порядке слева направо[14].
Выполнение поведенческого дерева начинается с корня, который с заданной частотой отправляет своему потомку так называемые тики (ticks) — сигналы разрешения, инициирующие выполнение узла-потомка. Если выполнение узла разрешено, он возвращает родителю одно из трёх значений состояния: выполняется (running), если задача не завершена; успех (success), если цель достигнута; или ошибка (failure) в противном случае.
Управляющий узел
Управляющий узел используется для контроля подзадач, из которых он состоит. Такой узел может быть либо селектором (fallback), либо последовательностью (sequence). Он последовательно вызывает каждую из своих подзадач, а по результату (успех или ошибка) решает, переходить ли к следующей.
Узел-селектор (fallback)
Селекторы (fallback-узлы) используются для поиска и вызова первого потомка, который не завершился ошибкой. Если один из потомков вернул статус успех (success) или выполняется (running), селектор немедленно завершает свою работу с этим же статусом (см. иллюстрацию I и псевдокод ниже). Потомки опрашиваются по порядку значимости — слева направо.
Псевдокод для селектора:
1 для i от 1 до n 2 childstatus ← Tick(child(i)) 3 если childstatus = выполняется 4 вернуть выполняется 5 иначе если childstatus = успех 6 вернуть успех 7 конец 8 вернуть ошибка
Узел-последовательность (sequence)
Узлы типа последовательность используются для поиска и выполнения первого потомка, который ещё не завершился успехом. Если один из потомков возвращает ошибку (failure) или выполняется (running), последовательность немедленно завершает свою работу с этим же статусом (см. иллюстрацию II и псевдокод ниже). Потомки обходятся в порядке слева направо.
Псевдокод для последовательности:
1 для i от 1 до n 2 childstatus ← Tick(child(i)) 3 если childstatus = выполняется 4 вернуть выполняется 5 иначе если childstatus = ошибка 6 вернуть ошибка 7 конец 8 вернуть успех
Математическая формализация в пространстве состояний
Для применения методов управления и анализа поведенческие деревья определяются как тройка:[15]
где — индекс дерева, — векторное поле, описывающее правую часть разностного уравнения, — шаг по времени, а — возвращаемый статус, равный одному из: выполняется , успех или ошибка .
Замечание: Задача — это вырожденное поведенческое дерево без родителя и потомков.
Исполнение поведенческого дерева
Выполнение описывается следующими стандартными уравнениями разностей:
где — дискретное время, — пространство состояний системы, моделируемой деревом.
Составление последовательностей
Два дерева и могут быть объединены в более сложное дерево с помощью оператора последовательности:
Тогда возвращаемый статус и векторное поле для определяются (для ) следующим образом:
Примечания
- ↑ Colledanchise, Michele; Ögren, Petter (2017). “How Behavior Trees Modularize Hybrid Control Systems and Generalize Sequential Behavior Compositions, the Subsumption Architecture, and Decision Trees”. IEEE Transactions on Robotics [англ.]. 33 (2): 372—389. DOI:10.1109/TRO.2016.2633567. S2CID 9518238. Дата обращения 2024-06-28.
- ↑ Colledanchise, Michele. Behavior Trees in Robotics and AI: An Introduction : [англ.] / Michele Colledanchise, Petter Ögren. — CRC Press, 2018. — ISBN 978-1-138-59373-2. — doi:10.1201/9780429489105.
- ↑ Isla, D. Handling complexity in the Halo 2 AI (англ.). Game Developers Conference (Vol. 12) (2005). Дата обращения: 28 июня 2024. Архивировано 11 мая 2012 года.
- ↑ Isla, D. Halo 3-building a better battle : [англ.]. — 2008.
- ↑ Lim, C. U. Evolving Behaviour Trees for the Commercial Game DEFCON // Applications of Evolutionary Computation : [англ.] / C. U. Lim, R. Baumgarten, S. Colton. — Berlin : Springer, 2010. — Vol. 6024. — P. 100–110. — ISBN 978-3-642-12238-5. — doi:10.1007/978-3-642-12239-2_11.
- ↑ Ögren, Petter. Increasing Modularity of UAV Control Systems using Computer Game Behavior Trees // AIAA Guidance, Navigation and Control Conference, Minneapolis, Minnesota : [англ.]. — 2012. — P. 13–16.
- ↑ Colledanchise, Michele. Performance analysis of stochastic behavior trees // 2014 IEEE International Conference on Robotics and Automation (ICRA) : [англ.] / Michele Colledanchise, Alejandro Marzinotto, Petter Ögren. — 2014. — P. 3265–3272. — ISBN 978-1-4799-3685-4. — doi:10.1109/ICRA.2014.6907328.
- ↑ Marzinotto, Alejandro. Towards a Unified BTs Framework for Robot Control // Robotics and Automation (ICRA), 2014 IEEE International Conference on : [англ.] / Alejandro Marzinotto, Michele Colledanchise, Christian Smith … [et al.]. — 2014.
- ↑ Klöckner, Andreas. Behavior Trees for UAV Mission Management // GI-Jahrestagung : [англ.]. — 2013. — P. 57–68.
- ↑ Bagnell, J. Andrew. An integrated system for autonomous robotics manipulation // Intelligent Robots and Systems (IROS), 2012 IEEE/RSJ International Conference on : [англ.] / J. Andrew Bagnell, Felipe Cavalcanti, Lei Cui … [et al.]. — IEEE, 2012. — P. 2955–2962. — ISBN 978-1-4673-1736-8. — doi:10.1109/IROS.2012.6385888.
- ↑ Millington. Artificial Intelligence for Games : [англ.] / Millington, Funge. — CRC Press, 2009. — ISBN 978-0-12-374731-0.
- ↑ Rabin, S. Game AI Pro : [англ.]. — CRC Press, 2014. — ISBN 978-1-4665-6596-8.
- ↑ Champandard, Alex J. The Behavior Tree Starter Kit // Game AI Pro: Collected Wisdom of Game AI Professionals : [англ.] / Alex J. Champandard, Philip Dunstan. — 2012. — P. 72–92.
- ↑ craft ai. BT 101 – Behavior Trees grammar basics (англ.) (2015). Дата обращения: 28 июля 2021. Архивировано 20 сентября 2021 года.
- ↑ Colledanchise, Michele. How Behavior Trees Modularize Robustness and Safety in Hybrid Systems // In Intelligent Robots and Systems (IROS), 2014 IEEE/RSJ International Conference on : [англ.] / Michele Colledanchise, Petter Ögren. — IEEE, 2014.
Литература
- Colledanchise, Michele. Behavior Trees in Robotics and AI: An Introduction : [англ.] / Michele Colledanchise, Petter Ögren. — CRC Press, 2018. — ISBN 978-1-138-59373-2. — doi:10.1201/9780429489105.
- Colledanchise, Michele; Ögren, Petter (2017). “How Behavior Trees Modularize Hybrid Control Systems and Generalize Sequential Behavior Compositions, the Subsumption Architecture, and Decision Trees”. IEEE Transactions on Robotics [англ.]. 33 (2): 372—389. DOI:10.1109/TRO.2016.2633567. S2CID 9518238.