Skip to content

This repository contains the implementation and documentation of a Deep Reinforcement Learning (DRL) agent trained in the VizDoom environment as part of a bachelor's thesis at Novosibirsk State University (NSU). The project explores the use of IEM-PPO (Intrinsic-Exploration-Modulated Proximal Policy Optimization).

Notifications You must be signed in to change notification settings

dolganin/bachelor_degree

Repository files navigation

bachelor_degree

Это проект для создания агента с регулируемым поведением на основе обучения с подкреплением (RL), разработанный в рамках дипломной работы в НГУ (2024-2025 гг). Основной целью проекта является разработка агента с динамически изменяемой сложностью, работающего в среде Doom с использованием древообразной модели. Проект опирается на подходы из работы "Adaptive Incentive Design with Multi-Agent Meta-Gradient Reinforcement Learning", а также использует методы IEM-PPO, описанные в исследовании "Proximal Policy Optimization via Enhanced Exploration Efficiency".

Особенности проекта

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

  • DoomITH — форк VizDoom для создания RL-среды.
  • ForwardNetwork — сеть на основе ResNet34 для обработки изображений среды.
  • PolicyNetwork — трансформер для генерации политики.
  • ValueNetwork — трансформер для оценки ценности состояний.
  • IEM-PPO — усовершенствованный метод оптимизации для эффективного обучения.

Проект разрабатывается с перспективой создания клиент-серверной системы с графическим интерфейсом на основе Flask и Kafka.


Технологии, используемые в проекте

  • DoomITH: Форк библиотеки VizDoom, используемой для создания среды RL.
  • IEM-PPO: Алгоритм оптимизации PPO с улучшенной эффективностью исследования среды.
    • ForwardNetwork: Модель ResNet34 для обработки изображений из среды.
    • PolicyNetwork: Трансформер, отвечающий за генерацию действий на основе текущих состояний.
    • ValueNetwork: Трансформер для оценки ценности состояний.
  • Flask + Kafka: Используются для реализации клиент-серверного интерфейса и распределенной системы.

Установка

Клонируйте репозиторий и перейдите в него:

git clone https://github.com/dolganin/bachelor_degree.git
cd bachelor_degree

Соберите контейнер для фронтенда и сервера

docker-compose up --build -d

Установите необходимые пакеты

sudo apt-get upgrade

sudo apt install g++ gcc
sudo apt install cmake make
sudo apt install libsdl2-dev
sudo apt install libboost-all-dev

Структура проекта

Проект имеет следующую структуру:

base/                   # Базовые модули
configs/                # Конфигурационные файлы (YAML)
main.py                 # Основной файл запуска
create_kafka_topic.sh   # Скрипт для создания Kafka-топика
ppo_with_curiosity/     # Модули PPO с реализацией любопытства
requirements.txt        # Файл зависимостей проекта
runs/                   # Директория для сохранения экспериментов
scenarios/              # Doom сценарии для RL среды
server_consumer/        # Модуль для работы с серверной частью
start_services.sh       # Скрипт запуска вспомогательных сервисов
utilities/              # Утилиты и вспомогательные скрипты
weights/                # Директория для хранения весов моделей

Запуск

Основной файл для запуска проекта — main.py. Он принимает следующие аргументы:

Аргументы командной строки

  • -y, --yaml: Путь к YAML файлу конфигурации (по умолчанию ppobase_config.yaml).
  • -r, --runname: Название папки для сохранения запуска (если не указано, используется имя по умолчанию).
  • -w, --weights: Путь к весам модели (например, weights/my_model.pt). Если не указано, будет использоваться путь по умолчанию.
  • -d, --debug: Включение режима отладки.
  • -t, --test: Включение тестового режима (только для тестирования модели).
  • --timer: Время ожидания в секундах (по умолчанию 5).

Пример команды для запуска с указанием всех аргументов:

python main.py --yaml ppobase_config.yaml --runname experiment_1 --weights model_weights --debug --test --timer 10

Конфигурационные параметры Параметры проекта задаются в YAML-файле конфигурации (например, ppobase_config.yaml). Этот файл определяет структуру и гиперпараметры модели, включая архитектуру и параметры IEM-PPO. Образец файла:

learning_parameters:
  learning_rate: 0.003               # Скорость обучения модели
  discount_factor: 0.96              # Коэффициент дисконтирования будущих наград
  train_epochs: 100                  # Количество эпох для обучения
  replay_memory_size: 5000           # Размер буфера для хранения опыта
  batch_size: 128                    # Размер батча для оптимизатора
  test_episodes_per_epoch: 1000        # Количество эпизодов для тестирования на каждой эпохе
  frame_repeat: 96                   # Количество кадров, повторяемых для каждого действия
  learning_steps_per_epoch: 5000       # Количество шагов обучения за каждую эпоху
  weight_decay: 0.007                # Коэффициент регуляризации весов
  hidden_dim: 512                    # Размерность скрытого слоя нейронной сети
  evaluate_every: 4                  # Частота оценки модели (через каждые N эпох)
  window_size: 100                   # Размер окна для усреднения метрик
  channels: 3                        # Количество каналов во входных данных

ppo_parameters:
  clip_param: 0.2                    # Параметр обрезки для PPO
  lambda_intrinsic: 0.1              # Коэффициент для внутреннего вознаграждения
  entropy_coef: 0.1                  # Коэффициент энтропии для исследования
  clip_epsiolon: 0.2                 # Порог обрезки для значений, чтобы избежать больших скачков
  embedding_dim: 120                 # Размерность эмбеддингов в модели
  num_heads: 8                       # Количество голов в многоголовой механизме внимания
  num_layers: 6                      # Число слоев в трансформер-блоке
  mlp_dim: 256                       # Размерность слоя MLP в трансформере
  patch_size: 10                     # Размер патча для разделения входных данных
  dropout_rate: 0.1                  # Вероятность dropout для регуляризации
  ex_loss: 0.0                       # Дополнительный коэффициент потерь (если есть специфичные потери)

env_parameters:
  resolution: [120, 130]             # Размер экрана (высота и ширина)

doom_cfg_path: "defend_the_line.cfg"  # Путь к файлу конфигурации Doomlearning_parameters:

About

This repository contains the implementation and documentation of a Deep Reinforcement Learning (DRL) agent trained in the VizDoom environment as part of a bachelor's thesis at Novosibirsk State University (NSU). The project explores the use of IEM-PPO (Intrinsic-Exploration-Modulated Proximal Policy Optimization).

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published