From 00c62636967d1e9cbeb740ca2c0094f01868f47d Mon Sep 17 00:00:00 2001 From: russell Date: Sat, 21 Dec 2024 00:34:09 +0400 Subject: [PATCH] lab6 --- lab_6/lab6.ipynb | 3487 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 3487 insertions(+) create mode 100644 lab_6/lab6.ipynb diff --git a/lab_6/lab6.ipynb b/lab_6/lab6.ipynb new file mode 100644 index 0000000..aca6469 --- /dev/null +++ b/lab_6/lab6.ipynb @@ -0,0 +1,3487 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Лабораторная 6" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Задание:\n", + "- Развернуть и запустить проект по реализации обучения с подкреплением для игры \"Крестики-нолики\".\n", + "- Перевести проект на библиотеку gymnasium и современную версию Python. \n", + "- Реализовать агента для игры \"Крестики-нолики\" в виде отдельного класса (по примеру из лекции). \n", + "- Переписать основной цикл обучения для работы с отдельным классом агента (по примеру из лекции). Выполнить тестирование новой версии программы.\n", + "\n", + "Исходный проект: https://github.com/nczempin/gym-tic-tac-toe" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Перевод проекта на Gymnasium" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Gymnasium — библиотека Python для разработки, обучения и тестирования моделей обучения с подкреплением (Reinforcement Learning). Это обновлённая версия OpenAI Gym с улучшенной функциональностью и совместимостью." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Основные компоненты Gymnasium:\n", + "\n", + "1. Action Space (пространство действий):\n", + " - Определяет возможные действия, которые агент может предпринимать. Например:\n", + " - spaces.Discrete(9) — дискретные действия от 0 до 8 (например, выбор клетки на игровом поле).\n", + "\n", + "2. Observation Space (пространство наблюдений):\n", + " - Определяет, какие данные агент получает о текущем состоянии среды.\n", + " - Например, состояние игрового поля: spaces.Discrete(9 * 3 * 2).\n", + "\n", + "3. Методы среды:\n", + " - reset(): Сбрасывает среду и возвращает её начальное состояние.\n", + " - step(action): Выполняет действие агента и возвращает следующую информацию:\n", + " - Новое состояние среды.\n", + " - Награду за действие.\n", + " - Флаг завершения (True/False).\n", + " - Дополнительные данные.\n", + " - render(): Отображает состояние среды (например, визуализация игрового поля).\n", + " - close(): Закрывает среду." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "import gymnasium as gym\n", + "from gymnasium import spaces\n", + "import random\n", + "\n", + "class TicTacToeEnv(gym.Env):\n", + " metadata = {'render.modes': ['human']}\n", + " \n", + " symbols = ['O', ' ', 'X']\n", + "\n", + " def __init__(self):\n", + " super().__init__()\n", + " self.action_space = spaces.Discrete(9)\n", + " self.observation_space = spaces.Discrete(9 * 3 * 2) \n", + " self.reset()\n", + "\n", + " def step(self, action):\n", + " done = False\n", + " reward = 0\n", + "\n", + " p, square = action\n", + "\n", + " board = self.state['board']\n", + " proposed = board[square] \n", + " om = self.state['on_move'] \n", + " if proposed != 0:\n", + " print(f\"Незаконный ход: Квадрат {square} уже занят.\")\n", + " done = True\n", + " reward = -1 * om \n", + " if p != om: \n", + " print(f\"Незаконный ход: игрок {p} не находится в движении\")\n", + " done = True\n", + " reward = -1 * om\n", + " else:\n", + " board[square] = p\n", + " self.state['on_move'] = -p\n", + "\n", + " for i in range(3):\n", + " if (board[i * 3] == p and board[i * 3 + 1] == p and board[i * 3 + 2] == p) or \\\n", + " (board[i] == p and board[i + 3] == p and board[i + 6] == p):\n", + " reward = p\n", + " done = True\n", + " break\n", + "\n", + " if (board[0] == p and board[4] == p and board[8] == p) or \\\n", + " (board[2] == p and board[4] == p and board[6] == p):\n", + " reward = p\n", + " done = True\n", + " \n", + " return self.state, reward, done, {}\n", + "\n", + " def reset(self):\n", + " self.state = {}\n", + " self.state['board'] = [0, 0, 0, 0, 0, 0, 0, 0, 0] \n", + " self.state['on_move'] = 1 \n", + " return self.state, {}\n", + "\n", + " def render(self, close=False):\n", + " if close:\n", + " return\n", + " print(\"шаг: \" , self.symbols[self.state['on_move']+1])\n", + " for i in range (9):\n", + " print (self.symbols[self.state['board'][i]+1], end=\" \")\n", + " if ((i % 3) == 2):\n", + " print()\n", + "\n", + " def move_generator(self):\n", + " moves = []\n", + " for i in range(9):\n", + " if self.state['board'][i] == 0:\n", + " p = self.state['on_move']\n", + " m = [p, i]\n", + " moves.append(m)\n", + " return moves" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Агент\n", + "1. Взаимодействие со средой:\n", + " - Агент передаёт свои действия через метод step(action), где:\n", + " - action — кортеж (p, square), где:\n", + " - p: текущий игрок (1 для \"X\", -1 для \"O\").\n", + " - square: номер клетки (0–8).\n", + " - Среда проверяет, допустимо ли действие, обновляет состояние игры, вычисляет награду и определяет, завершилась ли игра.\n", + "\n", + "2. Решение задач агента:\n", + " - Агент должен:\n", + " - Выбирать клетку на игровом поле, соблюдая правила.\n", + " - Стремиться к победе, формируя вертикальные, горизонтальные или диагональные линии из своих символов.\n", + " - Избегать неправильных действий, которые приводят к штрафам (например, выбор занятой клетки).\n", + "\n", + "3. Система наград:\n", + " - Агент получает:\n", + " - Положительную награду за победу (соответствует значению игрока p).\n", + " - Отрицательную награду за ошибочные действия (например, попытка занять уже занятую клетку).\n", + " - Нулевую награду за допустимые, но не победные ходы." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "class Agent:\n", + " def __init__(self, symbol):\n", + " self.symbol = symbol\n", + " \n", + " def get_action(self, moves):\n", + " return random.choice(moves)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Цикл обучения" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "шаг: O\n", + " \n", + " \n", + "X \n", + "шаг: X\n", + " \n", + " \n", + "X O \n", + "шаг: O\n", + " X \n", + " \n", + "X O \n", + "шаг: X\n", + " X \n", + "O \n", + "X O \n", + "шаг: O\n", + " X X \n", + "O \n", + "X O \n", + "шаг: X\n", + " X X \n", + "O \n", + "X O O \n", + "шаг: O\n", + " X X \n", + "O X \n", + "X O O \n", + "Эпизод 1, Общая награда: 1\n", + "Средняя награда: 1.0\n", + "шаг: O\n", + " \n", + " \n", + " X \n", + "шаг: X\n", + "O \n", + " \n", + " X \n", + "шаг: O\n", + "O \n", + " X \n", + " X \n", + "шаг: X\n", + "O O \n", + " X \n", + " X \n", + "шаг: O\n", + "O O \n", + " X \n", + "X X \n", + "шаг: X\n", + "O O \n", + "O X \n", + "X X \n", + "шаг: O\n", + "O O \n", + "O X X \n", + "X X \n", + "шаг: X\n", + "O O O \n", + "O X X \n", + "X X \n", + "Эпизод 2, Общая награда: -1\n", + "Средняя награда: 0.0\n", + "шаг: O\n", + " \n", + "X \n", + " \n", + "шаг: X\n", + "O \n", + "X \n", + " \n", + "шаг: O\n", + "O \n", + "X X \n", + " \n", + "шаг: X\n", + "O \n", + "X X O \n", + " \n", + "шаг: O\n", + "O \n", + "X X O \n", + " X \n", + "шаг: X\n", + "O O \n", + "X X O \n", + " X \n", + "шаг: O\n", + "O O \n", + "X X O \n", + " X X \n", + "шаг: X\n", + "O O \n", + "X X O \n", + "O X X \n", + "шаг: O\n", + "O X O \n", + "X X O \n", + "O X X \n", + "Эпизод 3, Общая награда: 1\n", + "Средняя награда: 0.3333333333333333\n", + "шаг: O\n", + "X \n", + " \n", + " \n", + "шаг: X\n", + "X \n", + "O \n", + " \n", + "шаг: O\n", + "X X \n", + "O \n", + " \n", + "шаг: X\n", + "X X \n", + "O \n", + "O \n", + "шаг: O\n", + "X X \n", + "O \n", + "O X \n", + "шаг: X\n", + "X X \n", + "O O \n", + "O X \n", + "шаг: O\n", + "X X \n", + "O O \n", + "O X X \n", + "шаг: X\n", + "X O X \n", + "O O \n", + "O X X \n", + "шаг: O\n", + "X O X \n", + "O O X \n", + "O X X \n", + "Эпизод 4, Общая награда: 1\n", + "Средняя награда: 0.5\n", + "шаг: O\n", + " \n", + " \n", + "X \n", + "шаг: X\n", + " \n", + "O \n", + "X \n", + "шаг: O\n", + " X \n", + "O \n", + "X \n", + "шаг: X\n", + "O X \n", + "O \n", + "X \n", + "шаг: O\n", + "O X \n", + "O X \n", + "X \n", + "Эпизод 5, Общая награда: 1\n", + "Средняя награда: 0.6\n", + "шаг: O\n", + " X \n", + " \n", + " \n", + "шаг: X\n", + " X \n", + " \n", + " O \n", + "шаг: O\n", + " X \n", + " X \n", + " O \n", + "шаг: X\n", + " X \n", + " X \n", + " O O \n", + "шаг: O\n", + " X \n", + " X X \n", + " O O \n", + "шаг: X\n", + " X \n", + " X X \n", + "O O O \n", + "Эпизод 6, Общая награда: -1\n", + "Средняя награда: 0.3333333333333333\n", + "шаг: O\n", + " X \n", + " \n", + " \n", + "шаг: X\n", + " X \n", + " O \n", + " \n", + "шаг: O\n", + " X X \n", + " O \n", + " \n", + "шаг: X\n", + "O X X \n", + " O \n", + " \n", + "шаг: O\n", + "O X X \n", + " O \n", + " X \n", + "шаг: X\n", + "O X X \n", + " O \n", + "O X \n", + "шаг: O\n", + "O X X \n", + " O \n", + "O X X \n", + "шаг: X\n", + "O X X \n", + "O O \n", + "O X X \n", + "Эпизод 7, Общая награда: -1\n", + "Средняя награда: 0.14285714285714285\n", + "шаг: O\n", + " \n", + " \n", + " X \n", + "шаг: X\n", + " \n", + "O \n", + " X \n", + "шаг: O\n", + " \n", + "O X \n", + " X \n", + "шаг: X\n", + "O \n", + "O X \n", + " X \n", + "шаг: O\n", + "O X \n", + "O X \n", + " X \n", + "шаг: X\n", + "O X \n", + "O O X \n", + " X \n", + "шаг: O\n", + "O X X \n", + "O O X \n", + " X \n", + "шаг: X\n", + "O X X \n", + "O O X \n", + " X O \n", + "Эпизод 8, Общая награда: -1\n", + "Средняя награда: 0.0\n", + "шаг: O\n", + " \n", + " X \n", + " \n", + "шаг: X\n", + " O \n", + " X \n", + " \n", + "шаг: O\n", + " O \n", + " X \n", + "X \n", + "шаг: X\n", + " O \n", + "O X \n", + "X \n", + "шаг: O\n", + " O \n", + "O X X \n", + "X \n", + "шаг: X\n", + " O \n", + "O X X \n", + "X O \n", + "шаг: O\n", + " O \n", + "O X X \n", + "X O X \n", + "шаг: X\n", + " O O \n", + "O X X \n", + "X O X \n", + "шаг: O\n", + "X O O \n", + "O X X \n", + "X O X \n", + "Эпизод 9, Общая награда: 1\n", + "Средняя награда: 0.1111111111111111\n", + "шаг: O\n", + " \n", + " \n", + " X \n", + "шаг: X\n", + " \n", + " O \n", + " X \n", + "шаг: O\n", + "X \n", + " O \n", + " X \n", + "шаг: X\n", + "X \n", + "O O \n", + " X \n", + "шаг: O\n", + "X X \n", + "O O \n", + " X \n", + "шаг: X\n", + "X X \n", + "O O \n", + " X O \n", + "шаг: O\n", + "X X X \n", + "O O \n", + " X O \n", + "Эпизод 10, Общая награда: 1\n", + "Средняя награда: 0.2\n", + "шаг: O\n", + " \n", + " \n", + " X \n", + "шаг: X\n", + " O \n", + " \n", + " X \n", + "шаг: O\n", + " O \n", + " X \n", + " X \n", + "шаг: X\n", + " O \n", + " X \n", + "O X \n", + "шаг: O\n", + " O \n", + " X \n", + "O X X \n", + "шаг: X\n", + "O O \n", + " X \n", + "O X X \n", + "шаг: O\n", + "O O \n", + "X X \n", + "O X X \n", + "шаг: X\n", + "O O O \n", + "X X \n", + "O X X \n", + "Эпизод 11, Общая награда: -1\n", + "Средняя награда: 0.09090909090909091\n", + "шаг: O\n", + " \n", + "X \n", + " \n", + "шаг: X\n", + " \n", + "X O \n", + " \n", + "шаг: O\n", + " \n", + "X O \n", + "X \n", + "шаг: X\n", + " \n", + "X O O \n", + "X \n", + "шаг: O\n", + " X \n", + "X O O \n", + "X \n", + "шаг: X\n", + " X \n", + "X O O \n", + "X O \n", + "шаг: O\n", + " X X \n", + "X O O \n", + "X O \n", + "шаг: X\n", + " X X \n", + "X O O \n", + "X O O \n", + "шаг: O\n", + "X X X \n", + "X O O \n", + "X O O \n", + "Эпизод 12, Общая награда: 1\n", + "Средняя награда: 0.16666666666666666\n", + "шаг: O\n", + " \n", + " \n", + " X \n", + "шаг: X\n", + " O \n", + " \n", + " X \n", + "шаг: O\n", + " O \n", + " \n", + "X X \n", + "шаг: X\n", + " O \n", + " \n", + "X O X \n", + "шаг: O\n", + " O \n", + "X \n", + "X O X \n", + "шаг: X\n", + " O \n", + "X O \n", + "X O X \n", + "шаг: O\n", + " O \n", + "X X O \n", + "X O X \n", + "шаг: X\n", + "O O \n", + "X X O \n", + "X O X \n", + "шаг: O\n", + "O X O \n", + "X X O \n", + "X O X \n", + "Эпизод 13, Общая награда: 0\n", + "Средняя награда: 0.15384615384615385\n", + "шаг: O\n", + " \n", + " \n", + " X \n", + "шаг: X\n", + " O \n", + " \n", + " X \n", + "шаг: O\n", + " O \n", + "X \n", + " X \n", + "шаг: X\n", + "O O \n", + "X \n", + " X \n", + "шаг: O\n", + "O O \n", + "X X \n", + " X \n", + "шаг: X\n", + "O O O \n", + "X X \n", + " X \n", + "Эпизод 14, Общая награда: -1\n", + "Средняя награда: 0.07142857142857142\n", + "шаг: O\n", + "X \n", + " \n", + " \n", + "шаг: X\n", + "X \n", + " O \n", + " \n", + "шаг: O\n", + "X \n", + "X O \n", + " \n", + "шаг: X\n", + "X \n", + "X O \n", + " O \n", + "шаг: O\n", + "X \n", + "X O \n", + " O X \n", + "шаг: X\n", + "X O \n", + "X O \n", + " O X \n", + "шаг: O\n", + "X O X \n", + "X O \n", + " O X \n", + "шаг: X\n", + "X O X \n", + "X O \n", + "O O X \n", + "шаг: O\n", + "X O X \n", + "X X O \n", + "O O X \n", + "Эпизод 15, Общая награда: 1\n", + "Средняя награда: 0.13333333333333333\n", + "шаг: O\n", + " \n", + " \n", + " X \n", + "шаг: X\n", + " O \n", + " \n", + " X \n", + "шаг: O\n", + " O \n", + " \n", + "X X \n", + "шаг: X\n", + " O O \n", + " \n", + "X X \n", + "шаг: O\n", + " O O \n", + " X \n", + "X X \n", + "шаг: X\n", + "O O O \n", + " X \n", + "X X \n", + "Эпизод 16, Общая награда: -1\n", + "Средняя награда: 0.0625\n", + "шаг: O\n", + " \n", + " \n", + " X \n", + "шаг: X\n", + " \n", + " \n", + "O X \n", + "шаг: O\n", + " X \n", + " \n", + "O X \n", + "шаг: X\n", + " X \n", + "O \n", + "O X \n", + "шаг: O\n", + "X X \n", + "O \n", + "O X \n", + "шаг: X\n", + "X X \n", + "O O \n", + "O X \n", + "шаг: O\n", + "X X X \n", + "O O \n", + "O X \n", + "Эпизод 17, Общая награда: 1\n", + "Средняя награда: 0.11764705882352941\n", + "шаг: O\n", + " \n", + " \n", + "X \n", + "шаг: X\n", + " O \n", + " \n", + "X \n", + "шаг: O\n", + " O \n", + " \n", + "X X \n", + "шаг: X\n", + " O \n", + " O \n", + "X X \n", + "шаг: O\n", + " O \n", + "X O \n", + "X X \n", + "шаг: X\n", + " O O \n", + "X O \n", + "X X \n", + "шаг: O\n", + " O O \n", + "X O X \n", + "X X \n", + "шаг: X\n", + "O O O \n", + "X O X \n", + "X X \n", + "Эпизод 18, Общая награда: -1\n", + "Средняя награда: 0.05555555555555555\n", + "шаг: O\n", + " \n", + " \n", + " X \n", + "шаг: X\n", + " \n", + "O \n", + " X \n", + "шаг: O\n", + " \n", + "O X \n", + " X \n", + "шаг: X\n", + " \n", + "O X \n", + "O X \n", + "шаг: O\n", + " \n", + "O X X \n", + "O X \n", + "шаг: X\n", + " O \n", + "O X X \n", + "O X \n", + "шаг: O\n", + "X O \n", + "O X X \n", + "O X \n", + "шаг: X\n", + "X O O \n", + "O X X \n", + "O X \n", + "шаг: O\n", + "X O O \n", + "O X X \n", + "O X X \n", + "Эпизод 19, Общая награда: 1\n", + "Средняя награда: 0.10526315789473684\n", + "шаг: O\n", + "X \n", + " \n", + " \n", + "шаг: X\n", + "X \n", + " \n", + " O \n", + "шаг: O\n", + "X \n", + "X \n", + " O \n", + "шаг: X\n", + "X \n", + "X O \n", + " O \n", + "шаг: O\n", + "X \n", + "X X O \n", + " O \n", + "шаг: X\n", + "X \n", + "X X O \n", + "O O \n", + "шаг: O\n", + "X X \n", + "X X O \n", + "O O \n", + "шаг: X\n", + "X X \n", + "X X O \n", + "O O O \n", + "Эпизод 20, Общая награда: -1\n", + "Средняя награда: 0.05\n", + "шаг: O\n", + " \n", + " X \n", + " \n", + "шаг: X\n", + " \n", + " X \n", + "O \n", + "шаг: O\n", + " \n", + " X \n", + "O X \n", + "шаг: X\n", + " \n", + " X O \n", + "O X \n", + "шаг: O\n", + " X \n", + " X O \n", + "O X \n", + "шаг: X\n", + " O X \n", + " X O \n", + "O X \n", + "шаг: O\n", + "X O X \n", + " X O \n", + "O X \n", + "Эпизод 21, Общая награда: 1\n", + "Средняя награда: 0.09523809523809523\n", + "шаг: O\n", + "X \n", + " \n", + " \n", + "шаг: X\n", + "X \n", + " \n", + "O \n", + "шаг: O\n", + "X \n", + "X \n", + "O \n", + "шаг: X\n", + "X O \n", + "X \n", + "O \n", + "шаг: O\n", + "X O \n", + "X \n", + "O X \n", + "шаг: X\n", + "X O \n", + "X O \n", + "O X \n", + "шаг: O\n", + "X O X \n", + "X O \n", + "O X \n", + "шаг: X\n", + "X O X \n", + "X O \n", + "O X O \n", + "шаг: O\n", + "X O X \n", + "X X O \n", + "O X O \n", + "Эпизод 22, Общая награда: 0\n", + "Средняя награда: 0.09090909090909091\n", + "шаг: O\n", + " \n", + " X \n", + " \n", + "шаг: X\n", + " \n", + " X \n", + "O \n", + "шаг: O\n", + "X \n", + " X \n", + "O \n", + "шаг: X\n", + "X \n", + "O X \n", + "O \n", + "шаг: O\n", + "X X \n", + "O X \n", + "O \n", + "шаг: X\n", + "X X \n", + "O X \n", + "O O \n", + "шаг: O\n", + "X X \n", + "O X X \n", + "O O \n", + "шаг: X\n", + "X O X \n", + "O X X \n", + "O O \n", + "шаг: O\n", + "X O X \n", + "O X X \n", + "O X O \n", + "Эпизод 23, Общая награда: 0\n", + "Средняя награда: 0.08695652173913043\n", + "шаг: O\n", + " X \n", + " \n", + " \n", + "шаг: X\n", + " X \n", + " \n", + " O \n", + "шаг: O\n", + "X X \n", + " \n", + " O \n", + "шаг: X\n", + "X O X \n", + " \n", + " O \n", + "шаг: O\n", + "X O X \n", + "X \n", + " O \n", + "шаг: X\n", + "X O X \n", + "X O \n", + " O \n", + "шаг: O\n", + "X O X \n", + "X O \n", + "X O \n", + "Эпизод 24, Общая награда: 1\n", + "Средняя награда: 0.125\n", + "шаг: O\n", + " \n", + " \n", + " X \n", + "шаг: X\n", + " \n", + " O \n", + " X \n", + "шаг: O\n", + " \n", + "X O \n", + " X \n", + "шаг: X\n", + " \n", + "X O \n", + "O X \n", + "шаг: O\n", + "X \n", + "X O \n", + "O X \n", + "шаг: X\n", + "X O \n", + "X O \n", + "O X \n", + "Эпизод 25, Общая награда: -1\n", + "Средняя награда: 0.08\n", + "шаг: O\n", + " \n", + " \n", + " X \n", + "шаг: X\n", + " \n", + " \n", + "O X \n", + "шаг: O\n", + " \n", + "X \n", + "O X \n", + "шаг: X\n", + " O \n", + "X \n", + "O X \n", + "шаг: O\n", + " X O \n", + "X \n", + "O X \n", + "шаг: X\n", + " X O \n", + "X O \n", + "O X \n", + "шаг: O\n", + "X X O \n", + "X O \n", + "O X \n", + "шаг: X\n", + "X X O \n", + "X O O \n", + "O X \n", + "Эпизод 26, Общая награда: -1\n", + "Средняя награда: 0.038461538461538464\n", + "шаг: O\n", + " \n", + " X \n", + " \n", + "шаг: X\n", + " \n", + " X O \n", + " \n", + "шаг: O\n", + " \n", + " X O \n", + " X \n", + "шаг: X\n", + "O \n", + " X O \n", + " X \n", + "шаг: O\n", + "O X \n", + " X O \n", + " X \n", + "шаг: X\n", + "O X \n", + " X O \n", + " O X \n", + "шаг: O\n", + "O X \n", + " X O \n", + "X O X \n", + "шаг: X\n", + "O X O \n", + " X O \n", + "X O X \n", + "шаг: O\n", + "O X O \n", + "X X O \n", + "X O X \n", + "Эпизод 27, Общая награда: 0\n", + "Средняя награда: 0.037037037037037035\n", + "шаг: O\n", + " \n", + " X \n", + " \n", + "шаг: X\n", + " \n", + "O X \n", + " \n", + "шаг: O\n", + " X \n", + "O X \n", + " \n", + "шаг: X\n", + "O X \n", + "O X \n", + " \n", + "шаг: O\n", + "O X \n", + "O X \n", + " X \n", + "шаг: X\n", + "O X \n", + "O X O \n", + " X \n", + "шаг: O\n", + "O X X \n", + "O X O \n", + " X \n", + "Эпизод 28, Общая награда: 1\n", + "Средняя награда: 0.07142857142857142\n", + "шаг: O\n", + " \n", + " \n", + " X \n", + "шаг: X\n", + " \n", + "O \n", + " X \n", + "шаг: O\n", + " \n", + "O X \n", + " X \n", + "шаг: X\n", + " O \n", + "O X \n", + " X \n", + "шаг: O\n", + "X O \n", + "O X \n", + " X \n", + "шаг: X\n", + "X O \n", + "O X O \n", + " X \n", + "шаг: O\n", + "X O \n", + "O X O \n", + " X X \n", + "Эпизод 29, Общая награда: 1\n", + "Средняя награда: 0.10344827586206896\n", + "шаг: O\n", + " \n", + " \n", + " X \n", + "шаг: X\n", + " \n", + " O \n", + " X \n", + "шаг: O\n", + " X \n", + " O \n", + " X \n", + "шаг: X\n", + "O X \n", + " O \n", + " X \n", + "шаг: O\n", + "O X \n", + "X O \n", + " X \n", + "шаг: X\n", + "O O X \n", + "X O \n", + " X \n", + "шаг: O\n", + "O O X \n", + "X O \n", + "X X \n", + "шаг: X\n", + "O O X \n", + "X O O \n", + "X X \n", + "шаг: O\n", + "O O X \n", + "X O O \n", + "X X X \n", + "Эпизод 30, Общая награда: 1\n", + "Средняя награда: 0.13333333333333333\n", + "шаг: O\n", + " X \n", + " \n", + " \n", + "шаг: X\n", + " X \n", + " \n", + "O \n", + "шаг: O\n", + " X X \n", + " \n", + "O \n", + "шаг: X\n", + " X X \n", + " \n", + "O O \n", + "шаг: O\n", + "X X X \n", + " \n", + "O O \n", + "Эпизод 31, Общая награда: 1\n", + "Средняя награда: 0.16129032258064516\n", + "шаг: O\n", + " X \n", + " \n", + " \n", + "шаг: X\n", + " X \n", + "O \n", + " \n", + "шаг: O\n", + " X \n", + "O X \n", + " \n", + "шаг: X\n", + " X \n", + "O X \n", + "O \n", + "шаг: O\n", + " X \n", + "O X \n", + "O X \n", + "Эпизод 32, Общая награда: 1\n", + "Средняя награда: 0.1875\n", + "шаг: O\n", + " \n", + " \n", + "X \n", + "шаг: X\n", + " O \n", + " \n", + "X \n", + "шаг: O\n", + " X O \n", + " \n", + "X \n", + "шаг: X\n", + " X O \n", + " \n", + "X O \n", + "шаг: O\n", + " X O \n", + " X \n", + "X O \n", + "шаг: X\n", + " X O \n", + " X O \n", + "X O \n", + "шаг: O\n", + "X X O \n", + " X O \n", + "X O \n", + "шаг: X\n", + "X X O \n", + "O X O \n", + "X O \n", + "шаг: O\n", + "X X O \n", + "O X O \n", + "X O X \n", + "Эпизод 33, Общая награда: 1\n", + "Средняя награда: 0.21212121212121213\n", + "шаг: O\n", + " \n", + " X \n", + " \n", + "шаг: X\n", + " \n", + " X \n", + "O \n", + "шаг: O\n", + "X \n", + " X \n", + "O \n", + "шаг: X\n", + "X \n", + " X \n", + "O O \n", + "шаг: O\n", + "X X \n", + " X \n", + "O O \n", + "шаг: X\n", + "X X \n", + "O X \n", + "O O \n", + "шаг: O\n", + "X X \n", + "O X X \n", + "O O \n", + "шаг: X\n", + "X X \n", + "O X X \n", + "O O O \n", + "Эпизод 34, Общая награда: -1\n", + "Средняя награда: 0.17647058823529413\n", + "шаг: O\n", + "X \n", + " \n", + " \n", + "шаг: X\n", + "X \n", + " O \n", + " \n", + "шаг: O\n", + "X \n", + "X O \n", + " \n", + "шаг: X\n", + "X \n", + "X O \n", + " O \n", + "шаг: O\n", + "X X \n", + "X O \n", + " O \n", + "шаг: X\n", + "X X O \n", + "X O \n", + " O \n", + "шаг: O\n", + "X X O \n", + "X O \n", + " O X \n", + "шаг: X\n", + "X X O \n", + "X O O \n", + " O X \n", + "шаг: O\n", + "X X O \n", + "X O O \n", + "X O X \n", + "Эпизод 35, Общая награда: 1\n", + "Средняя награда: 0.2\n", + "шаг: O\n", + " \n", + " X \n", + " \n", + "шаг: X\n", + "O \n", + " X \n", + " \n", + "шаг: O\n", + "O \n", + " X \n", + " X \n", + "шаг: X\n", + "O \n", + " X \n", + "O X \n", + "шаг: O\n", + "O \n", + "X X \n", + "O X \n", + "шаг: X\n", + "O \n", + "X X \n", + "O X O \n", + "шаг: O\n", + "O X \n", + "X X \n", + "O X O \n", + "шаг: X\n", + "O X \n", + "X X O \n", + "O X O \n", + "шаг: O\n", + "O X X \n", + "X X O \n", + "O X O \n", + "Эпизод 36, Общая награда: 1\n", + "Средняя награда: 0.2222222222222222\n", + "шаг: O\n", + " \n", + " \n", + "X \n", + "шаг: X\n", + " \n", + " O \n", + "X \n", + "шаг: O\n", + " \n", + "X O \n", + "X \n", + "шаг: X\n", + " O \n", + "X O \n", + "X \n", + "шаг: O\n", + " O \n", + "X O \n", + "X X \n", + "шаг: X\n", + " O \n", + "X O \n", + "X X O \n", + "Эпизод 37, Общая награда: -1\n", + "Средняя награда: 0.1891891891891892\n", + "шаг: O\n", + " \n", + " \n", + " X \n", + "шаг: X\n", + " \n", + " O \n", + " X \n", + "шаг: O\n", + " \n", + "X O \n", + " X \n", + "шаг: X\n", + " \n", + "X O \n", + "O X \n", + "шаг: O\n", + " \n", + "X O X \n", + "O X \n", + "шаг: X\n", + "O \n", + "X O X \n", + "O X \n", + "шаг: O\n", + "O X \n", + "X O X \n", + "O X \n", + "шаг: X\n", + "O X O \n", + "X O X \n", + "O X \n", + "Эпизод 38, Общая награда: -1\n", + "Средняя награда: 0.15789473684210525\n", + "шаг: O\n", + " \n", + "X \n", + " \n", + "шаг: X\n", + " O \n", + "X \n", + " \n", + "шаг: O\n", + " O \n", + "X \n", + " X \n", + "шаг: X\n", + " O \n", + "X O \n", + " X \n", + "шаг: O\n", + " O \n", + "X O \n", + " X X \n", + "шаг: X\n", + "O O \n", + "X O \n", + " X X \n", + "шаг: O\n", + "O O \n", + "X O X \n", + " X X \n", + "шаг: X\n", + "O O O \n", + "X O X \n", + " X X \n", + "Эпизод 39, Общая награда: -1\n", + "Средняя награда: 0.1282051282051282\n", + "шаг: O\n", + "X \n", + " \n", + " \n", + "шаг: X\n", + "X \n", + " \n", + " O \n", + "шаг: O\n", + "X X \n", + " \n", + " O \n", + "шаг: X\n", + "X O X \n", + " \n", + " O \n", + "шаг: O\n", + "X O X \n", + " \n", + "X O \n", + "шаг: X\n", + "X O X \n", + " O \n", + "X O \n", + "шаг: O\n", + "X O X \n", + "X O \n", + "X O \n", + "Эпизод 40, Общая награда: 1\n", + "Средняя награда: 0.15\n", + "шаг: O\n", + " X \n", + " \n", + " \n", + "шаг: X\n", + " X \n", + " \n", + " O \n", + "шаг: O\n", + " X \n", + " X \n", + " O \n", + "шаг: X\n", + " X \n", + " O X \n", + " O \n", + "шаг: O\n", + " X \n", + " O X \n", + " O X \n", + "Эпизод 41, Общая награда: 1\n", + "Средняя награда: 0.17073170731707318\n", + "шаг: O\n", + " X \n", + " \n", + " \n", + "шаг: X\n", + " X \n", + " O \n", + " \n", + "шаг: O\n", + " X \n", + " O \n", + " X \n", + "шаг: X\n", + " X \n", + "O O \n", + " X \n", + "шаг: O\n", + " X X \n", + "O O \n", + " X \n", + "шаг: X\n", + " X X \n", + "O O \n", + " X O \n", + "шаг: O\n", + " X X \n", + "O X O \n", + " X O \n", + "Эпизод 42, Общая награда: 1\n", + "Средняя награда: 0.19047619047619047\n", + "шаг: O\n", + " X \n", + " \n", + " \n", + "шаг: X\n", + "O X \n", + " \n", + " \n", + "шаг: O\n", + "O X \n", + " \n", + " X \n", + "шаг: X\n", + "O X \n", + " \n", + " X O \n", + "шаг: O\n", + "O X \n", + "X \n", + " X O \n", + "шаг: X\n", + "O X \n", + "X O \n", + " X O \n", + "шаг: O\n", + "O X \n", + "X X O \n", + " X O \n", + "шаг: X\n", + "O O X \n", + "X X O \n", + " X O \n", + "шаг: O\n", + "O O X \n", + "X X O \n", + "X X O \n", + "Эпизод 43, Общая награда: 1\n", + "Средняя награда: 0.20930232558139536\n", + "шаг: O\n", + " X \n", + " \n", + " \n", + "шаг: X\n", + " O X \n", + " \n", + " \n", + "шаг: O\n", + " O X \n", + " X \n", + " \n", + "шаг: X\n", + "O O X \n", + " X \n", + " \n", + "шаг: O\n", + "O O X \n", + "X X \n", + " \n", + "шаг: X\n", + "O O X \n", + "X X \n", + " O \n", + "шаг: O\n", + "O O X \n", + "X X \n", + " X O \n", + "шаг: X\n", + "O O X \n", + "X X \n", + "O X O \n", + "шаг: O\n", + "O O X \n", + "X X X \n", + "O X O \n", + "Эпизод 44, Общая награда: 1\n", + "Средняя награда: 0.22727272727272727\n", + "шаг: O\n", + " \n", + " \n", + " X \n", + "шаг: X\n", + " O \n", + " \n", + " X \n", + "шаг: O\n", + " O \n", + " X \n", + " X \n", + "шаг: X\n", + " O \n", + " X \n", + " X O \n", + "шаг: O\n", + " O \n", + " X \n", + "X X O \n", + "шаг: X\n", + " O \n", + "O X \n", + "X X O \n", + "шаг: O\n", + "X O \n", + "O X \n", + "X X O \n", + "шаг: X\n", + "X O O \n", + "O X \n", + "X X O \n", + "шаг: O\n", + "X O O \n", + "O X X \n", + "X X O \n", + "Эпизод 45, Общая награда: 0\n", + "Средняя награда: 0.2222222222222222\n", + "шаг: O\n", + "X \n", + " \n", + " \n", + "шаг: X\n", + "X \n", + " \n", + " O \n", + "шаг: O\n", + "X X \n", + " \n", + " O \n", + "шаг: X\n", + "X X \n", + " O \n", + " O \n", + "шаг: O\n", + "X X \n", + " O \n", + "X O \n", + "шаг: X\n", + "X X \n", + " O \n", + "X O O \n", + "шаг: O\n", + "X X \n", + " O X \n", + "X O O \n", + "шаг: X\n", + "X X \n", + "O O X \n", + "X O O \n", + "шаг: O\n", + "X X X \n", + "O O X \n", + "X O O \n", + "Эпизод 46, Общая награда: 1\n", + "Средняя награда: 0.2391304347826087\n", + "шаг: O\n", + " \n", + "X \n", + " \n", + "шаг: X\n", + " \n", + "X O \n", + " \n", + "шаг: O\n", + " X \n", + "X O \n", + " \n", + "шаг: X\n", + " X \n", + "X O \n", + " O \n", + "шаг: O\n", + " X \n", + "X O \n", + "X O \n", + "шаг: X\n", + " X \n", + "X O O \n", + "X O \n", + "шаг: O\n", + " X \n", + "X O O \n", + "X O X \n", + "шаг: X\n", + " O X \n", + "X O O \n", + "X O X \n", + "Эпизод 47, Общая награда: -1\n", + "Средняя награда: 0.2127659574468085\n", + "шаг: O\n", + " \n", + " X \n", + " \n", + "шаг: X\n", + " \n", + " X \n", + " O \n", + "шаг: O\n", + " \n", + " X \n", + " O X \n", + "шаг: X\n", + " \n", + " O X \n", + " O X \n", + "шаг: O\n", + " X \n", + " O X \n", + " O X \n", + "шаг: X\n", + "O X \n", + " O X \n", + " O X \n", + "шаг: O\n", + "O X \n", + " O X \n", + "X O X \n", + "шаг: X\n", + "O X \n", + "O O X \n", + "X O X \n", + "шаг: O\n", + "O X X \n", + "O O X \n", + "X O X \n", + "Эпизод 48, Общая награда: 1\n", + "Средняя награда: 0.22916666666666666\n", + "шаг: O\n", + " \n", + "X \n", + " \n", + "шаг: X\n", + "O \n", + "X \n", + " \n", + "шаг: O\n", + "O \n", + "X \n", + "X \n", + "шаг: X\n", + "O O \n", + "X \n", + "X \n", + "шаг: O\n", + "O O \n", + "X X \n", + "X \n", + "шаг: X\n", + "O O \n", + "X X \n", + "X O \n", + "шаг: O\n", + "O O \n", + "X X X \n", + "X O \n", + "Эпизод 49, Общая награда: 1\n", + "Средняя награда: 0.24489795918367346\n", + "шаг: O\n", + " \n", + " \n", + " X \n", + "шаг: X\n", + "O \n", + " \n", + " X \n", + "шаг: O\n", + "O X \n", + " \n", + " X \n", + "шаг: X\n", + "O X \n", + "O \n", + " X \n", + "шаг: O\n", + "O X X \n", + "O \n", + " X \n", + "шаг: X\n", + "O X X \n", + "O O \n", + " X \n", + "шаг: O\n", + "O X X \n", + "O O \n", + "X X \n", + "шаг: X\n", + "O X X \n", + "O O \n", + "X O X \n", + "шаг: O\n", + "O X X \n", + "O X O \n", + "X O X \n", + "Эпизод 50, Общая награда: 1\n", + "Средняя награда: 0.26\n", + "шаг: O\n", + " \n", + " \n", + "X \n", + "шаг: X\n", + " O \n", + " \n", + "X \n", + "шаг: O\n", + " X O \n", + " \n", + "X \n", + "шаг: X\n", + " X O \n", + " \n", + "X O \n", + "шаг: O\n", + " X O \n", + " X \n", + "X O \n", + "шаг: X\n", + "O X O \n", + " X \n", + "X O \n", + "шаг: O\n", + "O X O \n", + " X \n", + "X X O \n", + "Эпизод 51, Общая награда: 1\n", + "Средняя награда: 0.27450980392156865\n", + "шаг: O\n", + " \n", + " \n", + "X \n", + "шаг: X\n", + " O \n", + " \n", + "X \n", + "шаг: O\n", + " O \n", + " \n", + "X X \n", + "шаг: X\n", + " O \n", + " O \n", + "X X \n", + "шаг: O\n", + " O X \n", + " O \n", + "X X \n", + "шаг: X\n", + " O X \n", + " O \n", + "X O X \n", + "Эпизод 52, Общая награда: -1\n", + "Средняя награда: 0.25\n", + "шаг: O\n", + " \n", + " \n", + "X \n", + "шаг: X\n", + "O \n", + " \n", + "X \n", + "шаг: O\n", + "O X \n", + " \n", + "X \n", + "шаг: X\n", + "O X \n", + " O \n", + "X \n", + "шаг: O\n", + "O X \n", + " O \n", + "X X \n", + "шаг: X\n", + "O X \n", + "O O \n", + "X X \n", + "шаг: O\n", + "O X \n", + "O O \n", + "X X X \n", + "Эпизод 53, Общая награда: 1\n", + "Средняя награда: 0.2641509433962264\n", + "шаг: O\n", + " \n", + "X \n", + " \n", + "шаг: X\n", + " \n", + "X \n", + " O \n", + "шаг: O\n", + " X \n", + "X \n", + " O \n", + "шаг: X\n", + " X \n", + "X \n", + " O O \n", + "шаг: O\n", + " X \n", + "X X \n", + " O O \n", + "шаг: X\n", + " O X \n", + "X X \n", + " O O \n", + "шаг: O\n", + " O X \n", + "X X \n", + "X O O \n", + "Эпизод 54, Общая награда: 1\n", + "Средняя награда: 0.2777777777777778\n", + "шаг: O\n", + " X \n", + " \n", + " \n", + "шаг: X\n", + " X \n", + " \n", + " O \n", + "шаг: O\n", + "X X \n", + " \n", + " O \n", + "шаг: X\n", + "X X \n", + " O \n", + " O \n", + "шаг: O\n", + "X X \n", + " O X \n", + " O \n", + "шаг: X\n", + "X X \n", + " O X \n", + "O O \n", + "шаг: O\n", + "X X X \n", + " O X \n", + "O O \n", + "Эпизод 55, Общая награда: 1\n", + "Средняя награда: 0.2909090909090909\n", + "шаг: O\n", + " X \n", + " \n", + " \n", + "шаг: X\n", + " X O \n", + " \n", + " \n", + "шаг: O\n", + " X O \n", + " \n", + " X \n", + "шаг: X\n", + " X O \n", + " O \n", + " X \n", + "шаг: O\n", + " X O \n", + " O \n", + "X X \n", + "шаг: X\n", + " X O \n", + " O \n", + "X O X \n", + "шаг: O\n", + " X O \n", + " O X \n", + "X O X \n", + "шаг: X\n", + "O X O \n", + " O X \n", + "X O X \n", + "шаг: O\n", + "O X O \n", + "X O X \n", + "X O X \n", + "Эпизод 56, Общая награда: 0\n", + "Средняя награда: 0.2857142857142857\n", + "шаг: O\n", + "X \n", + " \n", + " \n", + "шаг: X\n", + "X \n", + "O \n", + " \n", + "шаг: O\n", + "X \n", + "O \n", + " X \n", + "шаг: X\n", + "X O \n", + "O \n", + " X \n", + "шаг: O\n", + "X O \n", + "O X \n", + " X \n", + "шаг: X\n", + "X O \n", + "O O X \n", + " X \n", + "шаг: O\n", + "X O \n", + "O O X \n", + "X X \n", + "шаг: X\n", + "X O \n", + "O O X \n", + "X X O \n", + "шаг: O\n", + "X X O \n", + "O O X \n", + "X X O \n", + "Эпизод 57, Общая награда: 0\n", + "Средняя награда: 0.2807017543859649\n", + "шаг: O\n", + " \n", + " \n", + " X \n", + "шаг: X\n", + " O \n", + " \n", + " X \n", + "шаг: O\n", + "X O \n", + " \n", + " X \n", + "шаг: X\n", + "X O O \n", + " \n", + " X \n", + "шаг: O\n", + "X O O \n", + "X \n", + " X \n", + "шаг: X\n", + "X O O \n", + "X O \n", + " X \n", + "шаг: O\n", + "X O O \n", + "X O \n", + "X X \n", + "Эпизод 58, Общая награда: 1\n", + "Средняя награда: 0.29310344827586204\n", + "шаг: O\n", + " \n", + " X \n", + " \n", + "шаг: X\n", + "O \n", + " X \n", + " \n", + "шаг: O\n", + "O \n", + " X \n", + " X \n", + "шаг: X\n", + "O O \n", + " X \n", + " X \n", + "шаг: O\n", + "O O \n", + "X X \n", + " X \n", + "шаг: X\n", + "O O \n", + "X X \n", + "O X \n", + "шаг: O\n", + "O O \n", + "X X X \n", + "O X \n", + "Эпизод 59, Общая награда: 1\n", + "Средняя награда: 0.3050847457627119\n", + "шаг: O\n", + " \n", + "X \n", + " \n", + "шаг: X\n", + "O \n", + "X \n", + " \n", + "шаг: O\n", + "O X \n", + "X \n", + " \n", + "шаг: X\n", + "O X \n", + "X \n", + " O \n", + "шаг: O\n", + "O X \n", + "X \n", + "X O \n", + "шаг: X\n", + "O X \n", + "X O \n", + "X O \n", + "шаг: O\n", + "O X \n", + "X X O \n", + "X O \n", + "Эпизод 60, Общая награда: 1\n", + "Средняя награда: 0.31666666666666665\n", + "шаг: O\n", + " \n", + " X \n", + " \n", + "шаг: X\n", + " \n", + "O X \n", + " \n", + "шаг: O\n", + " X \n", + "O X \n", + " \n", + "шаг: X\n", + " X \n", + "O O X \n", + " \n", + "шаг: O\n", + " X \n", + "O O X \n", + "X \n", + "шаг: X\n", + "O X \n", + "O O X \n", + "X \n", + "шаг: O\n", + "O X \n", + "O O X \n", + "X X \n", + "Эпизод 61, Общая награда: 1\n", + "Средняя награда: 0.32786885245901637\n", + "шаг: O\n", + " X \n", + " \n", + " \n", + "шаг: X\n", + " X \n", + " \n", + " O \n", + "шаг: O\n", + " X \n", + "X \n", + " O \n", + "шаг: X\n", + " X \n", + "X \n", + " O O \n", + "шаг: O\n", + "X X \n", + "X \n", + " O O \n", + "шаг: X\n", + "X X \n", + "X O \n", + " O O \n", + "шаг: O\n", + "X X X \n", + "X O \n", + " O O \n", + "Эпизод 62, Общая награда: 1\n", + "Средняя награда: 0.3387096774193548\n", + "шаг: O\n", + " \n", + " \n", + " X \n", + "шаг: X\n", + " \n", + " O \n", + " X \n", + "шаг: O\n", + " X \n", + " O \n", + " X \n", + "шаг: X\n", + " X O \n", + " O \n", + " X \n", + "шаг: O\n", + "X X O \n", + " O \n", + " X \n", + "шаг: X\n", + "X X O \n", + " O O \n", + " X \n", + "шаг: O\n", + "X X O \n", + "X O O \n", + " X \n", + "шаг: X\n", + "X X O \n", + "X O O \n", + "O X \n", + "Эпизод 63, Общая награда: -1\n", + "Средняя награда: 0.31746031746031744\n", + "шаг: O\n", + " \n", + " X \n", + " \n", + "шаг: X\n", + " O \n", + " X \n", + " \n", + "шаг: O\n", + " O \n", + " X \n", + "X \n", + "шаг: X\n", + " O \n", + " X \n", + "X O \n", + "шаг: O\n", + " O \n", + " X X \n", + "X O \n", + "шаг: X\n", + " O O \n", + " X X \n", + "X O \n", + "шаг: O\n", + " O O \n", + " X X \n", + "X X O \n", + "шаг: X\n", + "O O O \n", + " X X \n", + "X X O \n", + "Эпизод 64, Общая награда: -1\n", + "Средняя награда: 0.296875\n", + "шаг: O\n", + " \n", + " X \n", + " \n", + "шаг: X\n", + " \n", + " X \n", + " O \n", + "шаг: O\n", + " X \n", + " X \n", + " O \n", + "шаг: X\n", + " X O \n", + " X \n", + " O \n", + "шаг: O\n", + " X O \n", + "X X \n", + " O \n", + "шаг: X\n", + " X O \n", + "X X \n", + " O O \n", + "шаг: O\n", + "X X O \n", + "X X \n", + " O O \n", + "шаг: X\n", + "X X O \n", + "X X \n", + "O O O \n", + "Эпизод 65, Общая награда: -1\n", + "Средняя награда: 0.27692307692307694\n", + "шаг: O\n", + " \n", + " X \n", + " \n", + "шаг: X\n", + " \n", + " X \n", + " O \n", + "шаг: O\n", + " X \n", + " X \n", + " O \n", + "шаг: X\n", + " X \n", + "O X \n", + " O \n", + "шаг: O\n", + " X \n", + "O X X \n", + " O \n", + "шаг: X\n", + "O X \n", + "O X X \n", + " O \n", + "шаг: O\n", + "O X \n", + "O X X \n", + "X O \n", + "Эпизод 66, Общая награда: 1\n", + "Средняя награда: 0.2878787878787879\n", + "шаг: O\n", + " \n", + " \n", + " X \n", + "шаг: X\n", + " \n", + " \n", + " O X \n", + "шаг: O\n", + "X \n", + " \n", + " O X \n", + "шаг: X\n", + "X \n", + " O \n", + " O X \n", + "шаг: O\n", + "X \n", + " X O \n", + " O X \n", + "Эпизод 67, Общая награда: 1\n", + "Средняя награда: 0.29850746268656714\n", + "шаг: O\n", + "X \n", + " \n", + " \n", + "шаг: X\n", + "X \n", + " O \n", + " \n", + "шаг: O\n", + "X \n", + " O \n", + " X \n", + "шаг: X\n", + "X O \n", + " O \n", + " X \n", + "шаг: O\n", + "X O \n", + " O \n", + " X X \n", + "шаг: X\n", + "X O \n", + "O O \n", + " X X \n", + "шаг: O\n", + "X O \n", + "O O X \n", + " X X \n", + "шаг: X\n", + "X O O \n", + "O O X \n", + " X X \n", + "шаг: O\n", + "X O O \n", + "O O X \n", + "X X X \n", + "Эпизод 68, Общая награда: 1\n", + "Средняя награда: 0.3088235294117647\n", + "шаг: O\n", + " \n", + " \n", + "X \n", + "шаг: X\n", + " \n", + " O \n", + "X \n", + "шаг: O\n", + " \n", + " O X \n", + "X \n", + "шаг: X\n", + "O \n", + " O X \n", + "X \n", + "шаг: O\n", + "O \n", + " O X \n", + "X X \n", + "шаг: X\n", + "O O \n", + " O X \n", + "X X \n", + "шаг: O\n", + "O O \n", + " O X \n", + "X X X \n", + "Эпизод 69, Общая награда: 1\n", + "Средняя награда: 0.3188405797101449\n", + "шаг: O\n", + " \n", + "X \n", + " \n", + "шаг: X\n", + " \n", + "X O \n", + " \n", + "шаг: O\n", + " X \n", + "X O \n", + " \n", + "шаг: X\n", + " X \n", + "X O \n", + "O \n", + "шаг: O\n", + "X X \n", + "X O \n", + "O \n", + "шаг: X\n", + "X O X \n", + "X O \n", + "O \n", + "шаг: O\n", + "X O X \n", + "X X O \n", + "O \n", + "шаг: X\n", + "X O X \n", + "X X O \n", + "O O \n", + "шаг: O\n", + "X O X \n", + "X X O \n", + "O O X \n", + "Эпизод 70, Общая награда: 1\n", + "Средняя награда: 0.32857142857142857\n", + "шаг: O\n", + " \n", + " \n", + " X \n", + "шаг: X\n", + " \n", + " O \n", + " X \n", + "шаг: O\n", + " \n", + " O \n", + " X X \n", + "шаг: X\n", + " \n", + "O O \n", + " X X \n", + "шаг: O\n", + " X \n", + "O O \n", + " X X \n", + "шаг: X\n", + " X O \n", + "O O \n", + " X X \n", + "шаг: O\n", + " X O \n", + "O O X \n", + " X X \n", + "шаг: X\n", + " X O \n", + "O O X \n", + "O X X \n", + "Эпизод 71, Общая награда: -1\n", + "Средняя награда: 0.30985915492957744\n", + "шаг: O\n", + " X \n", + " \n", + " \n", + "шаг: X\n", + "O X \n", + " \n", + " \n", + "шаг: O\n", + "O X \n", + " X \n", + " \n", + "шаг: X\n", + "O X \n", + " X \n", + "O \n", + "шаг: O\n", + "O X \n", + " X X \n", + "O \n", + "шаг: X\n", + "O X \n", + "O X X \n", + "O \n", + "Эпизод 72, Общая награда: -1\n", + "Средняя награда: 0.2916666666666667\n", + "шаг: O\n", + "X \n", + " \n", + " \n", + "шаг: X\n", + "X O \n", + " \n", + " \n", + "шаг: O\n", + "X O \n", + " \n", + "X \n", + "шаг: X\n", + "X O \n", + "O \n", + "X \n", + "шаг: O\n", + "X O \n", + "O X \n", + "X \n", + "шаг: X\n", + "X O O \n", + "O X \n", + "X \n", + "шаг: O\n", + "X O O \n", + "O X \n", + "X X \n", + "шаг: X\n", + "X O O \n", + "O X \n", + "X X O \n", + "шаг: O\n", + "X O O \n", + "O X X \n", + "X X O \n", + "Эпизод 73, Общая награда: 0\n", + "Средняя награда: 0.2876712328767123\n", + "шаг: O\n", + " \n", + " X \n", + " \n", + "шаг: X\n", + " O \n", + " X \n", + " \n", + "шаг: O\n", + " O \n", + "X X \n", + " \n", + "шаг: X\n", + " O \n", + "X X \n", + " O \n", + "шаг: O\n", + " O \n", + "X X X \n", + " O \n", + "Эпизод 74, Общая награда: 1\n", + "Средняя награда: 0.2972972972972973\n", + "шаг: O\n", + " \n", + " \n", + "X \n", + "шаг: X\n", + " O \n", + " \n", + "X \n", + "шаг: O\n", + "X O \n", + " \n", + "X \n", + "шаг: X\n", + "X O \n", + "O \n", + "X \n", + "шаг: O\n", + "X O \n", + "O \n", + "X X \n", + "шаг: X\n", + "X O \n", + "O O \n", + "X X \n", + "шаг: O\n", + "X O \n", + "O O \n", + "X X X \n", + "Эпизод 75, Общая награда: 1\n", + "Средняя награда: 0.30666666666666664\n", + "шаг: O\n", + " \n", + "X \n", + " \n", + "шаг: X\n", + " \n", + "X \n", + "O \n", + "шаг: O\n", + " X \n", + "X \n", + "O \n", + "шаг: X\n", + " X \n", + "X O \n", + "O \n", + "шаг: O\n", + " X X \n", + "X O \n", + "O \n", + "шаг: X\n", + " X X \n", + "X O \n", + "O O \n", + "шаг: O\n", + " X X \n", + "X O \n", + "O O X \n", + "шаг: X\n", + " X X \n", + "X O O \n", + "O O X \n", + "шаг: O\n", + "X X X \n", + "X O O \n", + "O O X \n", + "Эпизод 76, Общая награда: 1\n", + "Средняя награда: 0.3157894736842105\n", + "шаг: O\n", + " \n", + " \n", + " X \n", + "шаг: X\n", + " \n", + " \n", + "O X \n", + "шаг: O\n", + "X \n", + " \n", + "O X \n", + "шаг: X\n", + "X O \n", + " \n", + "O X \n", + "шаг: O\n", + "X O \n", + " \n", + "O X X \n", + "шаг: X\n", + "X O \n", + " O \n", + "O X X \n", + "шаг: O\n", + "X O X \n", + " O \n", + "O X X \n", + "шаг: X\n", + "X O X \n", + "O O \n", + "O X X \n", + "шаг: O\n", + "X O X \n", + "O O X \n", + "O X X \n", + "Эпизод 77, Общая награда: 1\n", + "Средняя награда: 0.3246753246753247\n", + "шаг: O\n", + "X \n", + " \n", + " \n", + "шаг: X\n", + "X \n", + " \n", + " O \n", + "шаг: O\n", + "X X \n", + " \n", + " O \n", + "шаг: X\n", + "X X \n", + "O \n", + " O \n", + "шаг: O\n", + "X X \n", + "O X \n", + " O \n", + "шаг: X\n", + "X X \n", + "O X \n", + "O O \n", + "шаг: O\n", + "X X \n", + "O X \n", + "O X O \n", + "Эпизод 78, Общая награда: 1\n", + "Средняя награда: 0.3333333333333333\n", + "шаг: O\n", + " \n", + "X \n", + " \n", + "шаг: X\n", + " \n", + "X \n", + "O \n", + "шаг: O\n", + " X \n", + "X \n", + "O \n", + "шаг: X\n", + " O X \n", + "X \n", + "O \n", + "шаг: O\n", + " O X \n", + "X \n", + "O X \n", + "шаг: X\n", + "O O X \n", + "X \n", + "O X \n", + "шаг: O\n", + "O O X \n", + "X X \n", + "O X \n", + "шаг: X\n", + "O O X \n", + "X X O \n", + "O X \n", + "шаг: O\n", + "O O X \n", + "X X O \n", + "O X X \n", + "Эпизод 79, Общая награда: 0\n", + "Средняя награда: 0.3291139240506329\n", + "шаг: O\n", + " \n", + " X \n", + " \n", + "шаг: X\n", + " \n", + " X \n", + " O \n", + "шаг: O\n", + "X \n", + " X \n", + " O \n", + "шаг: X\n", + "X O \n", + " X \n", + " O \n", + "шаг: O\n", + "X O \n", + "X X \n", + " O \n", + "шаг: X\n", + "X O O \n", + "X X \n", + " O \n", + "шаг: O\n", + "X O O \n", + "X X \n", + " X O \n", + "шаг: X\n", + "X O O \n", + "X X \n", + "O X O \n", + "шаг: O\n", + "X O O \n", + "X X X \n", + "O X O \n", + "Эпизод 80, Общая награда: 1\n", + "Средняя награда: 0.3375\n", + "шаг: O\n", + "X \n", + " \n", + " \n", + "шаг: X\n", + "X \n", + " \n", + " O \n", + "шаг: O\n", + "X \n", + " \n", + "X O \n", + "шаг: X\n", + "X O \n", + " \n", + "X O \n", + "шаг: O\n", + "X O \n", + " X \n", + "X O \n", + "шаг: X\n", + "X O \n", + " X \n", + "X O O \n", + "шаг: O\n", + "X O \n", + "X X \n", + "X O O \n", + "Эпизод 81, Общая награда: 1\n", + "Средняя награда: 0.345679012345679\n", + "шаг: O\n", + " \n", + " \n", + " X \n", + "шаг: X\n", + " \n", + " \n", + "O X \n", + "шаг: O\n", + "X \n", + " \n", + "O X \n", + "шаг: X\n", + "X \n", + " O \n", + "O X \n", + "шаг: O\n", + "X X \n", + " O \n", + "O X \n", + "шаг: X\n", + "X O X \n", + " O \n", + "O X \n", + "шаг: O\n", + "X O X \n", + "X O \n", + "O X \n", + "шаг: X\n", + "X O X \n", + "X O \n", + "O O X \n", + "шаг: O\n", + "X O X \n", + "X X O \n", + "O O X \n", + "Эпизод 82, Общая награда: 1\n", + "Средняя награда: 0.35365853658536583\n", + "шаг: O\n", + " \n", + "X \n", + " \n", + "шаг: X\n", + " \n", + "X O \n", + " \n", + "шаг: O\n", + " \n", + "X O X \n", + " \n", + "шаг: X\n", + "O \n", + "X O X \n", + " \n", + "шаг: O\n", + "O \n", + "X O X \n", + " X \n", + "шаг: X\n", + "O O \n", + "X O X \n", + " X \n", + "шаг: O\n", + "O O X \n", + "X O X \n", + " X \n", + "Эпизод 83, Общая награда: 1\n", + "Средняя награда: 0.3614457831325301\n", + "шаг: O\n", + " \n", + " \n", + "X \n", + "шаг: X\n", + " \n", + " \n", + "X O \n", + "шаг: O\n", + " \n", + "X \n", + "X O \n", + "шаг: X\n", + " \n", + "X O \n", + "X O \n", + "шаг: O\n", + " X \n", + "X O \n", + "X O \n", + "шаг: X\n", + " X \n", + "X O \n", + "X O O \n", + "шаг: O\n", + "X X \n", + "X O \n", + "X O O \n", + "Эпизод 84, Общая награда: 1\n", + "Средняя награда: 0.36904761904761907\n", + "шаг: O\n", + " \n", + " \n", + " X \n", + "шаг: X\n", + " O \n", + " \n", + " X \n", + "шаг: O\n", + " O X \n", + " \n", + " X \n", + "шаг: X\n", + " O X \n", + " \n", + "O X \n", + "шаг: O\n", + " O X \n", + "X \n", + "O X \n", + "шаг: X\n", + "O O X \n", + "X \n", + "O X \n", + "шаг: O\n", + "O O X \n", + "X \n", + "O X X \n", + "шаг: X\n", + "O O X \n", + "X O \n", + "O X X \n", + "шаг: O\n", + "O O X \n", + "X O X \n", + "O X X \n", + "Эпизод 85, Общая награда: 1\n", + "Средняя награда: 0.3764705882352941\n", + "шаг: O\n", + " \n", + " \n", + " X \n", + "шаг: X\n", + " O \n", + " \n", + " X \n", + "шаг: O\n", + " O \n", + "X \n", + " X \n", + "шаг: X\n", + "O O \n", + "X \n", + " X \n", + "шаг: O\n", + "O O \n", + "X \n", + "X X \n", + "шаг: X\n", + "O O O \n", + "X \n", + "X X \n", + "Эпизод 86, Общая награда: -1\n", + "Средняя награда: 0.36046511627906974\n", + "шаг: O\n", + " \n", + "X \n", + " \n", + "шаг: X\n", + "O \n", + "X \n", + " \n", + "шаг: O\n", + "O \n", + "X \n", + "X \n", + "шаг: X\n", + "O \n", + "X O \n", + "X \n", + "шаг: O\n", + "O \n", + "X O \n", + "X X \n", + "шаг: X\n", + "O \n", + "X O O \n", + "X X \n", + "шаг: O\n", + "O X \n", + "X O O \n", + "X X \n", + "шаг: X\n", + "O X \n", + "X O O \n", + "X X O \n", + "Эпизод 87, Общая награда: -1\n", + "Средняя награда: 0.3448275862068966\n", + "шаг: O\n", + " \n", + " X \n", + " \n", + "шаг: X\n", + " \n", + " X \n", + "O \n", + "шаг: O\n", + " \n", + " X \n", + "O X \n", + "шаг: X\n", + " O \n", + " X \n", + "O X \n", + "шаг: O\n", + " O \n", + " X X \n", + "O X \n", + "шаг: X\n", + " O \n", + "O X X \n", + "O X \n", + "шаг: O\n", + "X O \n", + "O X X \n", + "O X \n", + "Эпизод 88, Общая награда: 1\n", + "Средняя награда: 0.3522727272727273\n", + "шаг: O\n", + " \n", + " \n", + " X \n", + "шаг: X\n", + " \n", + " O \n", + " X \n", + "шаг: O\n", + " \n", + "X O \n", + " X \n", + "шаг: X\n", + "O \n", + "X O \n", + " X \n", + "шаг: O\n", + "O X \n", + "X O \n", + " X \n", + "шаг: X\n", + "O X \n", + "X O \n", + " X O \n", + "шаг: O\n", + "O X \n", + "X X O \n", + " X O \n", + "Эпизод 89, Общая награда: 1\n", + "Средняя награда: 0.3595505617977528\n", + "шаг: O\n", + " \n", + " X \n", + " \n", + "шаг: X\n", + " \n", + " X \n", + "O \n", + "шаг: O\n", + " \n", + " X \n", + "O X \n", + "шаг: X\n", + " \n", + " X O \n", + "O X \n", + "шаг: O\n", + "X \n", + " X O \n", + "O X \n", + "Эпизод 90, Общая награда: 1\n", + "Средняя награда: 0.36666666666666664\n", + "шаг: O\n", + " \n", + " X \n", + " \n", + "шаг: X\n", + " O \n", + " X \n", + " \n", + "шаг: O\n", + " O \n", + " X \n", + " X \n", + "шаг: X\n", + "O O \n", + " X \n", + " X \n", + "шаг: O\n", + "O O \n", + "X X \n", + " X \n", + "шаг: X\n", + "O O O \n", + "X X \n", + " X \n", + "Эпизод 91, Общая награда: -1\n", + "Средняя награда: 0.3516483516483517\n", + "шаг: O\n", + " \n", + " X \n", + " \n", + "шаг: X\n", + " O \n", + " X \n", + " \n", + "шаг: O\n", + " O \n", + " X \n", + " X \n", + "шаг: X\n", + " O O \n", + " X \n", + " X \n", + "шаг: O\n", + " O O \n", + " X \n", + " X X \n", + "шаг: X\n", + " O O \n", + " X \n", + "O X X \n", + "шаг: O\n", + " O O \n", + "X X \n", + "O X X \n", + "шаг: X\n", + "O O O \n", + "X X \n", + "O X X \n", + "Эпизод 92, Общая награда: -1\n", + "Средняя награда: 0.33695652173913043\n", + "шаг: O\n", + " \n", + " X \n", + " \n", + "шаг: X\n", + " \n", + "O X \n", + " \n", + "шаг: O\n", + " X \n", + "O X \n", + " \n", + "шаг: X\n", + " X \n", + "O X O \n", + " \n", + "шаг: O\n", + " X \n", + "O X O \n", + "X \n", + "Эпизод 93, Общая награда: 1\n", + "Средняя награда: 0.34408602150537637\n", + "шаг: O\n", + "X \n", + " \n", + " \n", + "шаг: X\n", + "X \n", + " \n", + " O \n", + "шаг: O\n", + "X \n", + " X \n", + " O \n", + "шаг: X\n", + "X \n", + " X \n", + "O O \n", + "шаг: O\n", + "X \n", + " X \n", + "O O X \n", + "Эпизод 94, Общая награда: 1\n", + "Средняя награда: 0.35106382978723405\n", + "шаг: O\n", + " \n", + "X \n", + " \n", + "шаг: X\n", + " \n", + "X \n", + "O \n", + "шаг: O\n", + " \n", + "X X \n", + "O \n", + "шаг: X\n", + " O \n", + "X X \n", + "O \n", + "шаг: O\n", + " O X \n", + "X X \n", + "O \n", + "шаг: X\n", + " O X \n", + "X O X \n", + "O \n", + "шаг: O\n", + " O X \n", + "X O X \n", + "O X \n", + "Эпизод 95, Общая награда: 1\n", + "Средняя награда: 0.35789473684210527\n", + "шаг: O\n", + " \n", + " \n", + " X \n", + "шаг: X\n", + " \n", + " O \n", + " X \n", + "шаг: O\n", + "X \n", + " O \n", + " X \n", + "шаг: X\n", + "X \n", + " O \n", + " O X \n", + "шаг: O\n", + "X \n", + " O X \n", + " O X \n", + "шаг: X\n", + "X \n", + " O X \n", + "O O X \n", + "шаг: O\n", + "X X \n", + " O X \n", + "O O X \n", + "шаг: X\n", + "X X O \n", + " O X \n", + "O O X \n", + "Эпизод 96, Общая награда: -1\n", + "Средняя награда: 0.34375\n", + "шаг: O\n", + " X \n", + " \n", + " \n", + "шаг: X\n", + " X \n", + " O \n", + " \n", + "шаг: O\n", + "X X \n", + " O \n", + " \n", + "шаг: X\n", + "X X \n", + " O \n", + "O \n", + "шаг: O\n", + "X X \n", + " O \n", + "O X \n", + "шаг: X\n", + "X X \n", + " O O \n", + "O X \n", + "шаг: O\n", + "X X \n", + " O O \n", + "O X X \n", + "шаг: X\n", + "X X \n", + "O O O \n", + "O X X \n", + "Эпизод 97, Общая награда: -1\n", + "Средняя награда: 0.32989690721649484\n", + "шаг: O\n", + " X \n", + " \n", + " \n", + "шаг: X\n", + " X \n", + " O \n", + " \n", + "шаг: O\n", + " X \n", + " O \n", + " X \n", + "шаг: X\n", + "O X \n", + " O \n", + " X \n", + "шаг: O\n", + "O X \n", + " X O \n", + " X \n", + "шаг: X\n", + "O X \n", + " X O \n", + " O X \n", + "шаг: O\n", + "O X \n", + " X O \n", + "X O X \n", + "Эпизод 98, Общая награда: 1\n", + "Средняя награда: 0.336734693877551\n", + "шаг: O\n", + " \n", + " \n", + "X \n", + "шаг: X\n", + " \n", + "O \n", + "X \n", + "шаг: O\n", + " \n", + "O \n", + "X X \n", + "шаг: X\n", + " O \n", + "O \n", + "X X \n", + "шаг: O\n", + " O \n", + "O \n", + "X X X \n", + "Эпизод 99, Общая награда: 1\n", + "Средняя награда: 0.3434343434343434\n", + "шаг: O\n", + " \n", + " \n", + " X \n", + "шаг: X\n", + "O \n", + " \n", + " X \n", + "шаг: O\n", + "O X \n", + " \n", + " X \n", + "шаг: X\n", + "O X \n", + " O \n", + " X \n", + "шаг: O\n", + "O X X \n", + " O \n", + " X \n", + "шаг: X\n", + "O X X \n", + " O \n", + " O X \n", + "шаг: O\n", + "O X X \n", + " O \n", + "X O X \n", + "шаг: X\n", + "O X X \n", + "O O \n", + "X O X \n", + "шаг: O\n", + "O X X \n", + "O O X \n", + "X O X \n", + "Эпизод 100, Общая награда: 1\n", + "Средняя награда: 0.35\n" + ] + } + ], + "source": [ + "environment = TicTacToeEnv()\n", + "\n", + "agent = Agent(symbol=1)\n", + "\n", + "num_episodes = 100 \n", + "collected_rewards = [] \n", + "\n", + "oom = 1\n", + "\n", + "for i in range(num_episodes):\n", + " state, _ = environment.reset() \n", + "\n", + " total_reward = 0\n", + "\n", + " done = False\n", + " om = oom \n", + "\n", + " for j in range(9): \n", + " moves = environment.move_generator() \n", + "\n", + " if not moves:\n", + " break\n", + "\n", + " \n", + " if len(moves) == 1:\n", + " move = moves[0]\n", + " else:\n", + " move = agent.get_action(moves)\n", + "\n", + " next_state, reward, done, info = environment.step(move)\n", + " total_reward += reward\n", + " state = next_state\n", + "\n", + " environment.render()\n", + "\n", + " if done:\n", + " break\n", + "\n", + " om = -om\n", + "\n", + " collected_rewards.append(total_reward)\n", + "\n", + " print(f\"Эпизод {i+1}, Общая награда: {total_reward}\")\n", + " average_reward = sum(collected_rewards) / len(collected_rewards)\n", + " print(f\"Средняя награда: {average_reward}\")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "aimvenv", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} -- 2.25.1