lab_6 #6

Merged
Arutunyan-Dmitry merged 3 commits from lab_6 into main 2024-12-14 09:04:37 +04:00
Showing only changes of commit 7508cf58e7 - Show all commits

View File

@ -15,16 +15,12 @@
"**Проект состоит из следующих компонентов:**\n",
"1. **Среда TicTacToeEnv:**<br>\n",
" Реализует правила игры в крестики-нолики, управление ходами, проверку победных условий и завершения игры. Обеспечивает визуализацию доски (render) и генерацию доступных ходов.\n",
"\n",
"2. **Игроки:**<br>\n",
" Два случайных игрока, каждый из которых выбирает ход из доступных с помощью функции random_move.\n",
"\n",
"3. **Цикл обучения:**<br>\n",
" Выполняется симуляция игр (эпизодов) между игроками. Учитываются награды, проверяются завершения игр и ведётся статистика (например, средняя награда).\n",
"\n",
"4. **Параметры обучения:**<br>\n",
" Задаются переменные (alpha, beta) для возможной адаптации стратегий, хотя в текущей версии они не используются.\n",
"\n",
"5. **Сбор данных:**<br>\n",
" Коллекционируются награды и результаты эпизодов для анализа и оценки эффективности случайных стратегий. \n",
"\n",
@ -160,22 +156,18 @@
"**Описание логики цикла:**\n",
"1. **Инициализация:**<br>\n",
" Перед началом эпизодов задаются параметры обучения: коэффициенты alpha и beta, общее количество эпизодов (num_episodes), список для накопления наград (collected_rewards), и переменная oom для указания начального игрока.\n",
"\n",
"2. **Начало эпизода:**\n",
" - Сбрасывается среда с помощью env.reset(), что очищает доску и задаёт начального игрока.\n",
" - Счётчик наград total_reward обнуляется, а флаги (done) и очередность хода (om) обновляются.\n",
"\n",
"3. **Цикл ходов в одном эпизоде:**\n",
" - Генерируется список доступных ходов с помощью move_generator. Если нет доступных ходов, игра заканчивается.\n",
" - Если доступен только один возможный ход, он выполняется. В противном случае выбирается случайный ход с помощью функции random_move.\n",
" - Выполняется выбранный ход методом step, который возвращает новое состояние среды, награду, индикатор завершения игры и дополнительные данные.\n",
" - Суммируется полученная награда, обновляется текущее состояние, а очередь хода передаётся другому игроку (om = -om).\n",
" - Если игра завершена (done = True), цикл прерывается.\n",
"\n",
"4. **Сбор статистики:**\n",
" - Награда за эпизод сохраняется в список collected_rewards.\n",
" - Каждые 50 эпизодов выводится информация о прогрессе: рендерится текущая доска, печатается общий выигрыш за эпизод и средняя награда за все предыдущие эпизоды.\n",
"\n",
"5. **Повторение:**<br>\n",
" Цикл продолжается до завершения заданного количества эпизодов. После каждого эпизода накапливаются данные для анализа и настройки параметров, если необходимо."
]
@ -499,35 +491,26 @@
"Проект представляет собой обновленную реализацию среды для игры в крестики-нолики с использованием библиотеки Gymnasium и модели обучения с подкреплением, где агент обучается с помощью метода Q-learning.\n",
"\n",
"**Проект состоит из следующих компонентов:**\n",
"\n",
"1. **Среда TicTacToeEnv:**<br>\n",
" Реализует правила игры, управление ходами, проверку победных условий и завершения игры, а также визуализацию доски и генерацию доступных ходов.\n",
"\n",
"2. **Агент TicTacToeAgent:**<br>\n",
" Использует метод Q-learning для обучения, обновляя свою Q-таблицу на основе полученных наград. Агент выбирает ход с помощью epsilon-greedy стратегии, балансируя между исследованием и эксплуатацией.\n",
"\n",
"3. **Цикл обучения:**<br>\n",
" Выполняется симуляция игр (эпизодов), где агент играет против себя, обучаясь на основе своих действий. Ведется сбор статистики по победам, ничьим и общей награде для анализа эффективности обучения.\n",
"\n",
"4. **Параметры обучения:**<br>\n",
" Задаются параметры Q-learning (learning_rate, discount_factor, epsilon), которые регулируют процесс обучения агента.\n",
"\n",
"5. **Сбор данных:**<br>\n",
" Сохраняется статистика по каждому эпизоду, включая награды, победы и ничьи, для анализа прогресса обучения и улучшения стратегии агента.\n",
"\n",
"**Основные изменения в новой реализации:**\n",
"1. **Использование Q-learning для обучения агента:**<br>\n",
" В отличие от предыдущей реализации, где игроки действовали случайным образом, теперь используется агент, обучающийся методом Q-learning. Агент обновляет свою Q-таблицу на основе наград и выбирает действия с использованием стратегии epsilon-greedy.\n",
"\n",
"2. **Добавление класса TicTacToeAgent:**<br>\n",
" В проект добавлен новый класс TicTacToeAgent, который реализует логику выбора действий на основе обучения с подкреплением. Агент выбирает ход с учетом предыдущего опыта и обновляет свою стратегию по мере игры.\n",
"\n",
"3. **Цикл обучения с накоплением статистики:** \n",
" В новом цикле обучения агент обучается, играя против себя, с отслеживанием статистики по победам, ничьим и наградам за каждый эпизод. Это позволяет оценивать прогресс обучения и эффективность стратегии.\n",
"\n",
"4. **Параметры обучения:** \n",
" Введены параметры обучения для настройки метода Q-learning (скорость обучения, коэффициент дисконтирования и вероятность случайного выбора действия), что позволяет гибко управлять процессом обучения агента.\n",
"\n",
"5. **Рендеринг и вывод прогресса:** \n",
" Добавлена визуализация результатов симуляции всех эпизодов (победы игрока X, победы игрока O, ничьи) в виде графика.\n",
"\n",
@ -817,24 +800,19 @@
"Основной цикл обучения выполняет симуляцию игры в крестики-нолики между агентом, использующим метод Q-learning, и средой в течение заданного числа эпизодов (episodes). В процессе обучения агент учится выбирать действия, ориентируясь на полученные награды и обновления своей Q-таблицы. Целью является улучшение стратегии игры на основе предыдущего опыта.\n",
"\n",
"**Описание логики цикла:**\n",
"\n",
"1. **Инициализация:**<br>\n",
" Перед началом эпизодов задаются параметры обучения: скорость обучения (learning_rate), коэффициент дисконтирования (discount_factor), вероятность случайного выбора действия (epsilon), и общее количество эпизодов (episodes). Также создаются объекты среды (env) и агента (agent), которые будут взаимодействовать друг с другом. Для отслеживания результатов создаются метрики статистики (например, количество побед и ничьих).\n",
"\n",
"2. **Начало эпизода:**\n",
" - Каждый эпизод начинается с вызова метода env.reset(), который сбрасывает игровое поле и устанавливает начальное состояние.\n",
" - Для каждого эпизода инициализируются переменные для подсчета общей награды (total_reward), количества побед и ничьих. Флаг завершенности игры (done) устанавливается в False.\n",
"\n",
"3. **Цикл ходов в одном эпизоде:**\n",
" - Для каждого хода агент выбирает действие, используя стратегию epsilon-greedy, что означает баланс между случайным выбором действия (для исследования) и выбором действия, которое на данный момент кажется оптимальным (эксплуатация).\n",
" - После выбора действия вызывается метод env.step(), который обновляет состояние игры, возвращает новую награду и флаг завершения игры (terminated).\n",
" - Агент обновляет свою Q-таблицу с помощью метода agent.update(), используя полученные награду и новое состояние.\n",
" - Если игра завершена (флаг terminated установлен в True), цикл завершения игры прерывается, и сохраняются данные для статистики.\n",
"\n",
"4. **Сбор статистики:**\n",
" - В конце каждого эпизода сохраняются данные о общей награде, количестве побед и ничьих для игроков X и O в соответствующие списки статистики.\n",
" - Каждые 50 эпизодов выводится информация о текущем прогрессе, включая отображение доски через метод env.render(), а также выводится средняя награда за все эпизоды на текущий момент.\n",
"\n",
"5. **Повторение:**<br>\n",
" Цикл продолжается до завершения заданного количества эпизодов. По мере прохождения эпизодов агент постепенно улучшает свою стратегию игры, накапливая опыт и корректируя свои действия в соответствии с полученными результатами.\n",
"\n",
@ -1140,14 +1118,10 @@
"3. **Показатели ничьих:** Анализ линии ничьих помогает оценить, насколько часто игра заканчивается без победителя, что может быть результатом сбалансированных стратегий обоих игроков.\n",
"\n",
"**Итоги выполненной работы:**\n",
"1. **Разработка и обучение агентов:** Создан агент, использующий метод Q-learning для игры в крестики-нолики, который обучается на основе взаимодействия с игровой средой. Агенты оптимизируют свои стратегии для достижения победы или ничьей.\n",
" \n",
"1. **Разработка и обучение агентов:** Создан агент, использующий метод Q-learning для игры в крестики-нолики, который обучается на основе взаимодействия с игровой средой. Агенты оптимизируют свои стратегии для достижения победы или ничьей. \n",
"2. **Реализация среды для игры:** Разработана среда для игры в крестики-нолики с использованием библиотеки Gymnasium. Среда включает в себя управление состоянием игры, проверку победных условий и обработку действий игроков.\n",
"\n",
"3. **Анализ эффективности стратегий:** Для каждого эпизода отслеживается количество побед и ничьих, что помогает в анализе прогресса обучения и эффективности стратегий обоих игроков.\n",
"\n",
"4. **Визуализация прогресса обучения:** Построен кумулятивный график, который демонстрирует, как с каждым эпизодом увеличивается количество побед для игроков и ничьих. График позволяет увидеть, насколько эффективно развивается стратегия агентов и их производительность в процессе обучения.\n",
"\n",
"5. **Использование обучения с подкреплением:** В проекте применен алгоритм Q-learning, который позволил агентам развивать свои стратегии через опыт, обновляя свою Q-таблицу на основе получаемых наград."
]
},