- •Курсовая работа
- •Тема: «Обучение с подкреплением в робототехнике: обзор алгоритмов (dqn, ppo, sac) и примеров применения в сборке. Сравнение методов, их применимость для задач манипуляции нежёсткими объектами.»
- •Аннотация
- •Содержание
- •Список сокращений и условных обозначений
- •Введение
- •Системный анализ разработки интеллектуального агента с применением обучения с подкреплением
- •1.1 Общая характеристика и современные тенденции применения искусственного интеллекта и машинного обучения в игровой индустрии и симуляциях
- •1.2 Анализ задач и определение требований к интеллектуальному агенту. Характеристика целевых сред и сценариев тестирования
- •1.3 Описание потоков данных и бизнес-процессов
- •1.4 Обзор и сравнительный анализ игровых движков и фреймворков для реализации обучения с подкреплением
- •1.5 Анализ проблематики выбора архитектуры агента, настройки гиперпараметров и обеспечения стабильности обучения
- •1.6 Патентный поиск
- •1.7 Анализ существующих методов и алгоритмов обучения с подкреплением (dqn, ppo, sac) для задач навигации, управления и принятия решений в виртуальной среде
- •1.7.1 Математическая формализация процесса обучения и алгоритмов ppo и sac
- •1.8 Применимость алгоритмов dqn, ppo и sac для задач манипуляции нежёсткими объектами в роботизированной сборке
- •1.9 Выводы по главе 1
- •2. Методы и технологии разработки и исследования интеллектуального агента в среде unity
- •2.1 Применение фреймворка Unity ml-Agents Toolkit для создания среды обучения, конфигурации агентов и нейронных сетей
- •2.1.1 Архитектура искусственной нейронной сети и конфигурация гиперпараметров
- •2.2 Обзор и сравнительный анализ алгоритмов обучения с подкреплением, методов предобработки данных и техник ускорения обучения
- •2.3 Методы сбора, обработки и визуализации метрик обучения (cumulative reward, loss, entropy) для анализа поведения и эффективности агента
- •2.3.1 Итеративная настройка и эволюция функции подкрепления (Reward Engineering)
- •2.4 Методы оценки производительности, обобщающей способности и устойчивости обученного агента в детерминированных и стохастических условиях
- •2.5 Технологический стек и архитектурные решения для интеграции модели машинного обучения (Python) с игровой логикой и физическим движком (c#/Unity)
- •2.6 Выводы по главе 2
- •3.Экспериментальные исследования и анализ результатов работы интеллектуального агента
- •3.1 Характеристика экспериментального стенда и условий проведения эксперимента
- •3.2 Сравнительный анализ эффективности алгоритмов ppo и sac в задаче навигации
- •3.3 Исследование влияния сенсорной системы и формирования функции вознаграждения
- •3.4 Анализ влияния гиперпараметров на сходимость алгоритма ppo
- •3.5 Абляционные исследования: влияние архитектуры сенсоров и функции вознаграждения на процесс обучения
- •3.6 Профилирование производительности и анализ вычислительной нагрузки в режиме реального времени
- •3.7 Программная реализация алгоритмов поведения и управления агентом
- •3.8 Тестирование и валидация обученной модели в режиме инференса
- •3.9 Выводы по главе 3
- •Заключение
- •Список использованных источников
- •Приложение а
- •Приложение б
2.4 Методы оценки производительности, обобщающей способности и устойчивости обученного агента в детерминированных и стохастических условиях
После завершения процесса обучения была проведена серия контрольных экспериментов для оценки качества полученной модели (Inference). Для этого режим работы агентов в компоненте Behavior Parameters был переключен с обучения на Inference [37] Only, а в качестве модели поведения был загружен файл нейронной сети формата .onnx, продемонстрировавший наилучшие показатели сходимости на этапе обучения (PPO).
Оценка производительности производилась в мультиагентной среде, состоящей из 20 параллельных экземпляров лабиринта. В качестве критерия успешности использовался метрический показатель Success Rate (доля успешных эпизодов к общему числу эпизодов). Визуальный анализ и логирование результатов показали, что обученный агент успешно достигает целевого объекта в 98% случаев, избегая столкновений со статическими препятствиями (стенами) и падений с границ платформы.
Особое внимание в исследовании было уделено оценке обобщающей способности (generalization) [41].
Благодаря внедренному алгоритму стохастической инициализации (рандомный спавн), агент ни разу не сталкивался с одной и той же конфигурацией начальных условий дважды. В ходе тестов было подтверждено, что нейронная сеть не «запомнила» конкретные маршруты, а выработала универсальную навигационную политику. Агент корректно реагировал на появление цели в труднодоступных зонах лабиринта (за углами и перегородками), используя данные сенсора Ray Perception для построения оптимальной траектории обхода.
Проверка устойчивости (robustness) выполнялась в условиях высокой динамики. Несмотря на высокую скорость передвижения (режим VelocityChange), агент демонстрировал стабильное удержание на плоскости и своевременное торможение перед препятствиями, что свидетельствует о корректной аппроксимации физической модели движения внутри скрытых слоев нейронной сети. Пример игрового окна с агентами изображено на рисунке 2.4.
Рисунок 2.4 - Игровое окно game view
2.5 Технологический стек и архитектурные решения для интеграции модели машинного обучения (Python) с игровой логикой и физическим движком (c#/Unity)
Реализация программного комплекса выполнена с использованием современной микросервисной архитектуры, обеспечивающей взаимодействие двух разнородных сред исполнения [38].
Технологический стек проекта включает:
Среда симуляции и визуализации: Игровой движок Unity (версия 6 LTS). Отвечает за рендеринг, обработку физических коллизий (PhysX), управление сценой и генерацию сенсорных данных.
Среда машинного обучения: Язык программирования Python 3.9 в виртуальном окружении. Используются библиотеки PyTorch (для построения и обучения нейронных сетей [42]) и mlagents (для реализации алгоритмов RL).
Протокол взаимодействия: Unity Communicator. Обмен данными между Unity (C#) и Python осуществляется через локальный сокет (localhost) по проприетарному протоколу, основанному на gRPC. Это позволяет передавать тензоры наблюдений и действий с минимальной задержкой.
Архитектура программного решения:
Логика агента реализована на языке C# в классе RollerAgent. Архитектурно решение разделено на методы инициализации (OnEpisodeBegin), сбора данных (CollectObservations) и исполнения действий (OnActionReceived).
Важным архитектурным решением стала реализация безопасного алгоритма расстановки объектов (GetRandomSafePosition). Во избежание программных ошибок и физических артефактов при генерации уровня, данный метод использует физическое перекрытие сфер (Physics.OverlapSphere) для валидации координат перед размещением агента. Это обеспечивает корректность обучающей выборки и исключает ситуации, когда агент оказывается заблокированным внутри геометрии уровня.
Реализация программного комплекса требовала применения современных подходов к организации кода и версионированию, характерных для MLOps (Machine Learning Operations). Поскольку проект объединяет в себе код на C# (логика Unity) и Python (обучение моделей), была разработана специфическая структура репозитория, обеспечивающая изоляцию зависимостей.
Для управления версиями кода использовалась система Git. В репозитории была принята практика ветвления Git Flow, где эксперименты с новыми гиперпараметрами велись в отдельных ветках (feature/hyperparam-tuning), а стабильные конфигурации сливались в основную ветку (main). Это позволило вести параллельную работу над улучшением сенсорной системы и настройкой функции вознаграждения без риска нарушить работоспособность основного стенда.
Важным аспектом разработки стала воспроизводимость экспериментов. В сфере машинного обучения существует проблема "дрейфа" результатов, когда повторный запуск обучения с теми же параметрами дает иную модель из-за скрытых факторов (версии библиотек, состояние генератора случайных чисел). Для решения этой задачи использовалась фиксация случайных зерен (Random Seeds) как в среде Unity (UnityEngine.Random.InitState), так и в библиотеках Python (torch.manual_seed, np.random.seed).
Конфигурационные файлы обучения (trainer_config.yaml) также версионировались. Каждому запуску обучения присваивался уникальный идентификатор (Run ID), который включал в себя временную метку и краткое описание эксперимента. Это позволило структурировать логи в TensorBoard и однозначно связывать полученные графики с конкретными наборами гиперпараметров и версиями кода.
Для оптимизации процесса разработки применялся принцип "Fail Fast" (быстрый провал). Перед запуском длительных сессий обучения (занимающих несколько часов) проводились короткие проверочные тесты (Sanity Checks) на упрощенной версии среды. Это позволяло выявлять грубые ошибки в логике вознаграждения или архитектуре сети (например, исчезающие градиенты) за первые 5-10 минут, экономя значительные вычислительные ресурсы.
Для внедрения обученной модели в финальное приложение использовался формат ONNX (Open Neural Network Exchange). Это открытый стандарт, позволяющий экспортировать модель из PyTorch и импортировать её в Unity. Исполнение модели внутри игрового движка обеспечивается встроенным инференс-движком Unity Sentis (ранее Barracuda), который эффективно использует ресурсы центрального процессора (CPU) для вычисления выходных значений нейросети в реальном времени, что делает систему полностью автономной и не требующей наличия Python на целевом устройстве пользователя [44]. На рисунке 2.5 можно увидеть назначение модели агентам.
Рисунок 2.5 - Окно project и настройки модели
