
- •Филиал федерального государственного бюджетного образовательного учреждения высшего профессионального образования «Национальный исследовательский университет «Московский энергетический институт»
- •Нейросеть
- •Алгоритмы обучения с надзором и без надзора
- •Продукционные правила и базы знаний
- •Автоматы
- •Одномерная табличная схема «стимул-реакция»
- •Марковские цепи дискретного времени
Нейросеть
Нейрон это нервная клетка. Работает она по принципу «все или ничего». Нейрон среагирует и перейдет в сигнальное состояние в случае , если данные, поступающие ему на вход будут отвечать тем условиям, которые в него заложили и никак не с реагирует в обратном. Поэтому нейрон напоминает сложный микрокомпьютер, построенный как сумматор. Первыми моделями нейронов были персептроны, которые то же реагировали на входные данные по принципу «все или ничего» для ускорения вводился еще скрытый уровень в персептрон, который принимал данные от входов устройства , вел обработку этих данных и передавал на выходы. Однако при работе с этим устройством была серьезная проблема, чем больше было «нейронов» в персептроне, тем труднее было управлять их взаимодействием и изменение состояние одного элемента персептрона вело к быстрым и непредсказуемым изменениям в работе всего устройства. Это происходило из-за слишком сложных взаимозависимостей частей устройства. Но в данное время это направление крайне труднореализуемое и малоиспользуемое по причине сложности его создания, поэтому в компьютерных играх используют схожие, но упрощенные методы реализации ИИ такие как алгоритмы обучения с надзором и без надзора.
Алгоритмы обучения с надзором и без надзора
Этот алгоритм основан на том же принципе что и формирование условного рефлекса. Сначала программу запускают на каком-то определенном наборе данных и она пытается решить задачу, в алгоритм встроена возможность проверки того насколько правильный результат был достигнут в результате применения данного решения. Если он был достигнут, то он закрепляется, а если нет, то пытается изменить параметры работы алгоритмы, здесь важно что результаты работы алгоритма оцениваются внешним наблюдателем.
А вот этот тип алгоритмов и технологий ИИ требует, чтобы сама система ИИ находила те критерии и методы, по которым надо проводить решение задачи. Это работает на практике, например в играх, где боты могут изучать ваши действия, пытаясь в них найти слабые места и вашу тактику и стратегию. Правда, бывают с этим методом смешные случаи. Однажды перед системой ИИ была поставлена задача: определить присутствие или отсутствие танков. Все было замечательно, и вдруг система отказывалась видеть танки на новых полигонах на отрез. В чем дело? Оказывается: система различала изображения не по наличию танка в ней, а по уровню освещенности.
Продукционные правила и базы знаний
Есть ситуации, в которых довольно проблемно поведение бота выразить в терминах конечных автоматов. Например, когда из каждого состояния агент может переходить во все другие состояния или когда бот может пребывать в двух состояниях одновременно («идет» и «стреляет»). В таких случаях можно применить другую технологию – систему правил. Все поведение агента описывается набором простых правил вида: «условие->действие». Сначала выбираем первое правило. Если условие в нем истинно, выполняем указанное действие и выходим (прекращаем проверку последующих условий). В противном случае переходим к следующему правилу, если таковые имеются. Как всегда, пример. Попробуем описать с помощью системы правил поведение бота:
ВРАГ БЛИЗКО-> СТУКНУТЬ ЕГО ДУБИНКОЙ
РАССТОЯНИЕ К ВРАГУ> ДВУХ МЕТРОВ && МЫ СИЛЬНЕЕ-> ДОГНАТЬ
РАССТОЯНИЕ К ВРАГУ> ДВУХ МЕТРОВ -> ОЙ, ПОРА БЕЖАТЬ!
НАШИХ БЬЮТ && ОНИ НЕ СИЛЬНЕЕ-> ПОЙТИ НА ПОМОЩЬ
НАШИХ БЬЮТ && ОНИ СИЛЬНЕЕ ->СТОЯТЬ И ЛЮБОВАТЬСЯ ПЕЙЗАЖАМИ
СИДЕТЬ НА ТРАВКЕ
Заметим, что в подобных системах порядок указания правил имеет большое значение. Например, если поменять местами правила №2 и 3, бот начнет убегать и от сильных, и от слабых врагов. (Такое поведение системы объясняется тем, что условие в правиле №3 включает в себя условие из правила №2.) Также заметим, что шестое правило вообще не имеет условия. Оно задает действие по умолчанию и равноценно правилу: «true-> сидеть на травке».
На практике системы правил реализуются двумя способами. Первый – дерево принятия решений, которое выглядит приблизительно так:
if ( условие1 ) действие1; else if ( условие2 ) действие2; else // и так далее...
Другой способ реализации системы правил опирается на скриптовые языки и является более гибким, так как в этом случае вся логика работы ИИ отделена от основного кода движка. Скриптовые системы правил применяются шире всего в стратегических играх, например Age of Empires.
Достоинством такого подхода, несомненно, являются простота реализации и быстродействие. Из всех вариантов ИИ скриптовый наиболее быстрый, потому он и используется в играх когда все доступные ресурсы кидаются на красоту картинки или реалистичность физики. Также данный алгоритм не требует мороки с обучением.
Собственно, наличие на одно действие с одним набором условий одного и только одного ответа и является наиболее бросающимся в глаза недостатком скриптов, за который их постоянно ругают. Приноровившись к такому ИИ, человек мысленно построит у себя в голове примерную схему его действий и уже способен будет предсказать реакцию бота на любое поведение. Результат – потеря интереса к игре, так как игрок отлично знает, что выкинет бот в данный момент. Бросающееся в глаза улучшение алгоритма – придумать несколько вариантов ответов на одно и то же состояние и случайным образом выбирать один из них. Это, разумеется, будет выглядеть лучше, но искусственность ИИ всё равно будет бросаться в глаза. Скриптовый ИИ неспособен предпринимать неожиданных действий (а ведь порой глупые на первый взгляд действия человека благодаря эффекту неожиданности позволяют ему победить). Кстати, не стоит в данном случае тыкать пальцем в слово «победить» и напоминать автору про цель ИИ.
Поэтому скриптовый ИИ – скорее, решение на крайний случай, когда иные варианты по тем или иным причинам считаются нецелесообразными. Скрипт не подведёт – но и не даст надолго заинтересовать игрока. В то же время для небольших «крупинок» игры следует применять именно скрипты. Например, какая разница, насколько шаблонно ведёт себя отдельный пехотинец в армии из пяти десятков себе подобных, оставшись без приказов игрока? В таких случаях скриптовость даже идёт в плюс – не замедляет излишне процессор и освобождает игрока от лишнего микроконтроля.