diff --git a/docs/conf.py b/docs/conf.py index 33922f0..a26f4a7 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -174,6 +174,7 @@ def notebook_modification_function(notebook_content, notebook_filename): dummy_notebook_content["cells"] + notebook_content["cells"] ) + jupyterlite_contents = ["tutorials"] # numpydoc_validation_checks = {"all"} # can be uncommented to get the warnings from numpy. diff --git a/tutorials/Tutorial_Deep_Q_Learning.ipynb b/tutorials/Tutorial_Deep_Q_Learning.ipynb new file mode 100644 index 0000000..c315bab --- /dev/null +++ b/tutorials/Tutorial_Deep_Q_Learning.ipynb @@ -0,0 +1,1059 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "2j_no2BuvPUE" + }, + "source": [ + "# Tutorial - Deep Q-Learning \n", + "\n", + "Deep Q-Learning uses a neural network to approximate $Q$ functions. Hence, we usually refer to this algorithm as DQN (for *deep Q network*) [DQN Article](https://arxiv.org/abs/1312.5602).\n", + "\n", + "The parameters of the neural network are denoted by $\\theta$. \n", + "* As input, the network takes a state $s$,\n", + "* As output, the network returns $Q(s, a, \\theta)$, the value of each action $a$ in state $s$, according to the parameters $\\theta$.\n", + "\n", + "\n", + "The goal of Deep Q-Learning is to learn the parameters $\\theta$ so that $Q(s, a, \\theta)$ approximates well the optimal $Q$-function $Q^*(s, a)$. \n", + "\n", + "In addition to the network with parameters $\\theta$, the algorithm keeps another network with the same architecture and parameters $\\theta^-$, called **target network**.\n", + "\n", + "The algorithm works as follows:\n", + "\n", + "1. At each time $t$, the agent is in state $s_t$ and has observed the transitions $(s_i, a_i, r_i, s_i')_{i=1}^{t-1}$, which are stored in a **replay buffer**.\n", + "\n", + "2. Choose action $a_t = \\arg\\max_a Q(s_t, a)$ with probability $1-\\varepsilon_t$, and $a_t$=random action with probability $\\varepsilon_t$. \n", + "\n", + "3. Take action $a_t$, observe reward $r_t$ and next state $s_t'$.\n", + "\n", + "4. Add transition $(s_t, a_t, r_t, s_t')$ to the **replay buffer**.\n", + "\n", + "4. Sample a minibatch $\\mathcal{B}$ containing $B$ transitions from the replay buffer. Using this minibatch, we define the loss:\n", + "\n", + "$$\n", + "L(\\theta) = \\sum_{(s_i, a_i, r_i, s_i') \\in \\mathcal{B}}\n", + "\\left[\n", + "Q(s_i, a_i, \\theta) - y_i\n", + "\\right]^2\n", + "$$\n", + "where the $y_i$ are the **targets** computed with the **target network** $\\theta^-$:\n", + "\n", + "$$\n", + "y_i = r_i + \\gamma \\max_{a'} Q(s_i', a', \\theta^-).\n", + "$$\n", + "\n", + "5. Update the parameters $\\theta$ to minimize the loss, e.g., with gradient descent (**keeping $\\theta^-$ fixed**): \n", + "$$\n", + "\\theta \\gets \\theta - \\eta \\nabla_\\theta L(\\theta)\n", + "$$\n", + "where $\\eta$ is the optimization learning rate. \n", + "\n", + "6. Every $N$ transitions ($t\\mod N$ = 0), update target parameters: $\\theta^- \\gets \\theta$.\n", + "\n", + "7. $t \\gets t+1$. Stop if $t = T$, otherwise go to step 2." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "HhKHif__t9OD" + }, + "source": [ + "# Notebook setup" + ] + }, + { + "cell_type": "code", + "execution_count": 213, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "aylqy_sDqebM", + "outputId": "e1a78b7f-f832-4119-e8c5-3e02264944d9" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Defaulting to user installation because normal site-packages is not writeable\n", + "Requirement already satisfied: rlberry in /home/hkohler/.local/lib/python3.10/site-packages (0.5.0)\n", + "Requirement already satisfied: dill in /home/hkohler/.local/lib/python3.10/site-packages (from rlberry) (0.3.7)\n", + "Requirement already satisfied: matplotlib in /home/hkohler/.local/lib/python3.10/site-packages (from rlberry) (3.7.2)\n", + "Requirement already satisfied: numpy>=1.17 in /home/hkohler/.local/lib/python3.10/site-packages (from rlberry) (1.25.1)\n", + "Requirement already satisfied: pandas in /home/hkohler/.local/lib/python3.10/site-packages (from rlberry) (2.0.3)\n", + "Requirement already satisfied: docopt in /home/hkohler/.local/lib/python3.10/site-packages (from rlberry) (0.6.2)\n", + "Requirement already satisfied: tqdm in /home/hkohler/.local/lib/python3.10/site-packages (from rlberry) (4.66.1)\n", + "Requirement already satisfied: gymnasium in /home/hkohler/.local/lib/python3.10/site-packages (from rlberry) (0.29.1)\n", + "Requirement already satisfied: seaborn in /home/hkohler/.local/lib/python3.10/site-packages (from rlberry) (0.12.2)\n", + "Requirement already satisfied: pyyaml in /usr/lib/python3/dist-packages (from rlberry) (5.4.1)\n", + "Requirement already satisfied: pygame-ce in /home/hkohler/.local/lib/python3.10/site-packages (from rlberry) (2.3.2)\n", + "Requirement already satisfied: scipy>=1.6 in /home/hkohler/.local/lib/python3.10/site-packages (from rlberry) (1.11.1)\n", + "Requirement already satisfied: farama-notifications>=0.0.1 in /home/hkohler/.local/lib/python3.10/site-packages (from gymnasium->rlberry) (0.0.4)\n", + "Requirement already satisfied: cloudpickle>=1.2.0 in /home/hkohler/.local/lib/python3.10/site-packages (from gymnasium->rlberry) (2.2.1)\n", + "Requirement already satisfied: typing-extensions>=4.3.0 in /home/hkohler/.local/lib/python3.10/site-packages (from gymnasium->rlberry) (4.7.1)\n", + "Requirement already satisfied: pillow>=6.2.0 in /usr/lib/python3/dist-packages (from matplotlib->rlberry) (9.0.1)\n", + "Requirement already satisfied: pyparsing<3.1,>=2.3.1 in /usr/lib/python3/dist-packages (from matplotlib->rlberry) (2.4.7)\n", + "Requirement already satisfied: python-dateutil>=2.7 in /home/hkohler/.local/lib/python3.10/site-packages (from matplotlib->rlberry) (2.8.2)\n", + "Requirement already satisfied: cycler>=0.10 in /home/hkohler/.local/lib/python3.10/site-packages (from matplotlib->rlberry) (0.11.0)\n", + "Requirement already satisfied: contourpy>=1.0.1 in /home/hkohler/.local/lib/python3.10/site-packages (from matplotlib->rlberry) (1.1.0)\n", + "Requirement already satisfied: fonttools>=4.22.0 in /home/hkohler/.local/lib/python3.10/site-packages (from matplotlib->rlberry) (4.41.0)\n", + "Requirement already satisfied: kiwisolver>=1.0.1 in /home/hkohler/.local/lib/python3.10/site-packages (from matplotlib->rlberry) (1.4.4)\n", + "Requirement already satisfied: packaging>=20.0 in /home/hkohler/.local/lib/python3.10/site-packages (from matplotlib->rlberry) (23.1)\n", + "Requirement already satisfied: pytz>=2020.1 in /usr/lib/python3/dist-packages (from pandas->rlberry) (2022.1)\n", + "Requirement already satisfied: tzdata>=2022.1 in /home/hkohler/.local/lib/python3.10/site-packages (from pandas->rlberry) (2023.3)\n", + "Requirement already satisfied: six>=1.5 in /usr/lib/python3/dist-packages (from python-dateutil>=2.7->matplotlib->rlberry) (1.16.0)\n", + "Defaulting to user installation because normal site-packages is not writeable\n", + "Requirement already satisfied: stable-baselines3 in /home/hkohler/.local/lib/python3.10/site-packages (2.1.0)\n", + "Requirement already satisfied: matplotlib in /home/hkohler/.local/lib/python3.10/site-packages (from stable-baselines3) (3.7.2)\n", + "Requirement already satisfied: gymnasium<0.30,>=0.28.1 in /home/hkohler/.local/lib/python3.10/site-packages (from stable-baselines3) (0.29.1)\n", + "Requirement already satisfied: torch>=1.13 in /home/hkohler/.local/lib/python3.10/site-packages (from stable-baselines3) (2.0.1)\n", + "Requirement already satisfied: pandas in /home/hkohler/.local/lib/python3.10/site-packages (from stable-baselines3) (2.0.3)\n", + "Requirement already satisfied: cloudpickle in /home/hkohler/.local/lib/python3.10/site-packages (from stable-baselines3) (2.2.1)\n", + "Requirement already satisfied: numpy>=1.20 in /home/hkohler/.local/lib/python3.10/site-packages (from stable-baselines3) (1.25.1)\n", + "Requirement already satisfied: typing-extensions>=4.3.0 in /home/hkohler/.local/lib/python3.10/site-packages (from gymnasium<0.30,>=0.28.1->stable-baselines3) (4.7.1)\n", + "Requirement already satisfied: farama-notifications>=0.0.1 in /home/hkohler/.local/lib/python3.10/site-packages (from gymnasium<0.30,>=0.28.1->stable-baselines3) (0.0.4)\n", + "Requirement already satisfied: nvidia-nvtx-cu11==11.7.91 in /home/hkohler/.local/lib/python3.10/site-packages (from torch>=1.13->stable-baselines3) (11.7.91)\n", + "Requirement already satisfied: nvidia-curand-cu11==10.2.10.91 in /home/hkohler/.local/lib/python3.10/site-packages (from torch>=1.13->stable-baselines3) (10.2.10.91)\n", + "Requirement already satisfied: jinja2 in /usr/lib/python3/dist-packages (from torch>=1.13->stable-baselines3) (3.0.3)\n", + "Requirement already satisfied: networkx in /home/hkohler/.local/lib/python3.10/site-packages (from torch>=1.13->stable-baselines3) (3.1)\n", + "Requirement already satisfied: filelock in /home/hkohler/.local/lib/python3.10/site-packages (from torch>=1.13->stable-baselines3) (3.12.3)\n", + "Requirement already satisfied: nvidia-cuda-cupti-cu11==11.7.101 in /home/hkohler/.local/lib/python3.10/site-packages (from torch>=1.13->stable-baselines3) (11.7.101)\n", + "Requirement already satisfied: nvidia-cusparse-cu11==11.7.4.91 in /home/hkohler/.local/lib/python3.10/site-packages (from torch>=1.13->stable-baselines3) (11.7.4.91)\n", + "Requirement already satisfied: nvidia-cudnn-cu11==8.5.0.96 in /home/hkohler/.local/lib/python3.10/site-packages (from torch>=1.13->stable-baselines3) (8.5.0.96)\n", + "Requirement already satisfied: sympy in /home/hkohler/.local/lib/python3.10/site-packages (from torch>=1.13->stable-baselines3) (1.12)\n", + "Requirement already satisfied: nvidia-nccl-cu11==2.14.3 in /home/hkohler/.local/lib/python3.10/site-packages (from torch>=1.13->stable-baselines3) (2.14.3)\n", + "Requirement already satisfied: nvidia-cusolver-cu11==11.4.0.1 in /home/hkohler/.local/lib/python3.10/site-packages (from torch>=1.13->stable-baselines3) (11.4.0.1)\n", + "Requirement already satisfied: triton==2.0.0 in /home/hkohler/.local/lib/python3.10/site-packages (from torch>=1.13->stable-baselines3) (2.0.0)\n", + "Requirement already satisfied: nvidia-cuda-nvrtc-cu11==11.7.99 in /home/hkohler/.local/lib/python3.10/site-packages (from torch>=1.13->stable-baselines3) (11.7.99)\n", + "Requirement already satisfied: nvidia-cublas-cu11==11.10.3.66 in /home/hkohler/.local/lib/python3.10/site-packages (from torch>=1.13->stable-baselines3) (11.10.3.66)\n", + "Requirement already satisfied: nvidia-cuda-runtime-cu11==11.7.99 in /home/hkohler/.local/lib/python3.10/site-packages (from torch>=1.13->stable-baselines3) (11.7.99)\n", + "Requirement already satisfied: nvidia-cufft-cu11==10.9.0.58 in /home/hkohler/.local/lib/python3.10/site-packages (from torch>=1.13->stable-baselines3) (10.9.0.58)\n", + "Requirement already satisfied: wheel in /usr/lib/python3/dist-packages (from nvidia-cublas-cu11==11.10.3.66->torch>=1.13->stable-baselines3) (0.37.1)\n", + "Requirement already satisfied: setuptools in /home/hkohler/.local/lib/python3.10/site-packages (from nvidia-cublas-cu11==11.10.3.66->torch>=1.13->stable-baselines3) (68.0.0)\n", + "Requirement already satisfied: cmake in /home/hkohler/.local/lib/python3.10/site-packages (from triton==2.0.0->torch>=1.13->stable-baselines3) (3.27.2)\n", + "Requirement already satisfied: lit in /home/hkohler/.local/lib/python3.10/site-packages (from triton==2.0.0->torch>=1.13->stable-baselines3) (16.0.6)\n", + "Requirement already satisfied: kiwisolver>=1.0.1 in /home/hkohler/.local/lib/python3.10/site-packages (from matplotlib->stable-baselines3) (1.4.4)\n", + "Requirement already satisfied: contourpy>=1.0.1 in /home/hkohler/.local/lib/python3.10/site-packages (from matplotlib->stable-baselines3) (1.1.0)\n", + "Requirement already satisfied: packaging>=20.0 in /home/hkohler/.local/lib/python3.10/site-packages (from matplotlib->stable-baselines3) (23.1)\n", + "Requirement already satisfied: python-dateutil>=2.7 in /home/hkohler/.local/lib/python3.10/site-packages (from matplotlib->stable-baselines3) (2.8.2)\n", + "Requirement already satisfied: cycler>=0.10 in /home/hkohler/.local/lib/python3.10/site-packages (from matplotlib->stable-baselines3) (0.11.0)\n", + "Requirement already satisfied: pillow>=6.2.0 in /usr/lib/python3/dist-packages (from matplotlib->stable-baselines3) (9.0.1)\n", + "Requirement already satisfied: pyparsing<3.1,>=2.3.1 in /usr/lib/python3/dist-packages (from matplotlib->stable-baselines3) (2.4.7)\n", + "Requirement already satisfied: fonttools>=4.22.0 in /home/hkohler/.local/lib/python3.10/site-packages (from matplotlib->stable-baselines3) (4.41.0)\n", + "Requirement already satisfied: tzdata>=2022.1 in /home/hkohler/.local/lib/python3.10/site-packages (from pandas->stable-baselines3) (2023.3)\n", + "Requirement already satisfied: pytz>=2020.1 in /usr/lib/python3/dist-packages (from pandas->stable-baselines3) (2022.1)\n", + "Requirement already satisfied: six>=1.5 in /usr/lib/python3/dist-packages (from python-dateutil>=2.7->matplotlib->stable-baselines3) (1.16.0)\n", + "Requirement already satisfied: mpmath>=0.19 in /home/hkohler/.local/lib/python3.10/site-packages (from sympy->torch>=1.13->stable-baselines3) (1.3.0)\n" + ] + } + ], + "source": [ + "# install rlberry library\n", + "!pip install rlberry" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 1. Imports" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "id": "VWBRfwosfA9f" + }, + "outputs": [], + "source": [ + "# Imports\n", + "from rlberry.agents import AgentWithSimplePolicy\n", + "from rlberry.manager import (\n", + " AgentManager,\n", + " evaluate_agents,\n", + " plot_writer_data,\n", + " read_writer_data,\n", + ")\n", + "from rlberry.wrappers import WriterWrapper\n", + "from rlberry.envs import gym_make, atari_make\n", + "\n", + "import torch\n", + "import torch.nn as nn\n", + "import torch.nn.functional as F\n", + "import torch.optim as optim\n", + "import numpy as np\n", + "from copy import deepcopy\n", + "import gymnasium as gym\n", + "\n", + "\n", + "rng = np.random.default_rng(seed=42)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "6g16Je-dhM2Q" + }, + "source": [ + "# 2. Define the replay buffer class" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "id": "Jvh82br9hMNt" + }, + "outputs": [], + "source": [ + "class ReplayBuffer:\n", + " def __init__(self, capacity, env):\n", + " self.capacity = capacity\n", + " self.position = 0\n", + " self.observations = torch.zeros((capacity, *env.observation_space.shape), dtype=torch.float32)\n", + " self.next_observations = torch.zeros((capacity, *env.observation_space.shape), dtype=torch.float32)\n", + " self.actions = torch.zeros((capacity, 1), dtype=torch.int64)\n", + " self.rewards = torch.zeros((capacity,1), dtype=torch.float32)\n", + " self.terminateds = torch.zeros((capacity,1),dtype=torch.bool)\n", + "\n", + " def push(self, state, action, reward, next_state, done):\n", + " \"\"\"Saves a transition.\"\"\"\n", + " self.observations[self.position] = torch.tensor(state)\n", + " self.next_observations[self.position] = torch.tensor(next_state)\n", + " self.actions[self.position] = torch.tensor(action)\n", + " self.rewards[self.position] = torch.tensor(reward)\n", + " self.terminateds[self.position] = torch.tensor(done)\n", + " self.position = (self.position + 1) % self.capacity\n", + "\n", + " def sample(self, batch_size):\n", + " indices = rng.choice(np.arange(self.position), size=batch_size, replace=False)\n", + " return self.observations[indices], self.actions[indices], self.rewards[indices], self.next_observations[indices], self.terminateds[indices]\n", + "\n", + " def __len__(self):\n", + " return self.position\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "UCc9WZppi92W" + }, + "source": [ + "# 3. Define the neural network class for the $Q$-functions" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "id": "sdNz3Jrwi9iS" + }, + "outputs": [], + "source": [ + "class Net(nn.Module):\n", + " \"\"\"\n", + " Basic neural net.\n", + " \"\"\"\n", + " def __init__(self, obs_size, hidden_size, n_actions):\n", + " super(Net, self).__init__()\n", + " self.net = nn.Sequential(\n", + " nn.Linear(obs_size, hidden_size),\n", + " nn.Tanh(),\n", + " nn.Linear(hidden_size, n_actions)\n", + " )\n", + "\n", + " def forward(self, x):\n", + " return self.net(x)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "xnR8nfoSjZjL" + }, + "source": [ + "# 4. Implement Deep Q-Learning" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "# Create a DQN class that is interfacable with rlberry.AgentManager\n", + "class MyDQN(AgentWithSimplePolicy):\n", + " name = \"MyDQN\"\n", + " def __init__(self, env: gym.Env, \n", + " gamma: float, \n", + " batch_size: int, \n", + " buffer_capacity: float, \n", + " update_target_every: int,\n", + " epsilon_start: float,\n", + " decrease_epsilon: int,\n", + " epsilon_min: float,\n", + " replay_buffer: ReplayBuffer,\n", + " qnetworks: torch.nn,\n", + " optimizer: optim,\n", + " loss_fn: torch.nn,\n", + " **kwargs):\n", + " AgentWithSimplePolicy.__init__(self, env, **kwargs) # Interface with rlberry API\n", + " self.env = WriterWrapper(self.env, self.writer, write_scalar=\"action_and_reward\") # \"action\", \"reward\" \n", + " self.replay_buffer = ReplayBuffer(buffer_capacity, self.env)\n", + "\n", + " # create network and target network\n", + " hidden_size = 64\n", + " obs_size = self.env.observation_space.shape[0]\n", + " n_actions = self.env.action_space.n\n", + "\n", + " self.qnet = qnetworks(obs_size, hidden_size, n_actions)\n", + " self.qtarget = qnetworks(obs_size, hidden_size, n_actions)\n", + "\n", + " # objective and optimizer\n", + " self.optimizer = optimizer(params=self.qnet.parameters(), lr=1e-3)\n", + " self.loss = loss_fn\n", + "\n", + " \n", + " self.gamma = gamma\n", + " self.batch_size = batch_size\n", + " self.buffer_capacity = buffer_capacity\n", + " self.update_target_every = update_target_every\n", + " self.epsilon_start = epsilon_start\n", + " self.decrease_epsilon = decrease_epsilon\n", + " self.epsilon_min = epsilon_min\n", + " self.replay = replay_buffer\n", + " \n", + "\n", + " def choose_action(self, state, epsilon):\n", + " \"\"\"\n", + " Return action according to an epsilon-greedy exploration policy\n", + " \"\"\"\n", + " if rng.random() < epsilon:\n", + " return self.env.action_space.sample()\n", + " else:\n", + " with torch.no_grad():\n", + " return self.qnet(torch.FloatTensor(state)).argmax().item()\n", + " \n", + "\n", + " def update(self, state, action, reward, next_state, done):\n", + " \"\"\"\n", + " Updates qnetwork weights\n", + " \"\"\"\n", + " \n", + " # add data to replay buffer\n", + " self.replay_buffer.push(state, action, reward, next_state, done)\n", + " \n", + " # if there is not enough samples in the buffer, we dont update the networks\n", + " if len(self.replay_buffer) < self.batch_size:\n", + " return np.inf\n", + " \n", + " # get batch\n", + " states, actions, rewards, next_states, dones = self.replay_buffer.sample(self.batch_size)\n", + " \n", + "\n", + " # compute targets y = r + gamma max_ a' Q'(s', a')\n", + " with torch.no_grad():\n", + " qtarget_snext = self.qtarget(torch.FloatTensor(next_states))\n", + " qtarget_snext_maxa = torch.max(qtarget_snext, dim=1).values.reshape(self.batch_size, 1)\n", + " targets = rewards + self.gamma * (~dones * qtarget_snext_maxa)\n", + "\n", + " predictions = self.qnet(torch.FloatTensor(states)).gather(dim=1, index=actions)\n", + " loss = self.loss(predictions, targets)\n", + " \n", + " # Optimize the model\n", + " self.optimizer.zero_grad()\n", + " loss.backward()\n", + " self.optimizer.step()\n", + " \n", + " return loss.item()\n", + "\n", + " def fit(self, budget=10000, **kwargs):\n", + " state, _ = self.env.reset()\n", + " epsilon = self.epsilon_start\n", + " total_time_steps = 0\n", + " episode_nb = 0\n", + " episode_reward = 0\n", + " while total_time_steps < budget:\n", + " action = self.choose_action(state, epsilon)\n", + "\n", + " # take action and update replay buffer and networks\n", + " next_state, reward, terminated, truncated, _ = self.env.step(action)\n", + " episode_reward += reward\n", + " done = terminated or truncated\n", + " loss = self.update(state, action, reward, next_state, terminated)\n", + "\n", + " # update state\n", + " state = next_state\n", + "\n", + " # end episode if done\n", + " if done:\n", + " episode_nb += 1\n", + " state, _ = self.env.reset()\n", + " self.writer.add_scalar('episode_reward', episode_reward, global_step=total_time_steps)\n", + " episode_reward = 0\n", + " \n", + " # update target network\n", + " if total_time_steps % self.update_target_every == 0:\n", + " self.qtarget.load_state_dict(self.qnet.state_dict())\n", + "\n", + " total_time_steps += 1\n", + " # decrease epsilon\n", + " epsilon = self.epsilon_min + (self.epsilon_start - self.epsilon_min) * \\\n", + " np.exp(-1. * total_time_steps / self.decrease_epsilon)\n", + " self.writer.add_scalar('epsilon', epsilon)\n", + "\n", + " def policy(self, state):\n", + " return self.qnet(torch.FloatTensor(state)).argmax().item() " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 5. Instantiate two DQN agents to compare, one with a small batch size and one with default batch size." + ] + }, + { + "cell_type": "code", + "execution_count": 258, + "metadata": {}, + "outputs": [], + "source": [ + "# Environment\n", + "env_ctor = gym_make # environment constructor\n", + "env_kwargs = {\"id\": \"CartPole-v1\"} # parameters passed to the environment constructor. Here name of the environment\n", + "\n", + "names = [\"DQN\", \"DQN-small-batch-size\"]\n", + "agent_list = [MyDQN, MyDQN] # list of agents on which we run experiments\n", + "\n", + "agent_params = [dict(gamma=0.99, \n", + " batch_size=256, \n", + " buffer_capacity=10000, \n", + " update_target_every=1000, \n", + " epsilon_start=1, \n", + " decrease_epsilon=10_000, \n", + " epsilon_min=0.05,\n", + " qnetworks=Net,\n", + " replay_buffer=ReplayBuffer,\n", + " optimizer=optim.Adam,\n", + " loss_fn=F.mse_loss,\n", + " ), \n", + " dict(gamma=0.99, \n", + " batch_size=8, \n", + " buffer_capacity=10000, \n", + " update_target_every=1000, \n", + " epsilon_start=1, \n", + " decrease_epsilon=10_000, \n", + " epsilon_min=0.05,\n", + " qnetworks=Net,\n", + " replay_buffer=ReplayBuffer,\n", + " optimizer=optim.Adam,\n", + " loss_fn=F.mse_loss,\n", + " )]\n", + "\n", + "\n", + "fit_budget = 50_000 # budgent used by an agent in one fit. This is used differently by different agents.\n", + "n_fit = 3 # number of parallel fits of the same agent.\n", + "\n", + "agent_managers = [\n", + " AgentManager( # an AgentManager is used to repeatedly fit and evaluate an agent on an environment\n", + " Agent,\n", + " agent_name=names[e],\n", + " init_kwargs=agent_params[e],\n", + " train_env=(env_ctor, env_kwargs),\n", + " fit_budget=fit_budget,\n", + " n_fit=n_fit,\n", + " eval_kwargs=dict(eval_horizon=500, n_simulations=10)\n", + " )\n", + " for e, Agent in enumerate(agent_list)\n", + "]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 6. Fit the DQN agents." + ] + }, + { + "cell_type": "code", + "execution_count": 259, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\u001b[38;21m[INFO] 16:00: Running AgentManager fit() for DQN with n_fit = 3 and max_workers = None. \u001b[0m\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\u001b[38;21m[INFO] 16:00: [DQN[worker: 2]] | max_global_step = 1302 | reward = 1.0 | action = 1 | epsilon = 0.8840238379253593 | episode_reward = 14.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:00: [DQN[worker: 0]] | max_global_step = 1316 | reward = 1.0 | action = 1 | epsilon = 0.8828570215143315 | episode_reward = 36.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:00: [DQN[worker: 1]] | max_global_step = 1304 | reward = 1.0 | action = 0 | epsilon = 0.883857049837139 | episode_reward = 13.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:00: [DQN[worker: 2]] | max_global_step = 2415 | reward = 1.0 | action = 1 | epsilon = 0.7961763635995357 | episode_reward = 13.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:00: [DQN[worker: 0]] | max_global_step = 2428 | reward = 1.0 | action = 1 | epsilon = 0.7952069645727475 | episode_reward = 22.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:00: [DQN[worker: 1]] | max_global_step = 2408 | reward = 1.0 | action = 1 | epsilon = 0.7966988699099283 | episode_reward = 57.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:00: [DQN[worker: 2]] | max_global_step = 3527 | reward = 1.0 | action = 1 | epsilon = 0.7176485982466707 | episode_reward = 31.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:00: [DQN[worker: 0]] | max_global_step = 3545 | reward = 1.0 | action = 0 | epsilon = 0.7164479117118934 | episode_reward = 80.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:00: [DQN[worker: 1]] | max_global_step = 3509 | reward = 1.0 | action = 0 | epsilon = 0.7189183364526556 | episode_reward = 18.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:00: [DQN[worker: 2]] | max_global_step = 4083 | reward = 1.0 | action = 0 | epsilon = 0.681540444325822 | episode_reward = 25.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:00: [DQN[worker: 0]] | max_global_step = 4097 | reward = 1.0 | action = 0 | epsilon = 0.6806569063246778 | episode_reward = 18.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:00: [DQN[worker: 1]] | max_global_step = 4064 | reward = 1.0 | action = 1 | epsilon = 0.682741511822842 | episode_reward = 49.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:00: [DQN[worker: 2]] | max_global_step = 4771 | reward = 1.0 | action = 0 | epsilon = 0.6395514447364363 | episode_reward = 20.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:00: [DQN[worker: 0]] | max_global_step = 4787 | reward = 1.0 | action = 0 | epsilon = 0.6386089166484011 | episode_reward = 47.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:00: [DQN[worker: 1]] | max_global_step = 4749 | reward = 1.0 | action = 1 | epsilon = 0.6408498856761857 | episode_reward = 19.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:00: [DQN[worker: 2]] | max_global_step = 5589 | reward = 1.0 | action = 1 | epsilon = 0.5932458525509163 | episode_reward = 116.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:00: [DQN[worker: 0]] | max_global_step = 5602 | reward = 1.0 | action = 1 | epsilon = 0.5925400917864916 | episode_reward = 98.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:00: [DQN[worker: 1]] | max_global_step = 5574 | reward = 1.0 | action = 0 | epsilon = 0.5940613327870172 | episode_reward = 12.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:00: [DQN[worker: 2]] | max_global_step = 6710 | reward = 1.0 | action = 1 | epsilon = 0.5356858348840324 | episode_reward = 111.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:00: [DQN[worker: 0]] | max_global_step = 6702 | reward = 1.0 | action = 0 | epsilon = 0.5360259339892508 | episode_reward = 111.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:00: [DQN[worker: 1]] | max_global_step = 6685 | reward = 1.0 | action = 1 | epsilon = 0.5368528807826506 | episode_reward = 110.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:00: [DQN[worker: 2]] | max_global_step = 7767 | reward = 1.0 | action = 1 | epsilon = 0.48692518741559415 | episode_reward = 188.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:00: [DQN[worker: 0]] | max_global_step = 7787 | reward = 1.0 | action = 0 | epsilon = 0.48605221030886203 | episode_reward = 131.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:00: [DQN[worker: 1]] | max_global_step = 7752 | reward = 1.0 | action = 1 | epsilon = 0.487581066983416 | episode_reward = 21.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:00: [DQN[worker: 2]] | max_global_step = 8732 | reward = 1.0 | action = 1 | epsilon = 0.4467323946839852 | episode_reward = 219.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:00: [DQN[worker: 0]] | max_global_step = 8752 | reward = 1.0 | action = 0 | epsilon = 0.44593972283069444 | episode_reward = 56.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:00: [DQN[worker: 1]] | max_global_step = 8719 | reward = 1.0 | action = 1 | epsilon = 0.44724848218126523 | episode_reward = 199.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:00: [DQN[worker: 2]] | max_global_step = 9749 | reward = 1.0 | action = 1 | epsilon = 0.4084044095993085 | episode_reward = 103.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:00: [DQN[worker: 0]] | max_global_step = 9769 | reward = 1.0 | action = 0 | epsilon = 0.4076525500679663 | episode_reward = 201.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:00: [DQN[worker: 1]] | max_global_step = 9751 | reward = 1.0 | action = 1 | epsilon = 0.40829690440301447 | episode_reward = 137.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:00: [DQN[worker: 2]] | max_global_step = 11011 | reward = 1.0 | action = 1 | epsilon = 0.3658798704782359 | episode_reward = 29.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:00: [DQN[worker: 0]] | max_global_step = 11025 | reward = 1.0 | action = 0 | epsilon = 0.3654379480774276 | episode_reward = 228.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:00: [DQN[worker: 1]] | max_global_step = 11009 | reward = 1.0 | action = 1 | epsilon = 0.36594305277035016 | episode_reward = 199.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:00: [DQN[worker: 2]] | max_global_step = 12053 | reward = 1.0 | action = 0 | epsilon = 0.3346220001282746 | episode_reward = 206.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:00: [DQN[worker: 0]] | max_global_step = 12079 | reward = 1.0 | action = 1 | epsilon = 0.3338829441170905 | episode_reward = 298.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:00: [DQN[worker: 1]] | max_global_step = 12066 | reward = 1.0 | action = 0 | epsilon = 0.33425223192951276 | episode_reward = 428.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:01: [DQN[worker: 2]] | max_global_step = 13085 | reward = 1.0 | action = 1 | epsilon = 0.3067138356602251 | episode_reward = 249.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:01: [DQN[worker: 0]] | max_global_step = 13112 | reward = 1.0 | action = 1 | epsilon = 0.3060216431842919 | episode_reward = 168.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:01: [DQN[worker: 1]] | max_global_step = 13102 | reward = 1.0 | action = 0 | epsilon = 0.3062777928809787 | episode_reward = 376.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:01: [DQN[worker: 2]] | max_global_step = 14124 | reward = 1.0 | action = 0 | epsilon = 0.2813801397521377 | episode_reward = 316.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:01: [DQN[worker: 0]] | max_global_step = 14159 | reward = 1.0 | action = 1 | epsilon = 0.28059478313978153 | episode_reward = 227.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:01: [DQN[worker: 1]] | max_global_step = 14134 | reward = 1.0 | action = 0 | epsilon = 0.28114887526390175 | episode_reward = 396.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:01: [DQN[worker: 2]] | max_global_step = 15160 | reward = 1.0 | action = 0 | epsilon = 0.25860906220386176 | episode_reward = 290.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:01: [DQN[worker: 0]] | max_global_step = 15200 | reward = 1.0 | action = 1 | epsilon = 0.25779707127278056 | episode_reward = 366.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:01: [DQN[worker: 1]] | max_global_step = 15163 | reward = 1.0 | action = 0 | epsilon = 0.25854648887166976 | episode_reward = 500.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:01: [DQN[worker: 2]] | max_global_step = 16233 | reward = 1.0 | action = 0 | epsilon = 0.23738437426318232 | episode_reward = 316.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:01: [DQN[worker: 0]] | max_global_step = 16251 | reward = 1.0 | action = 0 | epsilon = 0.23704738577013923 | episode_reward = 266.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:01: [DQN[worker: 1]] | max_global_step = 16210 | reward = 1.0 | action = 1 | epsilon = 0.23781585433586044 | episode_reward = 450.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:01: [DQN[worker: 2]] | max_global_step = 17251 | reward = 1.0 | action = 1 | epsilon = 0.21924747359062885 | episode_reward = 255.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:01: [DQN[worker: 0]] | max_global_step = 17274 | reward = 1.0 | action = 0 | epsilon = 0.21885865171792968 | episode_reward = 333.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:01: [DQN[worker: 1]] | max_global_step = 17227 | reward = 1.0 | action = 0 | epsilon = 0.2196541553501506 | episode_reward = 365.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:01: [DQN[worker: 2]] | max_global_step = 18252 | reward = 1.0 | action = 1 | epsilon = 0.2031261336338343 | episode_reward = 251.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:01: [DQN[worker: 0]] | max_global_step = 18280 | reward = 1.0 | action = 0 | epsilon = 0.20269798015425783 | episode_reward = 381.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:01: [DQN[worker: 1]] | max_global_step = 18243 | reward = 1.0 | action = 1 | epsilon = 0.2032640091887979 | episode_reward = 336.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:01: [DQN[worker: 2]] | max_global_step = 19263 | reward = 1.0 | action = 1 | epsilon = 0.18840192950473478 | episode_reward = 251.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:01: [DQN[worker: 0]] | max_global_step = 19303 | reward = 1.0 | action = 0 | epsilon = 0.18784942752733974 | episode_reward = 500.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:01: [DQN[worker: 1]] | max_global_step = 19262 | reward = 1.0 | action = 0 | epsilon = 0.18841577038971796 | episode_reward = 264.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:01: [DQN[worker: 2]] | max_global_step = 20466 | reward = 1.0 | action = 1 | epsilon = 0.1727146798321741 | episode_reward = 428.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:01: [DQN[worker: 0]] | max_global_step = 20510 | reward = 1.0 | action = 0 | epsilon = 0.17217592137870685 | episode_reward = 500.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:01: [DQN[worker: 1]] | max_global_step = 20481 | reward = 1.0 | action = 0 | epsilon = 0.17253074579743954 | episode_reward = 356.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:01: [DQN[worker: 2]] | max_global_step = 21486 | reward = 1.0 | action = 0 | epsilon = 0.16081498231203795 | episode_reward = 243.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:01: [DQN[worker: 0]] | max_global_step = 21520 | reward = 1.0 | action = 0 | epsilon = 0.16043885115747936 | episode_reward = 326.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:01: [DQN[worker: 1]] | max_global_step = 21486 | reward = 1.0 | action = 0 | epsilon = 0.16081498231203795 | episode_reward = 345.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:01: [DQN[worker: 2]] | max_global_step = 22493 | reward = 1.0 | action = 1 | epsilon = 0.15019937835549935 | episode_reward = 225.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:01: [DQN[worker: 0]] | max_global_step = 22552 | reward = 1.0 | action = 0 | epsilon = 0.14960994256862714 | episode_reward = 304.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:01: [DQN[worker: 1]] | max_global_step = 22504 | reward = 1.0 | action = 1 | epsilon = 0.15008921963771074 | episode_reward = 311.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:01: [DQN[worker: 2]] | max_global_step = 23439 | reward = 1.0 | action = 0 | epsilon = 0.1411550574585841 | episode_reward = 221.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:01: [DQN[worker: 0]] | max_global_step = 23497 | reward = 1.0 | action = 0 | epsilon = 0.14062788839344298 | episode_reward = 342.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:01: [DQN[worker: 1]] | max_global_step = 23451 | reward = 1.0 | action = 1 | epsilon = 0.14104573699503037 | episode_reward = 297.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:01: [DQN[worker: 2]] | max_global_step = 24350 | reward = 1.0 | action = 0 | epsilon = 0.13321785969565475 | episode_reward = 234.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:01: [DQN[worker: 0]] | max_global_step = 24408 | reward = 1.0 | action = 1 | epsilon = 0.13273659313160555 | episode_reward = 273.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:01: [DQN[worker: 1]] | max_global_step = 24356 | reward = 1.0 | action = 1 | epsilon = 0.13316794395605672 | episode_reward = 303.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:01: [DQN[worker: 2]] | max_global_step = 25147 | reward = 1.0 | action = 1 | epsilon = 0.1268428159835826 | episode_reward = 207.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:01: [DQN[worker: 0]] | max_global_step = 25209 | reward = 1.0 | action = 1 | epsilon = 0.1263678643958337 | episode_reward = 258.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:01: [DQN[worker: 1]] | max_global_step = 25142 | reward = 1.0 | action = 1 | epsilon = 0.12688124699852749 | episode_reward = 283.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:01: [DQN[worker: 2]] | max_global_step = 25926 | reward = 1.0 | action = 0 | epsilon = 0.12108397926276343 | episode_reward = 195.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:01: [DQN[worker: 0]] | max_global_step = 25984 | reward = 1.0 | action = 1 | epsilon = 0.12067995314928918 | episode_reward = 335.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:01: [DQN[worker: 1]] | max_global_step = 25922 | reward = 1.0 | action = 1 | epsilon = 0.12111241854194518 | episode_reward = 262.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:01: [DQN[worker: 2]] | max_global_step = 26687 | reward = 1.0 | action = 1 | epsilon = 0.1158751961584574 | episode_reward = 198.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:01: [DQN[worker: 0]] | max_global_step = 26745 | reward = 1.0 | action = 1 | epsilon = 0.11549422590246672 | episode_reward = 282.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:01: [DQN[worker: 1]] | max_global_step = 26673 | reward = 1.0 | action = 0 | epsilon = 0.11596748602090894 | episode_reward = 262.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:01: [DQN[worker: 2]] | max_global_step = 27495 | reward = 1.0 | action = 1 | epsilon = 0.1107618414731443 | episode_reward = 207.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:01: [DQN[worker: 0]] | max_global_step = 27557 | reward = 1.0 | action = 0 | epsilon = 0.11038628348879892 | episode_reward = 254.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:01: [DQN[worker: 1]] | max_global_step = 27480 | reward = 1.0 | action = 1 | epsilon = 0.11085305262661702 | episode_reward = 270.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:01: [DQN[worker: 2]] | max_global_step = 28358 | reward = 1.0 | action = 0 | epsilon = 0.10573799130821762 | episode_reward = 306.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:01: [DQN[worker: 0]] | max_global_step = 28434 | reward = 1.0 | action = 1 | epsilon = 0.10531598821726039 | episode_reward = 258.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:01: [DQN[worker: 1]] | max_global_step = 28342 | reward = 1.0 | action = 0 | epsilon = 0.10582724347700533 | episode_reward = 264.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:01: [DQN[worker: 2]] | max_global_step = 29171 | reward = 1.0 | action = 1 | epsilon = 0.101385805903869 | episode_reward = 238.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:01: [DQN[worker: 0]] | max_global_step = 29250 | reward = 1.0 | action = 1 | epsilon = 0.10098145731709363 | episode_reward = 268.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:01: [DQN[worker: 1]] | max_global_step = 29169 | reward = 1.0 | action = 1 | epsilon = 0.1013960840928344 | episode_reward = 243.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:01: [DQN[worker: 2]] | max_global_step = 29985 | reward = 1.0 | action = 0 | epsilon = 0.09736871475843922 | episode_reward = 219.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:01: [DQN[worker: 0]] | max_global_step = 30274 | reward = 1.0 | action = 1 | epsilon = 0.09601935112199322 | episode_reward = 274.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:01: [DQN[worker: 1]] | max_global_step = 29979 | reward = 1.0 | action = 1 | epsilon = 0.09739714451536846 | episode_reward = 311.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:01: [DQN[worker: 2]] | max_global_step = 30980 | reward = 1.0 | action = 0 | epsilon = 0.0928824214090031 | episode_reward = 234.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:01: [DQN[worker: 0]] | max_global_step = 31043 | reward = 1.0 | action = 0 | epsilon = 0.09261311137148691 | episode_reward = 246.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:01: [DQN[worker: 1]] | max_global_step = 30967 | reward = 1.0 | action = 0 | epsilon = 0.09293820480818811 | episode_reward = 339.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:02: [DQN[worker: 2]] | max_global_step = 31753 | reward = 1.0 | action = 0 | epsilon = 0.089692489347529 | episode_reward = 223.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:02: [DQN[worker: 0]] | max_global_step = 31816 | reward = 1.0 | action = 0 | epsilon = 0.08944321271052806 | episode_reward = 250.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:02: [DQN[worker: 1]] | max_global_step = 31748 | reward = 1.0 | action = 1 | epsilon = 0.08971234055459097 | episode_reward = 299.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:02: [DQN[worker: 2]] | max_global_step = 32541 | reward = 1.0 | action = 1 | epsilon = 0.08668478108029745 | episode_reward = 252.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:02: [DQN[worker: 0]] | max_global_step = 32610 | reward = 1.0 | action = 1 | epsilon = 0.0864325273669702 | episode_reward = 243.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:02: [DQN[worker: 1]] | max_global_step = 32532 | reward = 1.0 | action = 1 | epsilon = 0.08671781224506428 | episode_reward = 378.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:02: [DQN[worker: 2]] | max_global_step = 33335 | reward = 1.0 | action = 0 | epsilon = 0.08388464576828217 | episode_reward = 216.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:02: [DQN[worker: 0]] | max_global_step = 33411 | reward = 1.0 | action = 1 | epsilon = 0.0836280985746251 | episode_reward = 219.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:02: [DQN[worker: 1]] | max_global_step = 33324 | reward = 1.0 | action = 0 | epsilon = 0.08392533174991076 | episode_reward = 317.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:02: [DQN[worker: 2]] | max_global_step = 34110 | reward = 1.0 | action = 0 | epsilon = 0.08135776690607546 | episode_reward = 236.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:02: [DQN[worker: 0]] | max_global_step = 34174 | reward = 1.0 | action = 0 | epsilon = 0.08115771803709033 | episode_reward = 240.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:02: [DQN[worker: 1]] | max_global_step = 34085 | reward = 1.0 | action = 0 | epsilon = 0.08143625939807414 | episode_reward = 310.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:02: [DQN[worker: 2]] | max_global_step = 34936 | reward = 1.0 | action = 1 | epsilon = 0.07887170311808674 | episode_reward = 79.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:02: [DQN[worker: 0]] | max_global_step = 35011 | reward = 1.0 | action = 1 | epsilon = 0.07865597533511028 | episode_reward = 231.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:02: [DQN[worker: 1]] | max_global_step = 34915 | reward = 1.0 | action = 1 | epsilon = 0.07893239740132697 | episode_reward = 320.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:02: [DQN[worker: 2]] | max_global_step = 35759 | reward = 1.0 | action = 1 | epsilon = 0.07659071207217588 | episode_reward = 176.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:02: [DQN[worker: 0]] | max_global_step = 35836 | reward = 1.0 | action = 1 | epsilon = 0.07638674985151202 | episode_reward = 227.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:02: [DQN[worker: 1]] | max_global_step = 35732 | reward = 1.0 | action = 1 | epsilon = 0.07666527039892398 | episode_reward = 320.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:02: [DQN[worker: 2]] | max_global_step = 36606 | reward = 1.0 | action = 1 | epsilon = 0.07443122395716767 | episode_reward = 153.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:02: [DQN[worker: 0]] | max_global_step = 36686 | reward = 1.0 | action = 1 | epsilon = 0.07423655388404213 | episode_reward = 249.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:02: [DQN[worker: 1]] | max_global_step = 36575 | reward = 1.0 | action = 0 | epsilon = 0.07450707826486518 | episode_reward = 406.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:02: [DQN[worker: 2]] | max_global_step = 37286 | reward = 1.0 | action = 0 | epsilon = 0.07282512686429443 | episode_reward = 223.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:02: [DQN[worker: 0]] | max_global_step = 37376 | reward = 1.0 | action = 0 | epsilon = 0.07262062237312948 | episode_reward = 209.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:02: [DQN[worker: 1]] | max_global_step = 37266 | reward = 1.0 | action = 0 | epsilon = 0.07287082279872549 | episode_reward = 500.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:02: [DQN[worker: 2]] | max_global_step = 38064 | reward = 1.0 | action = 1 | epsilon = 0.07111665328916857 | episode_reward = 226.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:02: [DQN[worker: 0]] | max_global_step = 38157 | reward = 1.0 | action = 0 | epsilon = 0.07092117877893239 | episode_reward = 252.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:02: [DQN[worker: 1]] | max_global_step = 38045 | reward = 1.0 | action = 0 | epsilon = 0.0711568130701285 | episode_reward = 367.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:02: [DQN[worker: 2]] | max_global_step = 38804 | reward = 1.0 | action = 0 | epsilon = 0.06961043817831136 | episode_reward = 402.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:02: [DQN[worker: 0]] | max_global_step = 38897 | reward = 1.0 | action = 1 | epsilon = 0.06942890653378754 | episode_reward = 265.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:02: [DQN[worker: 1]] | max_global_step = 38784 | reward = 1.0 | action = 0 | epsilon = 0.06964969830170467 | episode_reward = 305.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:02: [DQN[worker: 2]] | max_global_step = 39490 | reward = 1.0 | action = 1 | epsilon = 0.06831026780233697 | episode_reward = 189.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:02: [DQN[worker: 0]] | max_global_step = 39601 | reward = 1.0 | action = 0 | epsilon = 0.06810814767172013 | episode_reward = 268.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:02: [DQN[worker: 1]] | max_global_step = 39482 | reward = 1.0 | action = 0 | epsilon = 0.06832492187742732 | episode_reward = 373.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:02: [DQN[worker: 2]] | max_global_step = 40409 | reward = 1.0 | action = 1 | epsilon = 0.06670255972452366 | episode_reward = 182.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:02: [DQN[worker: 0]] | max_global_step = 40518 | reward = 1.0 | action = 0 | epsilon = 0.06652149044383929 | episode_reward = 264.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:02: [DQN[worker: 1]] | max_global_step = 40406 | reward = 1.0 | action = 1 | epsilon = 0.06670757124413135 | episode_reward = 417.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:02: [DQN[worker: 2]] | max_global_step = 41107 | reward = 1.0 | action = 1 | epsilon = 0.06557647844793664 | episode_reward = 211.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:02: [DQN[worker: 0]] | max_global_step = 41218 | reward = 1.0 | action = 1 | epsilon = 0.06540607611605473 | episode_reward = 333.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:02: [DQN[worker: 1]] | max_global_step = 41112 | reward = 1.0 | action = 0 | epsilon = 0.065568692155448 | episode_reward = 365.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:02: [DQN[worker: 2]] | max_global_step = 41859 | reward = 1.0 | action = 1 | epsilon = 0.06444808651372655 | episode_reward = 147.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:02: [DQN[worker: 0]] | max_global_step = 41965 | reward = 1.0 | action = 1 | epsilon = 0.06429574562978177 | episode_reward = 320.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:02: [DQN[worker: 1]] | max_global_step = 41864 | reward = 1.0 | action = 0 | epsilon = 0.06444086427617954 | episode_reward = 497.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:02: [DQN[worker: 2]] | max_global_step = 42578 | reward = 1.0 | action = 1 | epsilon = 0.06344573539268861 | episode_reward = 153.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:02: [DQN[worker: 0]] | max_global_step = 42681 | reward = 1.0 | action = 0 | epsilon = 0.06330795510471739 | episode_reward = 343.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:02: [DQN[worker: 1]] | max_global_step = 42583 | reward = 1.0 | action = 1 | epsilon = 0.0634390142054291 | episode_reward = 355.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:02: [DQN[worker: 2]] | max_global_step = 43306 | reward = 1.0 | action = 1 | epsilon = 0.06250166686470679 | episode_reward = 141.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:02: [DQN[worker: 0]] | max_global_step = 43408 | reward = 1.0 | action = 0 | epsilon = 0.0623747979938792 | episode_reward = 343.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:02: [DQN[worker: 1]] | max_global_step = 43306 | reward = 1.0 | action = 0 | epsilon = 0.06250166686470679 | episode_reward = 359.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:02: [DQN[worker: 2]] | max_global_step = 44024 | reward = 1.0 | action = 1 | epsilon = 0.061635514136881474 | episode_reward = 142.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:02: [DQN[worker: 0]] | max_global_step = 44122 | reward = 1.0 | action = 0 | epsilon = 0.0615220430149831 | episode_reward = 351.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:02: [DQN[worker: 1]] | max_global_step = 44033 | reward = 1.0 | action = 0 | epsilon = 0.06162504688512811 | episode_reward = 344.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:02: [DQN[worker: 2]] | max_global_step = 44725 | reward = 1.0 | action = 0 | epsilon = 0.06084779663875191 | episode_reward = 120.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:02: [DQN[worker: 0]] | max_global_step = 44829 | reward = 1.0 | action = 1 | epsilon = 0.060735564174111814 | episode_reward = 382.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:02: [DQN[worker: 1]] | max_global_step = 44741 | reward = 1.0 | action = 0 | epsilon = 0.06083045404190714 | episode_reward = 289.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:02: [DQN[worker: 2]] | max_global_step = 45468 | reward = 1.0 | action = 0 | epsilon = 0.06007101991973842 | episode_reward = 143.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:02: [DQN[worker: 0]] | max_global_step = 45569 | reward = 1.0 | action = 0 | epsilon = 0.05996981456591426 | episode_reward = 332.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:02: [DQN[worker: 1]] | max_global_step = 45485 | reward = 1.0 | action = 1 | epsilon = 0.06005391373025567 | episode_reward = 294.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:02: [DQN[worker: 2]] | max_global_step = 46237 | reward = 1.0 | action = 1 | epsilon = 0.05932558767129545 | episode_reward = 314.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:02: [DQN[worker: 0]] | max_global_step = 46332 | reward = 1.0 | action = 0 | epsilon = 0.059237414076133074 | episode_reward = 354.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:02: [DQN[worker: 1]] | max_global_step = 46251 | reward = 1.0 | action = 1 | epsilon = 0.05931254098336815 | episode_reward = 288.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:03: [DQN[worker: 2]] | max_global_step = 47003 | reward = 1.0 | action = 0 | epsilon = 0.05863792148142126 | episode_reward = 169.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:03: [DQN[worker: 0]] | max_global_step = 47091 | reward = 1.0 | action = 0 | epsilon = 0.0585622412537755 | episode_reward = 344.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:03: [DQN[worker: 1]] | max_global_step = 47011 | reward = 1.0 | action = 0 | epsilon = 0.05863101390763404 | episode_reward = 500.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:03: [DQN[worker: 2]] | max_global_step = 47784 | reward = 1.0 | action = 0 | epsilon = 0.05798897115252949 | episode_reward = 174.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:03: [DQN[worker: 0]] | max_global_step = 47872 | reward = 1.0 | action = 1 | epsilon = 0.05791897663396629 | episode_reward = 359.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:03: [DQN[worker: 1]] | max_global_step = 47802 | reward = 1.0 | action = 1 | epsilon = 0.057974603938826426 | episode_reward = 313.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:03: [DQN[worker: 2]] | max_global_step = 48561 | reward = 1.0 | action = 1 | epsilon = 0.05739173130756995 | episode_reward = 183.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:03: [DQN[worker: 0]] | max_global_step = 48643 | reward = 1.0 | action = 1 | epsilon = 0.05733136694298395 | episode_reward = 371.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:03: [DQN[worker: 1]] | max_global_step = 48582 | reward = 1.0 | action = 0 | epsilon = 0.057376224959188434 | episode_reward = 382.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:03: [DQN[worker: 2]] | max_global_step = 49300 | reward = 1.0 | action = 1 | epsilon = 0.05686517811730764 | episode_reward = 165.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:03: [DQN[worker: 0]] | max_global_step = 49386 | reward = 1.0 | action = 0 | epsilon = 0.056806390733574644 | episode_reward = 358.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:03: [DQN[worker: 1]] | max_global_step = 49322 | reward = 1.0 | action = 1 | epsilon = 0.0568500913270039 | episode_reward = 371.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:03: [DQN[worker: 1]] | max_global_step = 49927 | reward = 1.0 | action = 0 | epsilon = 0.05644794828331579 | episode_reward = 356.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:03: [DQN[worker: 2]] | max_global_step = 49924 | reward = 1.0 | action = 0 | epsilon = 0.05644988295798748 | episode_reward = 184.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:03: ... trained! \u001b[0m\n", + "\u001b[38;21m[INFO] 16:03: Running AgentManager fit() for DQN-small-batch-size with n_fit = 3 and max_workers = None. \u001b[0m\n", + "\u001b[38;21m[INFO] 16:03: [DQN-small-batch-size[worker: 2]] | max_global_step = 896 | reward = 1.0 | action = 0 | epsilon = 0.918581989326102 | episode_reward = 9.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:03: [DQN-small-batch-size[worker: 0]] | max_global_step = 900 | reward = 1.0 | action = 1 | epsilon = 0.9183214538115854 | episode_reward = 25.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:03: [DQN-small-batch-size[worker: 1]] | max_global_step = 923 | reward = 1.0 | action = 1 | epsilon = 0.9162399810888118 | episode_reward = 10.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:03: [DQN-small-batch-size[worker: 2]] | max_global_step = 1799 | reward = 1.0 | action = 0 | epsilon = 0.8435860554784582 | episode_reward = 25.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:03: [DQN-small-batch-size[worker: 0]] | max_global_step = 1803 | reward = 1.0 | action = 1 | epsilon = 0.8432686845346873 | episode_reward = 13.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:03: [DQN-small-batch-size[worker: 1]] | max_global_step = 1822 | reward = 1.0 | action = 1 | epsilon = 0.8417629049776392 | episode_reward = 32.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:03: [DQN-small-batch-size[worker: 2]] | max_global_step = 2626 | reward = 1.0 | action = 1 | epsilon = 0.7805969827987554 | episode_reward = 18.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:03: [DQN-small-batch-size[worker: 0]] | max_global_step = 2624 | reward = 1.0 | action = 1 | epsilon = 0.780743116808229 | episode_reward = 58.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:03: [DQN-small-batch-size[worker: 1]] | max_global_step = 2658 | reward = 1.0 | action = 1 | epsilon = 0.7782628091235076 | episode_reward = 13.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:03: [DQN-small-batch-size[worker: 2]] | max_global_step = 3465 | reward = 1.0 | action = 1 | epsilon = 0.7218008783229077 | episode_reward = 15.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:03: [DQN-small-batch-size[worker: 0]] | max_global_step = 3453 | reward = 1.0 | action = 1 | epsilon = 0.7226075232670643 | episode_reward = 14.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:03: [DQN-small-batch-size[worker: 1]] | max_global_step = 3498 | reward = 1.0 | action = 0 | epsilon = 0.7195875893597907 | episode_reward = 22.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:03: [DQN-small-batch-size[worker: 2]] | max_global_step = 4350 | reward = 1.0 | action = 1 | epsilon = 0.6649014337241329 | episode_reward = 58.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:03: [DQN-small-batch-size[worker: 0]] | max_global_step = 4348 | reward = 1.0 | action = 1 | epsilon = 0.6650244263097262 | episode_reward = 35.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:03: [DQN-small-batch-size[worker: 1]] | max_global_step = 4387 | reward = 1.0 | action = 1 | epsilon = 0.6626917683468433 | episode_reward = 14.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:03: [DQN-small-batch-size[worker: 2]] | max_global_step = 5169 | reward = 1.0 | action = 0 | epsilon = 0.6166047578724597 | episode_reward = 48.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:03: [DQN-small-batch-size[worker: 0]] | max_global_step = 5159 | reward = 1.0 | action = 1 | epsilon = 0.6171149316983298 | episode_reward = 17.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:03: [DQN-small-batch-size[worker: 1]] | max_global_step = 5209 | reward = 1.0 | action = 1 | epsilon = 0.6142864341763439 | episode_reward = 23.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:03: [DQN-small-batch-size[worker: 2]] | max_global_step = 5965 | reward = 1.0 | action = 1 | epsilon = 0.5731990501059381 | episode_reward = 38.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:03: [DQN-small-batch-size[worker: 0]] | max_global_step = 5966 | reward = 1.0 | action = 1 | epsilon = 0.5731467328168356 | episode_reward = 34.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:03: [DQN-small-batch-size[worker: 1]] | max_global_step = 6019 | reward = 1.0 | action = 1 | epsilon = 0.5703813897651974 | episode_reward = 36.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:03: [DQN-small-batch-size[worker: 2]] | max_global_step = 6806 | reward = 1.0 | action = 0 | epsilon = 0.5309974576758437 | episode_reward = 32.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:03: [DQN-small-batch-size[worker: 0]] | max_global_step = 6801 | reward = 1.0 | action = 1 | epsilon = 0.5312380165393858 | episode_reward = 38.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:03: [DQN-small-batch-size[worker: 1]] | max_global_step = 6837 | reward = 1.0 | action = 0 | epsilon = 0.52950867436345 | episode_reward = 22.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:03: [DQN-small-batch-size[worker: 2]] | max_global_step = 7535 | reward = 1.0 | action = 1 | epsilon = 0.4971803516951027 | episode_reward = 100.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:03: [DQN-small-batch-size[worker: 0]] | max_global_step = 7532 | reward = 1.0 | action = 1 | epsilon = 0.49731452592573955 | episode_reward = 151.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:03: [DQN-small-batch-size[worker: 1]] | max_global_step = 7583 | reward = 1.0 | action = 1 | epsilon = 0.4950390292920709 | episode_reward = 129.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:03: [DQN-small-batch-size[worker: 2]] | max_global_step = 8374 | reward = 1.0 | action = 0 | epsilon = 0.46119270967516035 | episode_reward = 139.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:03: [DQN-small-batch-size[worker: 0]] | max_global_step = 8348 | reward = 1.0 | action = 1 | epsilon = 0.4622632017569783 | episode_reward = 161.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:03: [DQN-small-batch-size[worker: 1]] | max_global_step = 8407 | reward = 1.0 | action = 0 | epsilon = 0.45983801021672827 | episode_reward = 89.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:03: [DQN-small-batch-size[worker: 2]] | max_global_step = 9210 | reward = 1.0 | action = 1 | epsilon = 0.42821468517471956 | episode_reward = 163.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:03: [DQN-small-batch-size[worker: 0]] | max_global_step = 9180 | reward = 1.0 | action = 1 | epsilon = 0.4293510328995704 | episode_reward = 79.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:03: [DQN-small-batch-size[worker: 1]] | max_global_step = 9239 | reward = 1.0 | action = 0 | epsilon = 0.42711945144419833 | episode_reward = 35.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:04: [DQN-small-batch-size[worker: 2]] | max_global_step = 10044 | reward = 1.0 | action = 1 | epsilon = 0.39798590796273076 | episode_reward = 172.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:04: [DQN-small-batch-size[worker: 0]] | max_global_step = 9993 | reward = 1.0 | action = 0 | epsilon = 0.3997301945851715 | episode_reward = 152.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:04: [DQN-small-batch-size[worker: 1]] | max_global_step = 10084 | reward = 1.0 | action = 0 | epsilon = 0.3965620865684777 | episode_reward = 39.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:04: [DQN-small-batch-size[worker: 2]] | max_global_step = 10882 | reward = 1.0 | action = 1 | epsilon = 0.369981116973421 | episode_reward = 210.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:04: [DQN-small-batch-size[worker: 0]] | max_global_step = 10841 | reward = 1.0 | action = 1 | epsilon = 0.3712957326736405 | episode_reward = 238.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:04: [DQN-small-batch-size[worker: 1]] | max_global_step = 10936 | reward = 1.0 | action = 0 | epsilon = 0.36825787588019016 | episode_reward = 26.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:04: [DQN-small-batch-size[worker: 2]] | max_global_step = 11763 | reward = 1.0 | action = 1 | epsilon = 0.3430261882144891 | episode_reward = 129.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:04: [DQN-small-batch-size[worker: 0]] | max_global_step = 11707 | reward = 1.0 | action = 0 | epsilon = 0.34464227240732215 | episode_reward = 193.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:04: [DQN-small-batch-size[worker: 1]] | max_global_step = 11798 | reward = 1.0 | action = 1 | epsilon = 0.3419731904700941 | episode_reward = 43.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:04: [DQN-small-batch-size[worker: 2]] | max_global_step = 12534 | reward = 1.0 | action = 0 | epsilon = 0.32125571793971863 | episode_reward = 109.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:04: [DQN-small-batch-size[worker: 0]] | max_global_step = 12480 | reward = 1.0 | action = 0 | epsilon = 0.32272446085341655 | episode_reward = 285.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:04: [DQN-small-batch-size[worker: 1]] | max_global_step = 12572 | reward = 1.0 | action = 1 | epsilon = 0.32022690219946215 | episode_reward = 106.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:04: [DQN-small-batch-size[worker: 2]] | max_global_step = 13208 | reward = 1.0 | action = 1 | epsilon = 0.3035755952255441 | episode_reward = 192.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:04: [DQN-small-batch-size[worker: 0]] | max_global_step = 13147 | reward = 1.0 | action = 1 | epsilon = 0.305127133737823 | episode_reward = 455.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:04: [DQN-small-batch-size[worker: 1]] | max_global_step = 13241 | reward = 1.0 | action = 0 | epsilon = 0.302740174962877 | episode_reward = 254.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:04: [DQN-small-batch-size[worker: 2]] | max_global_step = 13818 | reward = 1.0 | action = 1 | epsilon = 0.28856981302822654 | episode_reward = 218.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:04: [DQN-small-batch-size[worker: 0]] | max_global_step = 13745 | reward = 1.0 | action = 1 | epsilon = 0.2903177448522231 | episode_reward = 299.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:04: [DQN-small-batch-size[worker: 1]] | max_global_step = 13844 | reward = 1.0 | action = 0 | epsilon = 0.28795033718192464 | episode_reward = 396.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:04: [DQN-small-batch-size[worker: 2]] | max_global_step = 14551 | reward = 1.0 | action = 0 | epsilon = 0.2717081737801379 | episode_reward = 243.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:04: [DQN-small-batch-size[worker: 0]] | max_global_step = 14479 | reward = 1.0 | action = 0 | epsilon = 0.2733102331241028 | episode_reward = 194.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:04: [DQN-small-batch-size[worker: 1]] | max_global_step = 14573 | reward = 1.0 | action = 0 | epsilon = 0.2712209519383604 | episode_reward = 190.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:04: [DQN-small-batch-size[worker: 2]] | max_global_step = 15274 | reward = 1.0 | action = 1 | epsilon = 0.2562444229474867 | episode_reward = 114.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:04: [DQN-small-batch-size[worker: 0]] | max_global_step = 15205 | reward = 1.0 | action = 0 | epsilon = 0.2576724304260102 | episode_reward = 242.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:04: [DQN-small-batch-size[worker: 1]] | max_global_step = 15306 | reward = 1.0 | action = 1 | epsilon = 0.2555854956400313 | episode_reward = 203.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:04: [DQN-small-batch-size[worker: 2]] | max_global_step = 16083 | reward = 1.0 | action = 0 | epsilon = 0.24021632641939789 | episode_reward = 299.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:04: [DQN-small-batch-size[worker: 0]] | max_global_step = 16014 | reward = 1.0 | action = 0 | epsilon = 0.24153335760396138 | episode_reward = 367.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:04: [DQN-small-batch-size[worker: 1]] | max_global_step = 16117 | reward = 1.0 | action = 0 | epsilon = 0.23957068911495333 | episode_reward = 234.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:04: [DQN-small-batch-size[worker: 2]] | max_global_step = 16888 | reward = 1.0 | action = 0 | epsilon = 0.2255040263125459 | episode_reward = 283.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:04: [DQN-small-batch-size[worker: 0]] | max_global_step = 16807 | reward = 1.0 | action = 0 | epsilon = 0.22693138191179624 | episode_reward = 272.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:04: [DQN-small-batch-size[worker: 1]] | max_global_step = 16923 | reward = 1.0 | action = 1 | epsilon = 0.22489083592958725 | episode_reward = 251.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:04: [DQN-small-batch-size[worker: 2]] | max_global_step = 17543 | reward = 1.0 | action = 1 | epsilon = 0.21437690374680712 | episode_reward = 241.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:04: [DQN-small-batch-size[worker: 0]] | max_global_step = 17456 | reward = 1.0 | action = 1 | epsilon = 0.21581322173308037 | episode_reward = 197.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:04: [DQN-small-batch-size[worker: 1]] | max_global_step = 17579 | reward = 1.0 | action = 0 | epsilon = 0.21378621077860965 | episode_reward = 246.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:04: [DQN-small-batch-size[worker: 2]] | max_global_step = 18196 | reward = 1.0 | action = 1 | epsilon = 0.2039860454881407 | episode_reward = 320.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:04: [DQN-small-batch-size[worker: 0]] | max_global_step = 18109 | reward = 1.0 | action = 1 | epsilon = 0.20533156862264618 | episode_reward = 148.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:04: [DQN-small-batch-size[worker: 1]] | max_global_step = 18232 | reward = 1.0 | action = 0 | epsilon = 0.20343269235763956 | episode_reward = 254.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:04: [DQN-small-batch-size[worker: 2]] | max_global_step = 19006 | reward = 1.0 | action = 1 | epsilon = 0.1920049597196658 | episode_reward = 216.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:04: [DQN-small-batch-size[worker: 0]] | max_global_step = 18919 | reward = 1.0 | action = 0 | epsilon = 0.1932457926659995 | episode_reward = 248.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:04: [DQN-small-batch-size[worker: 1]] | max_global_step = 19048 | reward = 1.0 | action = 0 | epsilon = 0.1914097896209503 | episode_reward = 146.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:04: [DQN-small-batch-size[worker: 2]] | max_global_step = 19827 | reward = 1.0 | action = 1 | epsilon = 0.18081210552089821 | episode_reward = 235.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:04: [DQN-small-batch-size[worker: 0]] | max_global_step = 19747 | reward = 1.0 | action = 0 | epsilon = 0.18186279953743612 | episode_reward = 182.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:04: [DQN-small-batch-size[worker: 1]] | max_global_step = 19869 | reward = 1.0 | action = 1 | epsilon = 0.18026384682690783 | episode_reward = 187.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:04: [DQN-small-batch-size[worker: 2]] | max_global_step = 20636 | reward = 1.0 | action = 0 | epsilon = 0.1706461624889969 | episode_reward = 313.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:04: [DQN-small-batch-size[worker: 0]] | max_global_step = 20568 | reward = 1.0 | action = 0 | epsilon = 0.17146935206646408 | episode_reward = 151.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:04: [DQN-small-batch-size[worker: 1]] | max_global_step = 20670 | reward = 1.0 | action = 0 | epsilon = 0.17023666208171198 | episode_reward = 174.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:04: [DQN-small-batch-size[worker: 2]] | max_global_step = 21494 | reward = 1.0 | action = 1 | epsilon = 0.16072636577752833 | episode_reward = 295.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:04: [DQN-small-batch-size[worker: 0]] | max_global_step = 21428 | reward = 1.0 | action = 1 | epsilon = 0.16145957672623695 | episode_reward = 223.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:04: [DQN-small-batch-size[worker: 1]] | max_global_step = 21517 | reward = 1.0 | action = 0 | epsilon = 0.16047198778307195 | episode_reward = 214.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:04: [DQN-small-batch-size[worker: 2]] | max_global_step = 22349 | reward = 1.0 | action = 0 | epsilon = 0.15165268812102434 | episode_reward = 286.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:04: [DQN-small-batch-size[worker: 0]] | max_global_step = 22289 | reward = 1.0 | action = 0 | epsilon = 0.1522644376631293 | episode_reward = 282.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:04: [DQN-small-batch-size[worker: 1]] | max_global_step = 22383 | reward = 1.0 | action = 0 | epsilon = 0.15130765586862294 | episode_reward = 325.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:04: [DQN-small-batch-size[worker: 2]] | max_global_step = 23222 | reward = 1.0 | action = 0 | epsilon = 0.143154740295612 | episode_reward = 348.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:04: [DQN-small-batch-size[worker: 0]] | max_global_step = 23178 | reward = 1.0 | action = 0 | epsilon = 0.14356552421480373 | episode_reward = 500.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:04: [DQN-small-batch-size[worker: 1]] | max_global_step = 23257 | reward = 1.0 | action = 1 | epsilon = 0.1428292686122755 | episode_reward = 171.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:04: [DQN-small-batch-size[worker: 2]] | max_global_step = 24093 | reward = 1.0 | action = 0 | epsilon = 0.13538427792391416 | episode_reward = 253.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:04: [DQN-small-batch-size[worker: 0]] | max_global_step = 24055 | reward = 1.0 | action = 1 | epsilon = 0.13570935543612175 | episode_reward = 206.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:04: [DQN-small-batch-size[worker: 1]] | max_global_step = 24130 | reward = 1.0 | action = 0 | epsilon = 0.13506893983081608 | episode_reward = 202.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:04: [DQN-small-batch-size[worker: 2]] | max_global_step = 24959 | reward = 1.0 | action = 0 | epsilon = 0.1283011260872075 | episode_reward = 331.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:04: [DQN-small-batch-size[worker: 0]] | max_global_step = 24915 | reward = 1.0 | action = 0 | epsilon = 0.1286464101097828 | episode_reward = 179.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:04: [DQN-small-batch-size[worker: 1]] | max_global_step = 24980 | reward = 1.0 | action = 1 | epsilon = 0.128136866255613 | episode_reward = 169.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:05: [DQN-small-batch-size[worker: 2]] | max_global_step = 25841 | reward = 1.0 | action = 0 | epsilon = 0.12169793772177095 | episode_reward = 295.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:05: [DQN-small-batch-size[worker: 0]] | max_global_step = 25798 | reward = 1.0 | action = 0 | epsilon = 0.1219997023222696 | episode_reward = 354.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:05: [DQN-small-batch-size[worker: 1]] | max_global_step = 25854 | reward = 1.0 | action = 1 | epsilon = 0.12159763084016106 | episode_reward = 128.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:05: [DQN-small-batch-size[worker: 2]] | max_global_step = 26701 | reward = 1.0 | action = 0 | epsilon = 0.11578961404387869 | episode_reward = 500.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:05: [DQN-small-batch-size[worker: 0]] | max_global_step = 26644 | reward = 1.0 | action = 1 | epsilon = 0.11615906939198964 | episode_reward = 239.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:05: [DQN-small-batch-size[worker: 1]] | max_global_step = 26727 | reward = 1.0 | action = 1 | epsilon = 0.11561222167342619 | episode_reward = 255.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:05: [DQN-small-batch-size[worker: 2]] | max_global_step = 27564 | reward = 1.0 | action = 1 | epsilon = 0.11034402788154471 | episode_reward = 348.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:05: [DQN-small-batch-size[worker: 0]] | max_global_step = 27516 | reward = 1.0 | action = 1 | epsilon = 0.11064043923290565 | episode_reward = 214.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:05: [DQN-small-batch-size[worker: 1]] | max_global_step = 27583 | reward = 1.0 | action = 0 | epsilon = 0.11022948308058958 | episode_reward = 86.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:05: [DQN-small-batch-size[worker: 2]] | max_global_step = 28414 | reward = 1.0 | action = 1 | epsilon = 0.10542673089946288 | episode_reward = 257.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:05: [DQN-small-batch-size[worker: 0]] | max_global_step = 28379 | reward = 1.0 | action = 1 | epsilon = 0.10562106434275476 | episode_reward = 256.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:05: [DQN-small-batch-size[worker: 1]] | max_global_step = 28434 | reward = 1.0 | action = 0 | epsilon = 0.10532152009267126 | episode_reward = 123.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:05: [DQN-small-batch-size[worker: 2]] | max_global_step = 29261 | reward = 1.0 | action = 1 | epsilon = 0.10092540854652021 | episode_reward = 270.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:05: [DQN-small-batch-size[worker: 0]] | max_global_step = 29213 | reward = 1.0 | action = 1 | epsilon = 0.10117043810803457 | episode_reward = 352.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:05: [DQN-small-batch-size[worker: 1]] | max_global_step = 29264 | reward = 1.0 | action = 1 | epsilon = 0.10091013321537048 | episode_reward = 187.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:05: [DQN-small-batch-size[worker: 2]] | max_global_step = 30062 | reward = 1.0 | action = 1 | epsilon = 0.0970100770757105 | episode_reward = 10.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:05: [DQN-small-batch-size[worker: 0]] | max_global_step = 30024 | reward = 1.0 | action = 0 | epsilon = 0.09718433654210248 | episode_reward = 172.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:05: [DQN-small-batch-size[worker: 1]] | max_global_step = 30067 | reward = 1.0 | action = 1 | epsilon = 0.09698187948958684 | episode_reward = 319.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:05: [DQN-small-batch-size[worker: 2]] | max_global_step = 30939 | reward = 1.0 | action = 1 | epsilon = 0.09305860025662048 | episode_reward = 10.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:05: [DQN-small-batch-size[worker: 0]] | max_global_step = 30908 | reward = 1.0 | action = 0 | epsilon = 0.09319228902794915 | episode_reward = 500.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:05: [DQN-small-batch-size[worker: 1]] | max_global_step = 30952 | reward = 1.0 | action = 1 | epsilon = 0.09300266044504259 | episode_reward = 320.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:05: [DQN-small-batch-size[worker: 2]] | max_global_step = 31700 | reward = 1.0 | action = 1 | epsilon = 0.08990341800827328 | episode_reward = 48.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:05: [DQN-small-batch-size[worker: 0]] | max_global_step = 31667 | reward = 1.0 | action = 1 | epsilon = 0.09003531680101046 | episode_reward = 421.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:05: [DQN-small-batch-size[worker: 1]] | max_global_step = 31707 | reward = 1.0 | action = 1 | epsilon = 0.08987549538972414 | episode_reward = 500.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:05: [DQN-small-batch-size[worker: 2]] | max_global_step = 32434 | reward = 1.0 | action = 1 | epsilon = 0.08708312389528094 | episode_reward = 150.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:05: [DQN-small-batch-size[worker: 0]] | max_global_step = 32394 | reward = 1.0 | action = 0 | epsilon = 0.08722803046260982 | episode_reward = 173.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:05: [DQN-small-batch-size[worker: 1]] | max_global_step = 32439 | reward = 1.0 | action = 0 | epsilon = 0.0870608806945713 | episode_reward = 500.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:05: [DQN-small-batch-size[worker: 2]] | max_global_step = 33218 | reward = 1.0 | action = 1 | epsilon = 0.08428342442988423 | episode_reward = 78.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:05: [DQN-small-batch-size[worker: 0]] | max_global_step = 33180 | reward = 1.0 | action = 1 | epsilon = 0.08441394928287362 | episode_reward = 173.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:05: [DQN-small-batch-size[worker: 1]] | max_global_step = 33226 | reward = 1.0 | action = 1 | epsilon = 0.08425600865811123 | episode_reward = 500.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:05: [DQN-small-batch-size[worker: 2]] | max_global_step = 34033 | reward = 1.0 | action = 0 | epsilon = 0.08160015370282815 | episode_reward = 162.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:05: [DQN-small-batch-size[worker: 0]] | max_global_step = 33990 | reward = 1.0 | action = 0 | epsilon = 0.08173632692636074 | episode_reward = 345.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:05: [DQN-small-batch-size[worker: 1]] | max_global_step = 34049 | reward = 1.0 | action = 0 | epsilon = 0.08154963388353663 | episode_reward = 500.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:05: [DQN-small-batch-size[worker: 2]] | max_global_step = 34859 | reward = 1.0 | action = 1 | epsilon = 0.07909487333478453 | episode_reward = 140.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:05: [DQN-small-batch-size[worker: 0]] | max_global_step = 34807 | reward = 1.0 | action = 0 | epsilon = 0.07924656072152886 | episode_reward = 84.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:05: [DQN-small-batch-size[worker: 1]] | max_global_step = 34875 | reward = 1.0 | action = 0 | epsilon = 0.0790483587590326 | episode_reward = 500.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:05: [DQN-small-batch-size[worker: 2]] | max_global_step = 35655 | reward = 1.0 | action = 0 | epsilon = 0.07686869850157957 | episode_reward = 244.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:05: [DQN-small-batch-size[worker: 0]] | max_global_step = 35608 | reward = 1.0 | action = 0 | epsilon = 0.0769979782776326 | episode_reward = 102.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:05: [DQN-small-batch-size[worker: 1]] | max_global_step = 35668 | reward = 1.0 | action = 1 | epsilon = 0.07683379188774253 | episode_reward = 500.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:05: [DQN-small-batch-size[worker: 2]] | max_global_step = 36491 | reward = 1.0 | action = 0 | epsilon = 0.07471380475801093 | episode_reward = 214.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:05: [DQN-small-batch-size[worker: 0]] | max_global_step = 36436 | reward = 1.0 | action = 1 | epsilon = 0.07485010516671346 | episode_reward = 146.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:05: [DQN-small-batch-size[worker: 1]] | max_global_step = 36484 | reward = 1.0 | action = 0 | epsilon = 0.07473111047763674 | episode_reward = 500.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:05: [DQN-small-batch-size[worker: 2]] | max_global_step = 37286 | reward = 1.0 | action = 1 | epsilon = 0.07282512686429443 | episode_reward = 460.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:05: [DQN-small-batch-size[worker: 0]] | max_global_step = 37218 | reward = 1.0 | action = 1 | epsilon = 0.07298086664209937 | episode_reward = 199.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:05: [DQN-small-batch-size[worker: 1]] | max_global_step = 37260 | reward = 1.0 | action = 1 | epsilon = 0.0728845494099763 | episode_reward = 500.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:05: [DQN-small-batch-size[worker: 2]] | max_global_step = 38071 | reward = 1.0 | action = 1 | epsilon = 0.07110187680423924 | episode_reward = 378.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:05: [DQN-small-batch-size[worker: 0]] | max_global_step = 38003 | reward = 1.0 | action = 1 | epsilon = 0.07124585854963318 | episode_reward = 79.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:05: [DQN-small-batch-size[worker: 1]] | max_global_step = 38039 | reward = 1.0 | action = 0 | epsilon = 0.07116951096695869 | episode_reward = 500.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:05: [DQN-small-batch-size[worker: 2]] | max_global_step = 38819 | reward = 1.0 | action = 1 | epsilon = 0.0695810445717601 | episode_reward = 175.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:05: [DQN-small-batch-size[worker: 0]] | max_global_step = 38749 | reward = 1.0 | action = 0 | epsilon = 0.06971859274069915 | episode_reward = 193.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:05: [DQN-small-batch-size[worker: 1]] | max_global_step = 38788 | reward = 1.0 | action = 0 | epsilon = 0.06964183999415027 | episode_reward = 500.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:05: [DQN-small-batch-size[worker: 2]] | max_global_step = 39549 | reward = 1.0 | action = 0 | epsilon = 0.06820255528668023 | episode_reward = 176.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:05: [DQN-small-batch-size[worker: 0]] | max_global_step = 39484 | reward = 1.0 | action = 1 | epsilon = 0.06832125725952584 | episode_reward = 242.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:05: [DQN-small-batch-size[worker: 1]] | max_global_step = 39517 | reward = 1.0 | action = 1 | epsilon = 0.06826089676017048 | episode_reward = 500.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:05: [DQN-small-batch-size[worker: 2]] | max_global_step = 40306 | reward = 1.0 | action = 0 | epsilon = 0.06687548512670552 | episode_reward = 217.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:05: [DQN-small-batch-size[worker: 0]] | max_global_step = 40258 | reward = 1.0 | action = 1 | epsilon = 0.06695668217232492 | episode_reward = 9.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:05: [DQN-small-batch-size[worker: 1]] | max_global_step = 40283 | reward = 1.0 | action = 0 | epsilon = 0.06691603493131124 | episode_reward = 500.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:05: [DQN-small-batch-size[worker: 2]] | max_global_step = 41084 | reward = 1.0 | action = 0 | epsilon = 0.06561234557975706 | episode_reward = 132.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:05: [DQN-small-batch-size[worker: 0]] | max_global_step = 41045 | reward = 1.0 | action = 1 | epsilon = 0.0656733526139083 | episode_reward = 8.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:05: [DQN-small-batch-size[worker: 1]] | max_global_step = 41057 | reward = 1.0 | action = 0 | epsilon = 0.06565455587107294 | episode_reward = 500.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:06: [DQN-small-batch-size[worker: 2]] | max_global_step = 41889 | reward = 1.0 | action = 0 | epsilon = 0.06440480720560703 | episode_reward = 268.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:06: [DQN-small-batch-size[worker: 0]] | max_global_step = 41830 | reward = 1.0 | action = 0 | epsilon = 0.06449004677759182 | episode_reward = 63.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:06: [DQN-small-batch-size[worker: 1]] | max_global_step = 41873 | reward = 1.0 | action = 1 | epsilon = 0.06442931620460313 | episode_reward = 500.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:06: [DQN-small-batch-size[worker: 2]] | max_global_step = 42683 | reward = 1.0 | action = 1 | epsilon = 0.06330662437574446 | episode_reward = 220.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:06: [DQN-small-batch-size[worker: 0]] | max_global_step = 42624 | reward = 1.0 | action = 0 | epsilon = 0.06338402704788762 | episode_reward = 87.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:06: [DQN-small-batch-size[worker: 1]] | max_global_step = 42655 | reward = 1.0 | action = 1 | epsilon = 0.06334260080788667 | episode_reward = 500.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:06: [DQN-small-batch-size[worker: 2]] | max_global_step = 43524 | reward = 1.0 | action = 0 | epsilon = 0.06223207970357811 | episode_reward = 273.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:06: [DQN-small-batch-size[worker: 0]] | max_global_step = 43438 | reward = 1.0 | action = 0 | epsilon = 0.06233772923084368 | episode_reward = 149.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:06: [DQN-small-batch-size[worker: 1]] | max_global_step = 43476 | reward = 1.0 | action = 1 | epsilon = 0.06229093482544598 | episode_reward = 500.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:06: [DQN-small-batch-size[worker: 2]] | max_global_step = 44279 | reward = 1.0 | action = 1 | epsilon = 0.06134255957140431 | episode_reward = 174.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:06: [DQN-small-batch-size[worker: 0]] | max_global_step = 44194 | reward = 1.0 | action = 1 | epsilon = 0.06143938224115523 | episode_reward = 112.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:06: [DQN-small-batch-size[worker: 1]] | max_global_step = 44232 | reward = 1.0 | action = 1 | epsilon = 0.06139599507646097 | episode_reward = 500.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:06: [DQN-small-batch-size[worker: 2]] | max_global_step = 45029 | reward = 1.0 | action = 1 | epsilon = 0.06052298576066393 | episode_reward = 215.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:06: [DQN-small-batch-size[worker: 0]] | max_global_step = 44949 | reward = 1.0 | action = 1 | epsilon = 0.06060750728205383 | episode_reward = 268.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:06: [DQN-small-batch-size[worker: 1]] | max_global_step = 44993 | reward = 1.0 | action = 0 | epsilon = 0.060560936780250485 | episode_reward = 500.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:06: [DQN-small-batch-size[worker: 2]] | max_global_step = 45787 | reward = 1.0 | action = 0 | epsilon = 0.059754824514196295 | episode_reward = 279.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:06: [DQN-small-batch-size[worker: 0]] | max_global_step = 45715 | reward = 1.0 | action = 0 | epsilon = 0.059825312703671904 | episode_reward = 122.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:06: [DQN-small-batch-size[worker: 1]] | max_global_step = 45754 | reward = 1.0 | action = 0 | epsilon = 0.059787068608587374 | episode_reward = 500.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:06: [DQN-small-batch-size[worker: 2]] | max_global_step = 46511 | reward = 1.0 | action = 1 | epsilon = 0.05907353545351516 | episode_reward = 221.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:06: [DQN-small-batch-size[worker: 0]] | max_global_step = 46427 | reward = 1.0 | action = 1 | epsilon = 0.05915007416386105 | episode_reward = 127.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:06: [DQN-small-batch-size[worker: 1]] | max_global_step = 46464 | reward = 1.0 | action = 0 | epsilon = 0.05911628144453736 | episode_reward = 500.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:06: [DQN-small-batch-size[worker: 2]] | max_global_step = 47297 | reward = 1.0 | action = 0 | epsilon = 0.05838766340935608 | episode_reward = 211.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:06: [DQN-small-batch-size[worker: 0]] | max_global_step = 47211 | reward = 1.0 | action = 0 | epsilon = 0.05846010838155505 | episode_reward = 124.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:06: [DQN-small-batch-size[worker: 1]] | max_global_step = 47264 | reward = 1.0 | action = 1 | epsilon = 0.05841538841971361 | episode_reward = 500.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:06: [DQN-small-batch-size[worker: 2]] | max_global_step = 48094 | reward = 1.0 | action = 0 | epsilon = 0.05774588693635186 | episode_reward = 210.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:06: [DQN-small-batch-size[worker: 0]] | max_global_step = 47993 | reward = 1.0 | action = 1 | epsilon = 0.05782373439427728 | episode_reward = 168.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:06: [DQN-small-batch-size[worker: 1]] | max_global_step = 48055 | reward = 1.0 | action = 1 | epsilon = 0.057776154879528224 | episode_reward = 500.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:06: [DQN-small-batch-size[worker: 2]] | max_global_step = 48850 | reward = 1.0 | action = 1 | epsilon = 0.05718116757393946 | episode_reward = 155.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:06: [DQN-small-batch-size[worker: 0]] | max_global_step = 48742 | reward = 1.0 | action = 0 | epsilon = 0.05725987045195807 | episode_reward = 140.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:06: [DQN-small-batch-size[worker: 1]] | max_global_step = 48792 | reward = 1.0 | action = 1 | epsilon = 0.0572229393669679 | episode_reward = 488.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:06: [DQN-small-batch-size[worker: 2]] | max_global_step = 49627 | reward = 1.0 | action = 1 | epsilon = 0.056644317543240556 | episode_reward = 255.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:06: [DQN-small-batch-size[worker: 0]] | max_global_step = 49524 | reward = 1.0 | action = 1 | epsilon = 0.05671310767495324 | episode_reward = 166.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:06: [DQN-small-batch-size[worker: 1]] | max_global_step = 49575 | reward = 1.0 | action = 1 | epsilon = 0.056678957981548594 | episode_reward = 500.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:06: [DQN-small-batch-size[worker: 0]] | max_global_step = 49886 | reward = 1.0 | action = 0 | epsilon = 0.0564744391404252 | episode_reward = 174.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:06: [DQN-small-batch-size[worker: 1]] | max_global_step = 49935 | reward = 1.0 | action = 1 | epsilon = 0.05644279198748248 | episode_reward = 500.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:06: [DQN-small-batch-size[worker: 0]] | max_global_step = 49954 | reward = 1.0 | action = 1 | epsilon = 0.05643056230458411 | episode_reward = 174.0 | \u001b[0m\n", + "\u001b[38;21m[INFO] 16:06: ... trained! \u001b[0m\n" + ] + } + ], + "source": [ + "for manager in agent_managers:\n", + " manager.fit() " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 7. Evaluate the DQN agents on 10 episodes. Plot the mean episodic rewards." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this [paper](https://arxiv.org/pdf/2310.03882.pdf), authors claim that a small batch size increases DQN performances." + ] + }, + { + "cell_type": "code", + "execution_count": 260, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\u001b[38;21m[INFO] 16:06: Evaluating DQN... \u001b[0m\n", + "[INFO] Evaluation:.......... Evaluation finished \n", + "\u001b[38;21m[INFO] 16:06: Evaluating DQN-small-batch-size... \u001b[0m\n", + "[INFO] Evaluation:.......... Evaluation finished \n" + ] + }, + { + "data": { + "image/png": "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5UoVFBRo9OjRtvUWi0UjR45URUWF0tPTlZKSonXr1mn+/Pmu2CUAAOBm6rjymy9btsxuOSUlRVFRUdq/f7+6d++u06dPa+3atUpNTVVUVJSks+Hn/vvvV2ZmpiIiIpSRkaHc3FwtX75cgYGB6tixo8aMGaPU1FSNHj1aXl5e1a7HYrE4df8AAFfP+cdwi8XCMf06UN1/Y5eGnV86ffq0JCkgIECStG/fPlVUVCg6OtrWp127dmrWrJkt7GRmZio0NFSBgYG2PjExMUpKSlJubq46depU7e+fnZ3tpD0BAFxtZWVlttdZWVny9vZ2YTVwJ24TdqqqqjRnzhzddNNNCg0NlSQVFRXJ09NT9erVs+vbsGFDFRYW2vqcH3Qk2ZbP9amu8PBwmc3mmu4CAMCFSktLba+7dOkiX19fF1aDq8FisVRroMJtws706dP15Zdf6s0333RZDWazmbADANeo84/fHM9xPre49HzGjBn6+OOP9cYbb6hJkya29sDAQFVUVOjUqVN2/YuLixUUFGTr88urs84tn+sDAACuXy4NO1arVTNmzND777+vN954Qy1atLBb37lzZ3l6emrHjh22tsOHDys/P18RERGSpIiICB06dEjFxcW2Ptu3b5efn59CQkKuyn4AAAD35dLTWNOnT9e7776rV155RTfccINtjo2/v798fHzk7++vAQMGKCUlRQEBAfLz89OsWbMUGRlpCzsxMTEKCQnRxIkTNWHCBBUWFiotLU1xcXEOXYkFAACMyaVh56233pIkDR482K49OTlZ/fv3lyRNmTJFHh4eSkhIUHl5uWJiYvTCCy/Y+prNZi1ZskRJSUkaNGiQfH191a9fPyUkJFy9HQEAAG7LZLVara4uwtUsFovtUnYmtAHAtam0tFT33XefJGnLli1cjXUdqO7nt1tMUAYAAKgthB0AAGBohB1cd7Zv365BgwZp+/btri4FAHAVEHZwXTlz5oxSUlL0/fffKyUlRWfOnHF1SQCAWkbYwXXljTfesN2k8tSpU1qxYoWLKwIA1DbCDq4bx44dU3p6ul1benq6jh075qKKAABXA2EH1wWr1aq5c+fql3daqKqqumg7AMA4CDu4Lhw9evSST8bNzs7W0aNHr3JFAICrhbADAAAMjbCD60KrVq0UHh5+0XVdunRRq1atrnJFAICrhbCD64LJZFJiYqJM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yclRkyZNbEHnYnx9fW1BR5IaNWpk29/du3dr+PDhtnXTp0/XAw88oKioKPXt21cxMTGKiYlR7969FRAQ8Ku1TJkyRT///LNee+0128jSgQMHdPDgQW3cuNHWz2q1qqqqSseOHbtkIDYiwg4M6auvvlLz5s3VunVr2/JNN910Qb/Dhw9f8kCakJCg3r17u+SSVcBRtfk737NnT3Xt2tW23LhxY/n4+GjdunXauXOnMjIyNH/+fC1cuFBr1qyxTaCtU8f+I8ZkMtm1nQtn54LZpk2bNHfuXCUmJioyMlI33HCDli1bps8//7xaP4OHH35Y9913n225UaNG1Xrf3r17NX78eD399NOKiYmRv7+/Nm3apOXLl//q+3x8fC677Yv9DM7tb+fOnbV+/XrbuoYNG8psNmv58uXas2ePPvnkE61cuVIvv/yy3n777QtGjc555ZVXlJGRoXfeeccuoJWUlOjhhx+2m8NzTtOmTS9bu5EwZweGs2PHDh06dEi9evVSTEyM6tevf9GD1ocffqivv/5a/fv3v+h2mjZtqri4OL300kuqqqqq7bKBGqvt33k/Pz+1atXK9nXuQ75OnTqKjo7WxIkTtWHDBn377bf6z3/+U+P92LNnjyIjIxUXF6dOnTqpVatWysvLq/b769evb1fn+UEjMzPTru/nn39uG9nYu3evmjVrpqeeekrh4eFq3bq18vPz7fp7enpecBwICwvTd999Zzt16CgfHx+7es8FFZPJpJtvvlkJCQlav369PD09L/k/Xe+9955eeeUVpaWl2Y0gSVKnTp2Um5tr9z3OfXl5edWo5msVYQfXtPLychUWFur777/X/v37tWTJEsXHx+vOO+/UQw89pLp162r69On68MMP9dxzz+nAgQM6duyY3nnnHU2ePFkDBw5UbGzsJbc/cuRIFRQUaPv27Vdxr4BLc5ff+Y8++kgrVqxQTk6Ovv32W61fv15VVVW/ekrnclq1aqV9+/Zp27ZtOnLkiNLS0pSdnV3j7Z1v69atWrNmjY4cOaL58+crKytLjz32mO37Hj9+XJs2bVJeXp5WrFhxQbgIDg7WsWPHlJOToxMnTqi8vFy33HKLunXrpoSEBH3yySf65ptv9K9//Uv//ve/a1zn559/riVLlig7O1v5+fn6xz/+oRMnTqht27YX9D106JASExP15JNPKiQkRIWFhSosLNTJkyclScOHD9fevXs1Y8YM5eTk6Ouvv9YHH3ygGTNm1Li+axWnsXBN27Ztm2JiYlSnTh3Vq1dPHTp00LRp09SvXz/beet7771XgYGBWrx4seLi4vTTTz9JksaPH293vvxi6tevr+HDh+ull16q9X0BqsNdfuf9/f31/vvva+HChSorK1OrVq00b948tW/fvsb79vDDDysnJ0fPPvusTCaTHnjgAT366KNXFB7Oefrpp7V582ZNnz5dQUFBmjdvnkJCQiRJd911lx5//HHNmDFD5eXluuOOO/TUU09p4cKFtvf37t1b77//voYMGaJTp04pOTlZ/fv314IFCzR37lyNHTtWpaWlatWqlcaNG1fjOv38/LRr1y698cYb+umnn9SsWTNNmjTpogF13759Ki0t1eLFi7V48WJb+y233KKVK1eqQ4cOWrlypdLS0vToo49KOjuB+kone1+LTFZuxYjrTFlZmeLj43X8+HGtWrVKDRo0cHVJQK3idx7XO8IOrktlZWV644031KpVK/Xu3dvV5QC1jt95XM8IOwAAwNCYoAwAAAyNsAMAAAyNsAMAAAyNsAMAAAyNsAMAAAyNsAMAAAyNsAMAvyIsLIyHwQLXOMIOAAAwNMIOALf073//W4888oi6deumW2+9VSNHjrR7AvaePXv04IMPKjw8XP3799cHH3ygsLAw5eTk2PocOnRITz75pCIjIxUdHa0JEyboxIkTtvWDBw/WrFmz9Mc//lG33HKLbr/9di1YsMC2vmfPnpKkUaNGKSwszLYM4NpC2AHglkpLS/X73/9ea9eu1euvvy6TyaRRo0apqqpKP/30k5566imFhoZq3bp1GjNmjF588UW79586dUqPP/64OnXqpDVr1ugvf/mLiouL9cwzz9j1W7dunerWrau3335bEyZM0KJFi/TJJ59IktasWSNJSk5OVkZGhm0ZwLWFp54DcEu/fH7TnDlzFBUVpdzcXH322WeSpFmzZsnb21shISEqKCjQtGnTbP1XrVqlTp06aezYsXbbiI2N1ZEjR9SmTRtJZ+fkjB49WpLUunVrrVq1Sjt27NDtt99ue2BmvXr1FBQUVKv7C6D2EHYAuKWvv/5a8+fP1+eff64ffvhB5x7jd/z4cR05ckRhYWHy9va29Q8PD7d7/4EDB/Tpp58qMjLygm3n5eXZhZ3zBQUFqbi42Nm7A8CFCDsA3NIf/vAHBQcHa9asWWrUqJGqqqrUp08fVVRUVOv9JSUluvPOOzV+/PgL1p0/SlOnjv1h0GQyiecjA8ZC2AHgdn744QcdOXJEs2bNUrdu3SRJu3fvtq1v06aNNmzYoPLycnl5eUmSsrOz7bbxm9/8Ru+9956Cg4MvCDSO8PT0lMViqfH7AbgeE5QBuJ2AgADVr19ff/3rX3X06FHt2LFDKSkptvV9+/aV1WrVc889p6+++krbtm3Ta6+9JunsyIwkPfroo/rxxx81duxYZWVlKS8vT9u2bdPkyZMdCi/BwcHasWOHCgsL9eOPPzp3RwFcFYQdAG7Hw8NDL7/8svbv368+ffooOTlZEydOtK338/PT4sWLlZOTowcffFAvv/yyRo0aJUm2kZ7GjRvrrbfeUlVVlYYNG6a+fftqzpw58vf3l4dH9Q99iYmJ2r59u+644w7169fPuTsK4KowWTk5DcAANmzYoClTpmj37t3y8fFxdTkA3AhzdgBck9avX6/mzZurcePGOnjwoFJTU3XvvfcSdABcgLAD4JpUWFio+fPnq7CwUEFBQbr33nv17LPPurosAG6I01gAAMDQmKAMAAAMjbADAAAMjbADAAAMjbADAAAMjbADAAAMjbADAAAMjbADAAAMjbADAAAM7f8B9r3dPnhR2z8AAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "output = evaluate_agents(agent_managers, n_simulations=10, plot=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 8. Plot the episodic rewards during learning." + ] + }, + { + "cell_type": "code", + "execution_count": 261, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjwAAAHHCAYAAAC7soLdAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOxdd5zURP9+suUq3NGbVClSBLGDihVFBbGgr/pTEbu+YOO1YUUsiArYkNeCYC8gymtBQaVIlSJF6UoT7uh3x91xZTf5/ZFNNjOZSSbZ7N1y5PGDt5udzEzazDfP9/l+R1IURYEPHz58+PDhw0cNRqC6O+DDhw8fPnz48JFs+AaPDx8+fPjw4aPGwzd4fPjw4cOHDx81Hr7B48OHDx8+fPio8fANHh8+fPjw4cNHjYdv8Pjw4cOHDx8+ajx8g8eHDx8+fPjwUePhGzw+fPjw4cOHjxoP3+Dx4cOHDx8+fNR4+AaPDx8+UgatW7fGoEGDqrsbNRaDBg1C69atq7sbPnxUC3yDx4ePGoZJkyZBkiQsXbq0urtyWEGSJOJfTk4OzjrrLHz33XfV3TUfPnx4gFB1d8CHDx8+NKxfvx6BQPW9h51//vkYOHAgFEXB1q1bMX78eFxyySWYPn06+vTpU2398uHDR+LwDR4fPnwkBZFIBLIsIy0tTXif9PT0JPbIHh06dMD111+vfx8wYAA6d+6MV1999bAweMrKypCWllatRqMPH6kK/6nw4eMIxY4dO3DzzTejcePGSE9PR5cuXfDee+8RZSoqKvDkk0/ixBNPRG5uLrKzs9GrVy/MmjWLKLdlyxZIkoSXX34Zr7zyCtq2bYv09HSsWbMGw4cPhyRJ2LRpEwYNGoQ6deogNzcXN910E0pLS4l6aA2P5p6bP38+hg4dioYNGyI7OxuXX3459uzZQ+wryzKGDx+OZs2aISsrC+eccw7WrFmTkC6oU6dOaNCgAf766y9ie3l5OZ566im0a9cO6enpaNGiBR566CGUl5frZa644gqccMIJxH6XXHIJJEnC//73P33b4sWLIUkSpk+fDgDYv38/HnjgAXTt2hW1atVCTk4OLrroIqxcuZKoa/bs2ZAkCZ999hkef/xxHHXUUcjKykJRUREA4Ouvv8axxx6LjIwMHHvssfjqq69cnQMfPmoKfIbHh48jELt27UKPHj0gSRKGDBmChg0bYvr06bjllltQVFSE++67DwBQVFSEd999F9deey1uu+02HDx4EBMmTECfPn3w22+/oXv37kS9EydORFlZGW6//Xakp6ejXr16+m//+te/0KZNG4wcORLLly/Hu+++i0aNGmHUqFG2/b377rtRt25dPPXUU9iyZQteeeUVDBkyBJ9//rleZtiwYXjxxRdxySWXoE+fPli5ciX69OmDsrIy1+epsLAQBw4cQNu2bfVtsiyjf//+mDdvHm6//XZ06tQJq1evxtixY7FhwwZ8/fXXAIBevXph2rRpKCoqQk5ODhRFwfz58xEIBPDrr7+if//+AIBff/0VgUAAp59+OgDg77//xtdff42rrroKbdq0wa5du/DWW2/hrLPOwpo1a9CsWTOij8888wzS0tLwwAMPoLy8HGlpaZgxY4bOTo0cORL79u3DTTfdhObNm7s+Fz58HPZQfPjwUaMwceJEBYCyZMkSbplbbrlFadq0qbJ3715i+zXXXKPk5uYqpaWliqIoSiQSUcrLy4kyBw4cUBo3bqzcfPPN+rbNmzcrAJScnBxl9+7dRPmnnnpKAUCUVxRFufzyy5X69esT21q1aqXceOONpmPp3bu3Isuyvv3+++9XgsGgUlBQoCiKouTn5yuhUEi57LLLiPqGDx+uACDq5AGAcssttyh79uxRdu/erSxdulS58MILFQDKSy+9pJf78MMPlUAgoPz666/E/v/9738VAMr8+fMVRVGUJUuWKACU77//XlEURVm1apUCQLnqqquUU089Vd+vf//+yvHHH69/LysrU6LRKFH35s2blfT0dGXEiBH6tlmzZikAlKOPPlq/Xhq6d++uNG3aVD8/iqIoM2bMUAAorVq1sj0XPnzURPguLR8+jjAoioIvv/wSl1xyCRRFwd69e/V/ffr0QWFhIZYvXw4ACAaDugZHlmXs378fkUgEJ510kl7GiAEDBqBhw4bMdu+8807ie69evbBv3z7dBWOF22+/HZIkEftGo1Fs3boVAPDzzz8jEong3//+N7Hf3XffbVu3ERMmTEDDhg3RqFEjnHTSSfj555/x0EMPYejQoXqZyZMno1OnTujYsSNx7s4991wA0N19xx9/PGrVqoW5c+cCUJmc5s2bY+DAgVi+fDlKS0uhKArmzZuHXr166fWnp6frGpxoNIp9+/ahVq1aOOaYY5jn/MYbb0RmZqb+PS8vDytWrMCNN96I3Nxcffv555+Pzp07OzofPnzUJPguLR8+jjDs2bMHBQUFePvtt/H2228zy+zevVv//P7772P06NFYt24dKisr9e1t2rQx7cfapqFly5bE97p16wIADhw4gJycHMs+W+0LQDd82rVrR5SrV6+eXlYEl156KYYMGYKKigosWbIEzz//PEpLSwkR8MaNG7F27VquYaedu2AwiJ49e+LXX38FoBo8vXr1whlnnIFoNIpFixahcePG2L9/P2HwyLKMV199FW+++SY2b96MaDSq/1a/fn1Te/Q5185F+/btTWV5RpMPH0cCfIPHh48jDLIsAwCuv/563Hjjjcwy3bp1AwB89NFHGDRoEC677DI8+OCDaNSoEYLBIEaOHGkS8gIgmAYawWCQuV1RFNs+J7KvEzRv3hy9e/cGAFx88cVo0KABhgwZgnPOOQdXXHEFAPX8de3aFWPGjGHW0aJFC/3zGWecgeeeew5lZWX49ddf8dhjj6FOnTo49thj8euvv6Jx48YAQBg8zz//PJ544gncfPPNeOaZZ1CvXj0EAgHcd999+rUzwuqc+/DhIw7f4PHh4whDw4YNUbt2bUSjUX1y52HKlCk4+uijMXXqVMKl9NRTTyW7m47QqlUrAMCmTZsIxmPfvn06C+QGd9xxB8aOHYvHH38cl19+OSRJQtu2bbFy5Uqcd955xDlhoVevXqioqMCnn36KHTt26IbNmWeeqRs8HTp00A0fQD3n55xzDiZMmEDUVVBQgAYNGtj2WTsXGzduNP22fv162/19+Kip8DU8PnwcYQgGgxgwYAC+/PJL/PHHH6bfjeHeGrNiZFIWL16MhQsXJr+jDnDeeechFAph/PjxxPY33ngjoXpDoRD+85//YO3atZg2bRoANdpsx44deOedd0zlDx06hJKSEv37qaeeinA4jFGjRqFevXro0qULANUQWrRoEebMmUOwO4B6zmnmavLkydixY4dQn5s2bYru3bvj/fffR2Fhob595syZWLNmjdiB+/BRA+EzPD581FC89957+OGHH0zb7733XrzwwguYNWsWTj31VNx2223o3Lkz9u/fj+XLl+Onn37C/v37AQD9+vXD1KlTcfnll6Nv377YvHkz/vvf/6Jz584oLi6u6kPionHjxrj33nsxevRo9O/fHxdeeCFWrlyJ6dOn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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "output_mydqn = plot_writer_data(\n", + " agent_managers,\n", + " tag=\"episode_reward\",\n", + " title=\"Learning Reward\",\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 9. Bonus: modify the Net class so that Q networks take images as input and use rlberry.envs.atari_make(\"AtariGame\") to train DQN on Pong ." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "# class CNNNetwork(torch.nn.Module):\n", + "# \"\"\"\n", + "# Basic CNN Qnetwork.\n", + "# \"\"\"\n", + "# def __init__(self, obs_size, hidden_size, n_actions):\n", + "# super(CNNNetwork, self).__init__()\n", + "# n_input_channels = obs_size\n", + "# self.cnn = nn.Sequential(\n", + "# nn.Conv2d(n_input_channels, 32, kernel_size=8, stride=4, padding=0),\n", + "# nn.ReLU(),\n", + "# nn.Conv2d(32, 64, kernel_size=4, stride=2, padding=0),\n", + "# nn.ReLU(),\n", + "# nn.Conv2d(64, 64, kernel_size=3, stride=1, padding=0),\n", + "# nn.ReLU(),\n", + "# nn.Flatten(),\n", + "# )\n", + "\n", + "# self.linear = nn.Sequential(nn.LazyLinear(hidden_size), nn.ReLU(), nn.Linear(hidden_size, n_actions))\n", + "\n", + "# def forward(self, observations):\n", + "# return self.linear(self.cnn(observations))\n", + " \n", + "\n", + "# # Environment\n", + "# env_ctor = atari_make # environment constructor\n", + "# env_kwargs = {\"id\": \"ALE/Pong-v5\"} # parameters passed to the environment constructor. Here name of the environment\n", + "# names = [\"DQN\", \"DQN-small-batch-size\"]\n", + "# agent_list = [MyDQN, MyDQN] # list of agents on which we run experiments\n", + "\n", + "# agent_params = [dict(gamma=0.99, \n", + "# batch_size=256, \n", + "# buffer_capacity=10000, \n", + "# update_target_every=1000, \n", + "# epsilon_start=1, \n", + "# decrease_epsilon=10_000, \n", + "# epsilon_min=0.05,\n", + "# qnetworks=CNNNetwork,\n", + "# replay_buffer=ReplayBuffer,\n", + "# optimizer=optim.Adam,\n", + "# loss_fn=F.mse_loss,\n", + "# ), \n", + "# dict(gamma=0.99, \n", + "# batch_size=8, \n", + "# buffer_capacity=10000, \n", + "# update_target_every=1000, \n", + "# epsilon_start=1, \n", + "# decrease_epsilon=10_000, \n", + "# epsilon_min=0.05,\n", + "# qnetworks=CNNNetwork,\n", + "# replay_buffer=ReplayBuffer,\n", + "# optimizer=optim.Adam,\n", + "# loss_fn=F.mse_loss,\n", + "# )]\n", + "\n", + "\n", + "# fit_budget = 50_000 # budgent used by an agent in one fit. This is used differently by different agents.\n", + "# n_fit = 3 # number of parallel fits of the same agent.\n", + "\n", + "# agent_managers = [\n", + "# AgentManager( # an AgentManager is used to repeatedly fit and evaluate an agent on an environment\n", + "# Agent,\n", + "# agent_name=names[e],\n", + "# init_kwargs=agent_params[e],\n", + "# train_env=(env_ctor, env_kwargs),\n", + "# fit_budget=fit_budget,\n", + "# n_fit=n_fit,\n", + "# eval_kwargs=dict(eval_horizon=500, n_simulations=10)\n", + "# )\n", + "# for e, Agent in enumerate(agent_list)\n", + "# ]\n", + "# for manager in agent_managers:\n", + "# manager.fit() " + ] + } + ], + "metadata": { + "colab": { + "authorship_tag": "ABX9TyP9EbLl6g2dURBpFFjKPouU", + "collapsed_sections": [], + "include_colab_link": true, + "name": "Tutorial_Deep_Q_Learning.ipynb", + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "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.10.12" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/tutorials/quick_start.md b/tutorials/quick_start.md index 79659c4..ac904a6 100644 --- a/tutorials/quick_start.md +++ b/tutorials/quick_start.md @@ -2,5 +2,6 @@ ```python import numpy as np + print(np.pi) ```