Skip to content
/ GDind Public

GDint is a Python-based AI agent designed to learn and play the game Geometry Dash using Deep Reinforcement Learning (DRL). It employs a Deep Q-Network (DQN) powered by PyTorch to process visual input from the game, make decisions (jump or do nothing), and learn from its successes and failures.

License

Notifications You must be signed in to change notification settings

SynvexAI/GDind

Repository files navigation

GDint: Обучение искусственного интеллекта для прохождения игры Geometry Dash

GDint — это проект на языке Python, направленный на разработку и обучение агента с использованием алгоритма глубокого Q-обучения (Deep Q-Network, DQN) для автономного прохождения уровней в игре Geometry Dash. Проект включает в себя функции захвата экрана, обработки изображений, нейронной сети на базе PyTorch и графического интерфейса пользователя (GUI) для мониторинга и управления процессом обучения.


Основные возможности

  • Автономное обучение: Агент использует алгоритм глубокого Q-обучения для изучения игрового процесса через многократные попытки.
  • Захват экрана: Автоматическое обнаружение и захват окна игры Geometry Dash.
  • Обработка изображений: Преобразование захваченных кадров в формат, подходящий для анализа нейронной сетью (настраиваемое разрешение, выбор между цветным и монохромным режимом).
  • Имитация ввода: Эмуляция кликов мыши для выполнения прыжков в игре.
  • Графический интерфейс: Отображение обработанных изображений, исходного захвата экрана, статистики обучения (Q-значения, функции потерь, награды) и элементов управления.
  • Функция паузы: Возможность приостановки и возобновления процесса обучения.
  • Конфигурация параметров: Настройка параметров через файл GDint_config.py.
  • Логирование и визуализация: Ведение логов обучения и создание графиков для анализа прогресса.
  • Обработка последовательности кадров: Использование нескольких последовательных кадров для анализа движения и контекста.
  • Обнаружение проигрыша: Система определения экрана "Game Over" с использованием метода соответствия шаблонов.

Цель проекта

Проект направлен на исследование возможностей алгоритмов глубокого обучения в задачах с редкими наградами, требующих высокой точности и обработки сложных визуальных данных. Geometry Dash представляет собой сложную задачу для обучения с подкреплением из-за следующих особенностей:

  • Редкие награды: Значимые результаты достигаются только при завершении уровня.
  • Высокая точность: Требуется синхронизация действий с точностью до миллисекунд.
  • Сложное представление состояния: Необходимость обработки сырых пиксельных данных.
  • Баланс исследования и использования: Необходимость оптимального сочетания случайных и целенаправленных действий.

Требования

Для работы с GDint необходимы следующие компоненты:

  • Python: Версия 3.7 или выше.
  • Pip: Установщик пакетов Python.
  • Geometry Dash: Установленная игра.
  • pywin32 (опционально, для Windows): Для улучшенного управления окнами и отображения области захвата.

Установка и настройка

  1. Получение файлов проекта:
    • Клонируйте репозиторий или загрузите файлы проекта (GDint.py, GDint_config.py, папка img).
  2. Создание виртуального окружения (рекомендуется):
    python -m venv gdint_env
    source gdint_env/bin/activate  # Linux/macOS
    gdint_env\Scripts\activate    # Windows
  3. Установка зависимостей: Создайте файл requirements.txt с содержимым:
    torch
    torchvision
    torchaudio
    opencv-python
    numpy
    mss
    pynput
    pygetwindow
    Pillow
    pandas
    matplotlib
    # Для Windows (опционально):
    # pywin32
    Выполните команду:
    pip install -r requirements.txt

Настройка игры Geometry Dash

  1. Режим окна:
    • Включите оконный режим в настройках игры (раздел "Графика", отключите "Полноэкранный режим").
  2. Разрешение экрана (опционально):
    • Рекомендуется использовать умеренное разрешение (например, 800x600, 1024x768, 1280x720) для стабильного захвата.
  3. Упрощение графики (опционально):
    • Включение режима низкой детализации может улучшить качество обработки изображений.

Конфигурация (GDint_config.py)

Файл GDint_config.py содержит параметры, необходимые для работы системы. Основные настройки:

  1. WINDOW_TITLE_SUBSTRING = "Geometry Dash"
    • Указывает подстроку заголовка окна игры для его идентификации.
  2. GAME_OVER_TEMPLATE_PATH = "game_over_template.png"
    • Путь к изображению шаблона экрана "Game Over". Для создания шаблона:
      • Сделайте скриншот экрана "Game Over" в игре.
      • Вырежьте уникальный фрагмент (например, текст "Attempt X" или кнопку повтора).
      • Сохраните как game_over_template.png в папке с GDint.py.
      • Убедитесь, что формат (цветной/монохромный) соответствует параметру GRAYSCALE.

