Создание AI -агентов машинного обучения в Unreal Engine 4 & 5

Введение в MindMaker: https://www.youtube.com/watch?v=erm_pzhapia
Обзор Blueprints: https://youtu.be/tuo423nujek
Группа Discord: https://discord.gg/shxfwtmsha
Плагин MindMaker AI -это плагин с открытым исходным кодом, который позволяет игре и моделированию в UE4 и UE5 функционировать в качестве спортивных средств OpenAI для обучения агентов автономного машинного обучения. Плагин облегчает сетевое соединение между проектом Unreal Engine, содержащим учебную среду, и библиотекой Python ML, которая получает данные от Unreal Engine Engine и Saclses в пользовательскую среду спортзала Openai для обучения агента. Автономная библиотека машинного обучения может быть индивидуальным сценарием Python в случае, если вы создаете свой собственный инструмент ML с использованием удаленного ML-сервера MindMaker, либо это может быть предварительно скомпилированный двигатель обучения, такой как DRL-двигатель MindMaker (Altable-Baselines3). Независимо от того, какой вариант вы выберете, используя разработчики и исследователи плагина Mindmaker AI, которые могут легко обучать машинного обучения для проектов 2D, 3D и VR.
Возможные приложения простираются за пределы дизайна игры до различных научных и технических усилий. К ним относятся роботизированное моделирование, автономное вождение, генеративную архитектуру, процедурную графику и многое другое. Этот API предоставляет центральную платформу, из которой достижения в области машинного обучения могут достигать многих из этих областей. Для разработчиков игр варианты использования самооптимизирующих агентов включают контроль поведения NPC (в различных настройках, таких как многоагентные и состязательные), прототипирование решений для дизайна игры и автоматическое тестирование сборки игровых автоматов.
Двигатель обучения DRL включен в ссылку на пример проекта, а также исходный код Python для его изменения, найденный в каталоге Content Mindmaker Source. Algorithms presently supported by the DRL Learning Engine include : Actor Critic ( A2C ), Sample Efficient Actor-Critic with Experience Replay (ACER), Actor Critic using Kronecker-Factored Trust Region ( ACKTR ), Deep Q Network ( DQN ), Proximal Policy Optimization ( PPO ), Soft Actor Critic ( SAC ), Twin Delayed DDPG ( TD3 ), Trust Region Policy Optimization ( TRPO ), Глубокий детерминированный градиент политики (DDPG). Плагин функционально похож на агенты ML Unity, с некоторыми преимуществами - вместо того, чтобы необходимо создавать пользовательскую среду спортзала Openai для каждого приложения, использует одну среду и просто выбирает, какие из наблюдений и действий агента, чтобы подвергать алгоритму ML. Вуаля, пусть начнется обучение!
Есть два основных компонента, которые вы будете использовать во время работы с плагином MindMaker, нереальным проектом, содержащим среду обучения, и автономной библиотекой машинного обучения, используемой агентом для оптимизации того, что он пытается выучить. Автономная библиотека машинного обучения может быть индивидуальным сценарием Python в случае, если вы создаете свой собственный инструмент ML с использованием удаленного ML -сервера MindMaker, либо это может быть предварительно скомпилированный двигатель обучения, такой как двигатель MindMaker DRL (стабильные базовые алгоритмы).
Чтобы экспериментировать с использованием различных библиотек ML в сочетании с MindMaker, используйте удаленный ML -сервер MindMaker. С помощью этого вы можете настроить свой собственный двигатель Python Learning, а не использовать предварительно скомпилированный двигатель MindMaker DRL. Чтобы использовать удаленный сервер ML, выполните следующие действия:
Если вы хотите использовать несколько клиентов ML, подключенных к одной среде обучения, например, в сценарии с несколькими агентами, это может быть сделано с помощью сервера MindMaker и плагина.
Чтобы создать несколько учебных агентов, сначала настройте свои учебные агенты, как показано в одном из примеров чертежей. Для каждого нового учебного агента вам нужно будет увеличить настройки порта сокета в новом контроллере ИИ на 1. На момент запуска сервера номера портов сервера автоматически создаются для каждого нового экземпляра MindMaker.exe, который вы запускаете, начиная с 3000 и поднимаясь оттуда на общую сумму 100. Если вам требуется более 100 учебных агентов, запросите это в Github.
Например, если вы добавите второго учебного агента в свою карту, вам понадобятся все те же функции, которые находятся в первом учебном агенте, узлом Blueprint Blueprint запуска Mindmaker, но вместо того, чтобы присвоить его на порт 3000, вы назначите его порт 3001 в Blueprints. Помимо изменения настройки порта Socketio в чертеже, вам также необходимо также изменить функцию Blueprint Connect Socketio, изменяя адрес в IN и порт на новый номер, который вы создали, например, «http: // localhost: 3001».
Как только это будет сделано, вам просто нужно будет создать второй экземпляр вашего файла mindmaker_client.py, который будет подключаться к вашему второму учебному агенту. Обучение может быть проведено одновременно, параллельно. Единственная модификация, которую вам необходимо внести в mindmaker_client.py, - это изменение sio.connect ('http: // localhost: 3000') в нижней части файла на sio.connect ('http: // localhost: 3001') или что -то в этом роде, что вы работаете. Если у вас пять учебных агентов, то у вас будет пять случаев, когда клиент работает, и у каждого будет новый номер порта до 3005
Имитационное обучение со стабильными базерами 3 Источник Mindmaker Python может быть изменен для поддержки имитационного обучения с использованием поддерживаемых AltableBaselines имитационных алгоритмов обучения
Чтобы сохранить обученную модель, установите флажок «Сохранить модель после обучения» в функции запуска MindMaker на True. Вам нужно будет убедиться, что количество тренировочных эпизодов не является нулевым числом. Модель спасет после завершения обучения. Чтобы загрузить обученные модели, снимите флажок «Сохранить модель после обучения» и вместо этого установите флажок «Нагрузка предварительно обученной модели» в функцию «Запуск MindMaker» на True. Вам также нужно будет установить количество тренировочных эпизодов на ноль, поскольку обучение не должно. Убедитесь, что количество эпизодов оценок является ненулевым целым числом, так как это будет то, как предварительно обученная модель демонстрирует обучение. Модели сохраняются локально в папке «appdata roaming» вашего компьютера, например, C: users leon appdata roaming
По умолчанию MindMaker сохраняет только в каталоге AppData/Roaming на машинах Windows. Чтобы включить журнал Tensorboard, следуйте этим шагам.
Это трехэтапный процесс, вам необходимо решить, какие действия может предпринять агент, каковы будут его критерии вознаграждения, и какие наблюдения потребуется агенту, чтобы сделать о своей среде, чтобы успешно научиться получать вознаграждение.
Запустить MindMaker ---------> Получить действие --------> Сделать obs -----> Проверьте награды --------> Отправить OBS и RWRD MindMaker ------ Вернитесь к получению действий
В процессе обучения двигатель обучения MindMaker должен сначала быть настроен с пространством наблюдения, которое использует агент, и общее количество действий, доступных для агента. Вам не нужно предоставлять какую -либо информацию о вознаграждении при ее инициативе, это будет встречаться только во время обучения.
Общий процесс обучения заключается в том, что после запуска и подключения к нереальному двигателю, двигатель MindMaker Learning начнет предлагать случайные действия для предпринимателя нереального двигателя, и в ответ агент с UE отправит список наблюдений, которые он совершил после принятия действия, в дополнение к любому вознаграждению, полученному в процессе. См. Выше диаграмма. В течение многих эпизодов алгоритм, используемый MindMaker, оптимизирует действия агентов в ответ на наблюдения и вознаграждения, полученные от UE. Этот процесс одинаков независимо от того, какой алгоритм машинного обучения выбрать с MindMaker. С этой информацией алгоритм обучения, используемый MindMaker, начнет оптимизировать решения действий агентов, в идеале обнаружить последовательность, необходимую для последовательно получения вознаграждений. Компромисс между случайными действиями и преднамеренными контролируется в параметрах разведки/эксплуатации библиотеки ML, которые вы выбрали для использования с MindMaker, например, стабильными базовыми показателями. Этот процесс повторяется для каждого эпизода обучения. После фиксированного количества тренировочных эпизодов вы можете полностью переключиться на использование алгоритма для прогнозирования «лучших» действий вместо того, чтобы принимать случайные.
MindMaker функционирует, завершая нереальную среду в совместимом с Openai Gym, так что любая библиотека ML, которая была разработана для работы с спортзалом Openai, могла быть развернута в вашей среде нереальной двигатели. Цель использования открытого спортзала AI состоит в том, чтобы стандартизировать соответствующие факторы для обучения, а именно формат для получения наблюдений за агентами, вознаграждений и действий, чтобы любой ML AlgorityHM мог иметь доступ к соответствующим переменным для обучения без необходимости модифицировать для каждой конкретной задачи. Алгоритмы, которые работают с тренажерным залом Openai, могут работать с любой средой и агентом, который использует стандартизированный протокол Openai.
Настройка MindMaker Learning Engine С самого начала вам необходимо будет настроить функцию запуска MindMaker в Unreal Engine для вашего учебного агента. Это делается путем установки переменной Action_space в Mindmaker, чтобы равняться общему количеству действий, доступных вашему агенту. Вам также необходимо будет настроить переменную vasement_space, чтобы соответствовать количеству и типам наблюдений, которые будет использовать ваш агент в отношении вознаграждения, которую он пытается получить. По умолчанию наблюдения передаются из Unreal в качестве массива, см. Пример проекта. В зависимости от количества наблюдений, которые ваш агент найдет необходимым для использования, размер наблюдения_space изменится.
Награда - награда - это переменная, которая устанавливается в соответствии с конкретным критерием, который вы выбрали для агента, чтобы учиться или оптимизировать. В плане UE4 вы будете использовать узел ветвления, чтобы определить, какие условия окружающей среды и действие агента должны быть выполнены для активации вознаграждения. Это, чем передается Mindmaker с помощью соединения сокета. См. Пример проекта. Действие - это переменная, которая содержит целочисленное значение, представляющее любое действие, которое предпринял агент. Вам также необходимо будет определить общее количество действий, доступных для агента, и установить максимальные действия в Mindmaker, чтобы равняться этому числу. Наблюдения - можно найти самые сложные переменные, с которыми вы будете иметь дело. Ключом к правильному установлению этого является понимание того, что сами действия агентов должны быть включены в переменную наблюдения, в дополнение к любому другому экологическому критерию, упомянутому в функции вознаграждения. Агент должен знать, какие действия или действия он предпринял, что повлияло на вознаграждение и любые переменные среды, которые также изменились. Они передаются в двигатель Mindmaker Learning в качестве массива и обновляются в переменной наблюдения в нем.
Здесь мы обсудим индивидуальные параметры узла Blueprint Mindmaker, который является основным компонентом функций BluePrints MindMaker.
Алгоритм RL - вот где можно выбрать вкус алгоритма RL, с которым хочет обучить агента. В выпадающем меню есть десять вариантов, причем каждый алгоритм имеет свои собственные плюсы и минусы. Подробное обсуждение доступных соответствующих алгоритмов и их вариантов использования можно найти здесь. https://spinningup.openai.com/en/latest/spinningup/rl_intro2.html
Num Train EP - это целочисленный вход, представляющий количество эпизодов обучения, которые можно было бы предпринять агенту. Чем больше число тренировочных эпизодов, тем больше разведки агент делает перед переходом к стратегическому поведению, которое он приобретает во время обучения. Сложность действий, которые агент пытается выучить, обычно определяет количество требуемых тренировочных эпизодов - более сложные стратегии и поведение требуют большего обучения.
Num Eval EP - это также целочисленный вход и представляет количество эпизодов оценки, которые агент будет проходить после обучения. Это эпизоды, в которых агент демонстрирует свое изученное поведение.
Пространство непрерывного действия - это логический вход, который определяет, использует ли агент непрерывное пространство действий. Непрерывное пространство действий - это то, в котором существует бесконечное количество действий, которые может предпринять агент, например, если он учится управлять автомобилем, и диапазон углов, под которыми может измениться рулевая колонка, является десятичным значением от 0 до 180, чем бесконечное количество значений, таких как .12 и 145.774454. Вы захотите идентифицировать с самого начала использования, если у вашего агента бесконечное количество действий или конечных чисел, которые они могут предпринять. Пространство действий должно быть либо непрерывным, либо дискретным, оно не может быть обоими.
Дискретное пространство действий - это логический вход, который определяет, использует ли агент дискретное пространство действий. Дискретное пространство действий - это то, в котором существует конечное количество действий, которые может предпринять агент, например, если ИИ может перемещать только одно пространство или оставить одно пространство. В этом случае у него есть только два доступных действий, а пространство действий является дискретным. Пользователь определяет, какое пространство действий будет использовать агент перед использованием MindMaker и соответственно установить эти значения.
Форма пространства действия - это определяет нижние и верхние границы действий, доступных для агента. Если вы используете дискретное пространство действий, то это просто общее количество действий, доступных для агента, например, 2 или 8. Если вы используете непрерывное пространство действий, все будет более сложным, и вы должны определить низкие и высокие границы пространства действий отдельно. Формат для этого заключается в следующем: low = низкий уровень, высокий = высокий, Shape = (1,) В данном случае, низкое значение является таким значением, как -100,4, а высокий уровень -это значения, такие как 298,46. Все десятичные значения между этими границами будут представлять действия, доступные для агента. Если у вас был множество таких действий, вы можете изменить часть формы, чтобы отразить это.
Форма пространства наблюдения - правильно говоря, этот вход является производным питона открытого класса EI Custom Environment и определяет нижние и верхние границы наблюдений, доступных агенту после того, как он предпримет действие. Формат для этого заключается в следующем: low = np.Array ([[низкий уровень]), High = np.Array ([[Highboundary]), dtype = np.float32. Представьте себе агента, которому нужно было предпринять три конкретных действий подряд, чтобы получить вознаграждение, тогда его пространство наблюдения должно было бы включить доступ к этим трем действиям, каждый из которых будет представлен уникальным наблюдением. Следовательно, массив наблюдений должен был бы включать три разных значения, каждое из которых имеет собственные уникальные границы. Например, такое пространство действий может быть определена как таковое: low = np.array ([0,0,0]), высокий = np.Array ([100 100 100]), dtype = np.float32, если каждое из его собственных действий, необходимого для наблюдения, было значением между 0 и 100. Правило большого значения - это то, что значение является частью. чем пространство наблюдения должно включать ссылку на это значение. Если для агента необходимо выполнить пять условий, то каждое из этих пяти условий должно быть частью пространства наблюдения агентов.
Нагрузка, предварительно обученная моделью - это логическое значение, которое определяет, хотите ли вы, чтобы агент загрузил некоторое предварительно обученное поведение, которое было ранее сохранено. Если вы установите это на True, вы захотите указать имя файла в поле «Сохранить /загрузку модели». Все модели по умолчанию сохраняются в каталоге Roaming Data App, например, C: users username appdata roaming
Сохранить модель после обучения - это логическое значение, которое определяет, хотите ли вы агенту, чтобы сохранить поведение, которое он изучил после обучения. Если вы установите это на True, вы захотите указать имя файла в поле «Сохранить/загрузку модели». Все модели по умолчанию сохраняются в каталоге Roaming Data App, например, C: users username appdata roaming
Сохранить/загрузить имя модели - это строка, представляющая имя модели, которую вы хотите сохранить или загрузить. Файлы сохраняются в каталоге приложения для роуминга компьютера, например, c: users username appdata roaming
Используйте пользовательские параметры - это логическое значение, которое определяет, хотите ли вы использовать запасную версию выбранного вами алгоритма, или хотите изменить его параметры. Если вы хотите использовать пользовательские параметры, к ним можно получить доступ через пользовательские переменные структуры параметров. Если вы нажмете на них, например, A2CParams, вы увидите все значения, которые могут быть установлены в этих структурах. Подробный разбив параметров для каждого алгоритма можно найти здесь: https://stable-baselines.readthedocs.io/en/master/
Пример списка функций из примера проекта представлен ниже, чтобы понять, как передается информация между MindMaker и Unreal Engine Все активы UE, относящиеся к проблеме игрушек, содержатся в папке Assets/DeeplearningNPC. Особое значение имеет план, называемый AI_CHARACTER_CONTROLER_BP в плане AI_CHARACTER_CONTROLER_BP, все переменные среды настроены для передачи в автономное приложение Mindmaker. К ним относятся следующие важные функции
Нагрузка сенсорной входной функции - импортирует объекты, к которым ИИ будет иметь доступ для определения или манипулирования своей функцией управления окружающей средой - это управляет логикой для частей среды, которые изменяют такие переключающие огни включенные и выключенные и т. Д.
Определить функцию пространства действий - кодировать все возможные действия агента в одно числовое значение, которое можно передать в автономное приложение для оценки с помощью алгоритма RL
Функция запуска MindMaker - это вызывает автономное приложение в начале PLAY, чтобы она мог начать данные оценки из среды UE. После того, как это инициируется, приложение RL начинает исследовать окружающую среду случайными действиями, которые он генерирует себя, как слепой, ищущий в темноте для света. Свет - это вознаграждение, которая указана в функции вознаграждения Fund Function Fund. Записка LaunchlearningEngine также передает некоторую базовую информацию о среде UE в автономное приложение, например, количество действий, которые может предпринять агент, общее количество эпизодов для обучения и количество эпизодов для отображения агентов, приобретенных стратегией после обучения. Появление всех агентов, случайное обучение займет слишком долго.
Функция получения - после начала функции запуска двигателя обучения, следующей функцией для огня является восприятие. Это получает действие, которое выбирается автономным применением, и выполняет ряд последующих процедур, таких как обновление местоположения агентов в окружающей среде, проверка того, удовлетворяет ли новое действие условие вознаграждения, демонстрация действий агентов, если мы проходим обучение и обновили наблюдения агентов о ее среде, чтобы они могли быть переданы обратно в применение STANDALONE в следующем эпизоде.
Сделать функцию наблюдений - цель этого состоит в том, чтобы обновить наблюдения агентов о его среде после только что предпринятого действия, которое оно приняло. Они будут включать, например, местоположение агентов с окружающей средой и любые другие изменения окружающей среды, которые изменились с тех пор, как они в последний раз предприняли действие. Они хранятся в пользовательской структурной переменной.
CheckRearward - это указывает условие вознаграждения для агента в окружающей среде. Если это условие вознаграждения выполняется после агента, предпринятого действия, эта информация передается в автономное приложение в следующей функции наблюдений Send. Отправить функцию наблюдений - принимает новые наблюдения, сделанные агентом, а также любую информацию о вознаграждении, и передает их в автономное приложение. Вот как алгоритм RL сможет оценить, было ли только что предпринятое действие, которое он предпринял хорошим, и соответственно обновить ее стратегию. После того, как эта функция стреляет, одна итерация или эпизод игры завершен, и процесс повторяет ad Infinitum.
Определенные задачи могут потребовать продолжительных периодов обучения, когда визуализация движений агента окажется чрезмерно трудоемким. Как таковые в определенных примерах, визуализируя движения агента были отключены, но обучение проводится в фоновом режиме после запуска примера, и после завершения агент продемонстрирует приобретенную стратегию.
Случайный в этом случае означает, что агент использует генератор случайных чисел для выбора между действиями, доступными для него во время обучения. Затем алгоритм RL наблюдает результаты этих случайных действий, а также любые полученные вознаграждения и используют эту информацию для выбора лучших действий на этапе «эксплуатации». Так разрабатывается изученная стратегия.
Сбор информации во время обучения принимает форму наблюдений, которые генерируются после каждого из случайных действий агента. При использовании плагина MindMaker точная форма массива определяется в свойстве размера наблюдения функции Blueprint Blueprint запуска MindMaker и будет зависеть от того, какие переменные необходимы для агента, чтобы наблюдать в этой конкретной игре или учебной задаче. Это изменится в зависимости от учебной задачи или игры.
Агент воспринимает только ту часть окружающей среды, которая подвергается им воздействию игрового дизайнера. При использовании плагина MindMaker эти наблюдения заполняются в вызове функции Blueprint Plunections в рамках нереального двигателя. Это будет генерировать массив чисел в форме, определенной свойством размера наблюдения функции Blueprint Blueprint Launchmaker. Наблюдения должны быть отобраны, чтобы они включали только данные, необходимые для агента, у него, в противном случае обучение может стать чрезмерно трудоемким.
В Vanilla Q Learning - Нейронная сеть не требуется, а обучение хранится в табличном формате. При использовании Mindmaker Deep Revision Learning можно выбрать между различными архитектурами нейронной сети, включая RNN, CNN и т. Д. Можно установить их в рамках пользовательских свойств каждого алгоритма функции Blueprint Blueprint Lainchmaker.
Создание пользовательской среды обучения глубокого подкрепления
Вступление Чтобы укрепить обучение для видеоигр AI
Подкрепление обучения - это обещание и опасность
Стабильная базовая документация