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): Для улучшенного управления окнами и отображения области захвата.
- Получение файлов проекта:
- Клонируйте репозиторий или загрузите файлы проекта (
GDint.py
,GDint_config.py
, папкаimg
).
- Клонируйте репозиторий или загрузите файлы проекта (
- Создание виртуального окружения (рекомендуется):
python -m venv gdint_env source gdint_env/bin/activate # Linux/macOS gdint_env\Scripts\activate # Windows
- Установка зависимостей:
Создайте файл
requirements.txt
с содержимым:Выполните команду:torch torchvision torchaudio opencv-python numpy mss pynput pygetwindow Pillow pandas matplotlib # Для Windows (опционально): # pywin32
pip install -r requirements.txt
- Режим окна:
- Включите оконный режим в настройках игры (раздел "Графика", отключите "Полноэкранный режим").
- Разрешение экрана (опционально):
- Рекомендуется использовать умеренное разрешение (например, 800x600, 1024x768, 1280x720) для стабильного захвата.
- Упрощение графики (опционально):
- Включение режима низкой детализации может улучшить качество обработки изображений.
Файл GDint_config.py
содержит параметры, необходимые для работы системы. Основные настройки:
- WINDOW_TITLE_SUBSTRING = "Geometry Dash"
- Указывает подстроку заголовка окна игры для его идентификации.
- GAME_OVER_TEMPLATE_PATH = "game_over_template.png"
- Путь к изображению шаблона экрана "Game Over". Для создания шаблона:
- Сделайте скриншот экрана "Game Over" в игре.
- Вырежьте уникальный фрагмент (например, текст "Attempt X" или кнопку повтора).
- Сохраните как
game_over_template.png
в папке сGDint.py
. - Убедитесь, что формат (цветной/монохромный) соответствует параметру
GRAYSCALE
.
- Путь к изображению шаблона экрана "Game Over". Для создания шаблона:
Дополнительные параметры включают:
- Общие настройки: Имя проекта, выбор устройства (
cuda
илиcpu
). - Управление: Клавиша паузы (
PAUSE_RESUME_KEY
). - Логирование: Уровень логирования, сохранение кадров при обнаружении проигрыша.
- Графический интерфейс: Включение/выключение GUI, масштабирование отображения.
- Захват экрана: Резервные координаты области захвата, частота кадров.
- Обработка изображений: Разрешение кадров, использование монохромного режима, количество стековых кадров.
- Параметры обучения: Скорость обучения, размер памяти воспроизведения, частота обновления целевой сети.
- Награды: Значения наград за выживание, проигрыш, прогресс.
- Проверьте настройки
GDint_config.py
и наличие шаблонаgame_over_template.png
. - Запустите Geometry Dash в оконном режиме.
- Перейдите в папку проекта через терминал.
- Активируйте виртуальное окружение (если используется).
- Выполните команду:
python GDint.py
- Во время обратного отсчета переключитесь на окно Geometry Dash, сделав его активным.
- Пауза/возобновление: Нажмите клавишу, указанную в
PAUSE_RESUME_KEY
(по умолчанию 'P'), или используйте кнопки в GUI. - Остановка: Нажмите Ctrl+C в терминале или кнопку "STOP AI" в GUI.
При включении GUI (ENABLE_GUI = True
) отображаются:
- Обработанное изображение: Вид игры, используемый агентом.
- Исходный захват: Прямой захват экрана игры.
- Статистика:
- Текущий эпизод и шаг.
- Общее количество шагов.
- Награда за эпизод и средняя награда.
- Значение Epsilon (вероятность случайных действий).
- Q-значения, действие, потери, частота кадров.
- Статус: Текущее состояние агента.
- Элементы управления: Кнопки паузы и остановки.
GDint использует алгоритм глубокого Q-обучения (DQN):
- Состояние: Обработанное изображение или стек кадров.
- Действие: Выбор между "ничего не делать" или "прыжок".
- Награда: Оценка результата действия (выживание или проигрыш).
- Q-значения: Нейронная сеть предсказывает ожидаемую награду для каждого действия.
- Обучение: Сравнение предсказанных и целевых Q-значений, оптимизация сети с использованием памяти воспроизведения.
- Начинайте с простых уровней.
- Проверяйте качество шаблона
game_over_template.png
. - Настраивайте функцию наград для более частого и точного поощрения.
- Экспериментируйте с гиперпараметрами постепенно.
- Регулярно сохраняйте модель для возможности возврата к успешным версиям.
- Ошибка захвата окна: Проверьте
WINDOW_TITLE_SUBSTRING
или используйтеFALLBACK_GAME_REGION
. - Проблемы с обнаружением проигрыша: Убедитесь в корректности шаблона и порога обнаружения.
- Низкая производительность GUI: Уменьшите
AI_FPS_LIMIT
, разрешение кадров или включите монохромный режим. - Ошибка памяти CUDA: Уменьшите
BATCH_SIZE
или разрешение кадров. - Отсутствие прогресса в обучении: Проверьте функцию наград, гиперпараметры и входные данные.
- Улучшение обнаружения состояний игры.
- Автоматизация повтора после проигрыша.
- Расширенные функции наград.
- Интеграция современных алгоритмов обучения с подкреплением.
- Визуализация данных через TensorBoard.
- Постепенное усложнение задач (Curriculum Learning).
Проект распространяется под лицензией MIT (или аналогичной). Разрешено использование, модификация и распространение при условии соблюдения лицензионных требований.
GDint представляет собой сложный проект, требующий значительных ресурсов и времени для достижения результатов. Успешное обучение агента может стать важным шагом в изучении методов глубокого обучения с подкреплением.