Дополнительные параметры включают:

  • Общие настройки: Имя проекта, выбор устройства (cuda или cpu).
  • Управление: Клавиша паузы (PAUSE_RESUME_KEY).
  • Логирование: Уровень логирования, сохранение кадров при обнаружении проигрыша.
  • Графический интерфейс: Включение/выключение GUI, масштабирование отображения.
  • Захват экрана: Резервные координаты области захвата, частота кадров.
  • Обработка изображений: Разрешение кадров, использование монохромного режима, количество стековых кадров.
  • Параметры обучения: Скорость обучения, размер памяти воспроизведения, частота обновления целевой сети.
  • Награды: Значения наград за выживание, проигрыш, прогресс.

Запуск GDint

  1. Проверьте настройки GDint_config.py и наличие шаблона game_over_template.png.
  2. Запустите Geometry Dash в оконном режиме.
  3. Перейдите в папку проекта через терминал.
  4. Активируйте виртуальное окружение (если используется).
  5. Выполните команду:
    python GDint.py
  6. Во время обратного отсчета переключитесь на окно Geometry Dash, сделав его активным.

Управление во время работы

  • Пауза/возобновление: Нажмите клавишу, указанную в PAUSE_RESUME_KEY (по умолчанию 'P'), или используйте кнопки в GUI.
  • Остановка: Нажмите Ctrl+C в терминале или кнопку "STOP AI" в GUI.

Графический интерфейс

При включении GUI (ENABLE_GUI = True) отображаются:

  • Обработанное изображение: Вид игры, используемый агентом.
  • Исходный захват: Прямой захват экрана игры.
  • Статистика:
    • Текущий эпизод и шаг.
    • Общее количество шагов.
    • Награда за эпизод и средняя награда.
    • Значение Epsilon (вероятность случайных действий).
    • Q-значения, действие, потери, частота кадров.
  • Статус: Текущее состояние агента.
  • Элементы управления: Кнопки паузы и остановки.

Принципы работы алгоритма

GDint использует алгоритм глубокого Q-обучения (DQN):

  1. Состояние: Обработанное изображение или стек кадров.
  2. Действие: Выбор между "ничего не делать" или "прыжок".
  3. Награда: Оценка результата действия (выживание или проигрыш).
  4. Q-значения: Нейронная сеть предсказывает ожидаемую награду для каждого действия.
  5. Обучение: Сравнение предсказанных и целевых Q-значений, оптимизация сети с использованием памяти воспроизведения.

Рекомендации по обучению

  • Начинайте с простых уровней.
  • Проверяйте качество шаблона game_over_template.png.
  • Настраивайте функцию наград для более частого и точного поощрения.
  • Экспериментируйте с гиперпараметрами постепенно.
  • Регулярно сохраняйте модель для возможности возврата к успешным версиям.

Устранение неполадок

  • Ошибка захвата окна: Проверьте WINDOW_TITLE_SUBSTRING или используйте FALLBACK_GAME_REGION.
  • Проблемы с обнаружением проигрыша: Убедитесь в корректности шаблона и порога обнаружения.
  • Низкая производительность GUI: Уменьшите AI_FPS_LIMIT, разрешение кадров или включите монохромный режим.
  • Ошибка памяти CUDA: Уменьшите BATCH_SIZE или разрешение кадров.
  • Отсутствие прогресса в обучении: Проверьте функцию наград, гиперпараметры и входные данные.

Перспективы развития

  • Улучшение обнаружения состояний игры.
  • Автоматизация повтора после проигрыша.
  • Расширенные функции наград.
  • Интеграция современных алгоритмов обучения с подкреплением.
  • Визуализация данных через TensorBoard.
  • Постепенное усложнение задач (Curriculum Learning).

Лицензия

Проект распространяется под лицензией MIT (или аналогичной). Разрешено использование, модификация и распространение при условии соблюдения лицензионных требований.


GDint представляет собой сложный проект, требующий значительных ресурсов и времени для достижения результатов. Успешное обучение агента может стать важным шагом в изучении методов глубокого обучения с подкреплением.

About

GDint is a Python-based AI agent designed to learn and play the game Geometry Dash using Deep Reinforcement Learning (DRL). It employs a Deep Q-Network (DQN) powered by PyTorch to process visual input from the game, make decisions (jump or do nothing), and learn from its successes and failures.

Topics

Resources

License

Stars

Watchers

Forks

Contributors 3

  •  
  •  
  •  

Languages