Добавил:
ИВТ (советую зайти в "Несортированное")rnПИН МАГА Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Баранов_Вадим_Пин11М (1).docx
Скачиваний:
0
Добавлен:
06.09.2026
Размер:
2 Мб
Скачать

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].

Технологический стек проекта включает:

  1. Среда симуляции и визуализации: Игровой движок Unity (версия 6 LTS). Отвечает за рендеринг, обработку физических коллизий (PhysX), управление сценой и генерацию сенсорных данных.

  2. Среда машинного обучения: Язык программирования Python 3.9 в виртуальном окружении. Используются библиотеки PyTorch (для построения и обучения нейронных сетей [42]) и mlagents (для реализации алгоритмов RL).

  3. Протокол взаимодействия: 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 и настройки модели