Разница между деревьями решений и деревьями поведения для игрового ИИ


64

В чем различия между деревьями решений и деревьями поведения для разработки игр ИИ? Для каких приложений вы бы использовали один поверх другого?

Ответы:


80

Два довольно разные. Настоящий показатель в именах. Деревья решений только для принятия решений. Деревья поведения предназначены для управления поведением. Позвольте мне объяснить. Основное различие между ними заключается в том, как они пересекаются, так же, как они размечены и «типы» узлов различны.

Деревья решений оцениваются от корня до листа, каждый раз. Чтобы дерево решений работало правильно, дочерние узлы каждого родителя должны представлять все возможные решения для этого узла. Если на узел можно ответить «Да, Нет, Может быть», должно быть три дочерних элемента, Да, узел, Нет узла и Возможно. Это означает, что всегда есть какой-то нижний узел для прохождения, до достижения конечного узла. Обход всегда вниз. Графическая форма:

введите описание изображения здесь

Довольно просто Мы начинаем с корня и на основании некоторой оценки выбираем 1, 2 или 3. Мы выбираем 3. Затем делаем другую оценку и выбираем B или B ... Что ж, я снова использовал рисунок снизу, извините. Притворись, что B слева - это магия B.

Деревья поведения имеют различную оценку. При первой оценке (или сбросе) они начинаются с корня (родительские узлы действуют как селекторы), а каждый дочерний элемент оценивается слева направо. Дочерние узлы упорядочены в соответствии с их приоритетом., Если все условия дочернего узла выполнены, его поведение запускается. Когда узел запускает поведение, для этого узла устанавливается значение «выполняется», и он возвращает поведение. В следующий раз, когда дерево оценивается, оно снова проверяет узлы с наивысшим приоритетом, а затем, когда дело доходит до «работающего» узла, оно знает, где оно остановилось. Узел может иметь последовательность действий и условий до достижения конечного состояния. Если какое-либо условие не выполняется, обход возвращается к родителю. Затем родительский селектор переходит к следующему приоритетному дочернему элементу. Я попробую графическую форму здесь:

введите описание изображения здесь

Обход начинается с корня, переходит к ребенку 1, проверяет состояние ребенка (что-то вроде «есть ли поблизости враги?»). Условие не выполняется, и обход перемещается обратно вверх по дереву, чтобы перейти ко второму узлу. У узла 2 есть действие, которое выполняется (возможно, что-то вроде поиска пути). Затем поведение (что-то вроде следования по пути). Следующий путь настроен на выполнение, и дерево возвращает свое состояние как работающее. Узлы, которые потерпели неудачу или завершились, возвращаются в «Готово». Затем в следующий раз, когда мы проверим, мы начнем снова с узла с наивысшим приоритетом. Сбой снова, поэтому мы переходим ко второму узлу. Там мы обнаруживаем, что у нас такое поведение. Мы также обнаруживаем, что поведение завершено, поэтому помечаем его как завершенное и возвращаем его. Затем дерево сбрасывается и снова готово к работе.

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

Некоторое хорошее понимание того, как анализируются деревья поведения, можно найти здесь .


Отличное объяснение и иллюстрации. Поэтому, когда вы говорите: «Если все условия дочернего узла выполнены ...», селекторы и последовательности содержат условия или только конечные узлы, то есть действия?
Бесплатный Lancer

1
Дочерние узлы - это поведения, действия, условия или селекторы с большим количеством дочерних узлов. Они оцениваются слева направо.
MichaelHouse

Отличный пост, хотя я думаю, что у меня еще есть нерешенный вопрос (опубликую отдельно). Что вы использовали для создания анимированных GIF-файлов?
я--

0-2-A не следует играть снова, если 0-2-B работает ??? github.com/pirobot/pi_trees/issues/1
devside

@ nopnop77 Нет, если условное 0-2 все еще оценивается как 0-2-B. Вы можете видеть, что 0-2 переоценивается, но еще раз не приводит к выбору А.
MichaelHouse
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.