{ "cells": [ { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "markdown", "checksum": "e539f7fea2ba568c7a9a8292b0602a0a", "grade": false, "grade_id": "cell-4292e6ff11f3c291", "locked": true, "schema_version": 3, "solution": false } }, "source": [ "# Assignment 2 - Q-Learning and Expected Sarsa" ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "markdown", "checksum": "084c7b68a27987da29071541fb20358b", "grade": false, "grade_id": "cell-f4e1bfc6ad38ce3d", "locked": true, "schema_version": 3, "solution": false } }, "source": [ "Welcome to Course 2 Programming Assignment 2. In this notebook, you will:\n", "\n", "- Implement Q-Learning with $\\epsilon$-greedy action selection\n", "- Implement Expected Sarsa with $\\epsilon$-greedy action selection\n", "- Investigate how these two algorithms behave on Cliff World (described on page 132 of the textbook)\n", "\n", "We will provide you with the environment and infrastructure to run an experiment (called the experiment program in RL-Glue). This notebook will provide all the code you need to run your experiment and visualise learning performance.\n", "\n", "This assignment will be graded automatically by comparing the behavior of your agent to our implementations of Expected Sarsa and Q-learning. The random seed will be set to avoid different behavior due to randomness. **You should not call any random functions in this notebook.** It will affect the agent's random state and change the results." ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "markdown", "checksum": "3a6df636f47ebdf7f0707d7b2651a2c6", "grade": false, "grade_id": "cell-2a8ddbbf0ef25d07", "locked": true, "schema_version": 3, "solution": false } }, "source": [ "## Packages" ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "markdown", "checksum": "d74b7bc264a49057450f81177d1afbdb", "grade": false, "grade_id": "cell-69f08c6441da699c", "locked": true, "schema_version": 3, "solution": false } }, "source": [ "You will need the following libraries for this assignment. We are using:\n", "1. numpy: the fundamental package for scientific computing with Python.\n", "2. scipy: a Python library for scientific and technical computing.\n", "3. matplotlib: library for plotting graphs in Python.\n", "4. RL-Glue: library for reinforcement learning experiments.\n", "\n", "**Please do not import other libraries** — this will break the autograder." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "%matplotlib inline\n", "import numpy as np\n", "from scipy.stats import sem\n", "import matplotlib.pyplot as plt\n", "from rl_glue import RLGlue\n", "import agent\n", "import cliffworld_env\n", "from tqdm import tqdm\n", "import pickle" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "code", "checksum": "781be58c941d2ddc62052efda26ebd05", "grade": false, "grade_id": "cell-92144e79fff2c0ea", "locked": true, "schema_version": 3, "solution": false } }, "outputs": [], "source": [ "plt.rcParams.update({'font.size': 15})\n", "plt.rcParams.update({'figure.figsize': [10,5]})" ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "markdown", "checksum": "f6c9d5996579dbe1b3ac25058a574409", "grade": false, "grade_id": "cell-148cfbbe73465cef", "locked": true, "schema_version": 3, "solution": false } }, "source": [ "## Section 1: Q-Learning" ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "markdown", "checksum": "4869e937cb5c63d7046a204ebe15914c", "grade": false, "grade_id": "cell-0c942413e94d98db", "locked": true, "schema_version": 3, "solution": false } }, "source": [ "In this section you will implement and test a Q-Learning agent with $\\epsilon$-greedy action selection (Section 6.5 in the textbook). " ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "markdown", "checksum": "d6eff9064c79025d80bff9970686a5d3", "grade": false, "grade_id": "cell-11cf7ceec7f5b9fe", "locked": true, "schema_version": 3, "solution": false } }, "source": [ "### Implementation" ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "markdown", "checksum": "d8a38e971b034abfdfc90ca66f3936b0", "grade": false, "grade_id": "cell-3417aeb44526bda3", "locked": true, "schema_version": 3, "solution": false } }, "source": [ "Your job is to implement the updates in the methods agent_step and agent_end. We provide detailed comments in each method describing what your code should do." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "deletable": false, "nbgrader": { "cell_type": "code", "checksum": "b523008e6f0bde39944117023b591333", "grade": false, "grade_id": "cell-e77107160ebd3c72", "locked": false, "schema_version": 3, "solution": true } }, "outputs": [], "source": [ "# [Graded]\n", "# Q-Learning agent here\n", "class QLearningAgent(agent.BaseAgent):\n", " def agent_init(self, agent_init_info):\n", " \"\"\"Setup for the agent called when the experiment first starts.\n", " \n", " Args:\n", " agent_init_info (dict), the parameters used to initialize the agent. The dictionary contains:\n", " {\n", " num_states (int): The number of states,\n", " num_actions (int): The number of actions,\n", " epsilon (float): The epsilon parameter for exploration,\n", " step_size (float): The step-size,\n", " discount (float): The discount factor,\n", " }\n", " \n", " \"\"\"\n", " # Store the parameters provided in agent_init_info.\n", " self.num_actions = agent_init_info[\"num_actions\"]\n", " self.num_states = agent_init_info[\"num_states\"]\n", " self.epsilon = agent_init_info[\"epsilon\"]\n", " self.step_size = agent_init_info[\"step_size\"]\n", " self.discount = agent_init_info[\"discount\"]\n", " self.rand_generator = np.random.RandomState(agent_info[\"seed\"])\n", " \n", " # Create an array for action-value estimates and initialize it to zero.\n", " self.q = np.zeros((self.num_states, self.num_actions)) # The array of action-value estimates.\n", "\n", " \n", " def agent_start(self, state):\n", " \"\"\"The first method called when the episode starts, called after\n", " the environment starts.\n", " Args:\n", " state (int): the state from the\n", " environment's evn_start function.\n", " Returns:\n", " action (int): the first action the agent takes.\n", " \"\"\"\n", " \n", " # Choose action using epsilon greedy.\n", " current_q = self.q[state,:]\n", " if self.rand_generator.rand() < self.epsilon:\n", " action = self.rand_generator.randint(self.num_actions)\n", " else:\n", " action = self.argmax(current_q)\n", " self.prev_state = state\n", " self.prev_action = action\n", " return action\n", " \n", " def agent_step(self, reward, state):\n", " \"\"\"A step taken by the agent.\n", " Args:\n", " reward (float): the reward received for taking the last action taken\n", " state (int): the state from the\n", " environment's step based on where the agent ended up after the\n", " last step.\n", " Returns:\n", " action (int): the action the agent is taking.\n", " \"\"\"\n", " \n", " # Choose action using epsilon greedy.\n", " current_q = self.q[state, :]\n", " if self.rand_generator.rand() < self.epsilon:\n", " action = self.rand_generator.randint(self.num_actions)\n", " else:\n", " action = self.argmax(current_q)\n", " \n", " # Perform an update (1 line)\n", " ### START CODE HERE ###\n", " self.q[self.prev_state, self.prev_action] += self.step_size * (reward + self.discount * np.max(current_q) - self.q[self.prev_state, self.prev_action])\n", " ### END CODE HERE ###\n", " \n", " self.prev_state = state\n", " self.prev_action = action\n", " return action\n", " \n", " def agent_end(self, reward):\n", " \"\"\"Run when the agent terminates.\n", " Args:\n", " reward (float): the reward the agent received for entering the\n", " terminal state.\n", " \"\"\"\n", " # Perform the last update in the episode (1 line)\n", " ### START CODE HERE ###\n", " self.q[self.prev_state, self.prev_action] += self.step_size * (reward - self.q[self.prev_state, self.prev_action])\n", " ### END CODE HERE ###\n", " \n", " def argmax(self, q_values):\n", " \"\"\"argmax with random tie-breaking\n", " Args:\n", " q_values (Numpy array): the array of action-values\n", " Returns:\n", " action (int): an action with the highest value\n", " \"\"\"\n", " top = float(\"-inf\")\n", " ties = []\n", "\n", " for i in range(len(q_values)):\n", " if q_values[i] > top:\n", " top = q_values[i]\n", " ties = []\n", "\n", " if q_values[i] == top:\n", " ties.append(i)\n", "\n", " return self.rand_generator.choice(ties)" ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "markdown", "checksum": "9361d06fd03ef5169c039e916de4ec26", "grade": false, "grade_id": "cell-5bb232d570f6ba80", "locked": true, "schema_version": 3, "solution": false } }, "source": [ "### Test" ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "markdown", "checksum": "301cb73e95ae17680f0d24e10c7513d6", "grade": false, "grade_id": "cell-d2621de8f8b5e4ba", "locked": true, "schema_version": 3, "solution": false } }, "source": [ "Run the cells below to test the implemented methods. The output of each cell should match the expected output.\n", "\n", "Note that passing this test does not guarantee correct behavior on the Cliff World." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "code", "checksum": "e31522059faa25ed475e25a6fbbc420c", "grade": false, "grade_id": "cell-1c160d79c07cac0b", "locked": true, "schema_version": 3, "solution": false } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Action Value Estimates: \n", " [[0. 0. 0. 0.]\n", " [0. 0. 0. 0.]\n", " [0. 0. 0. 0.]]\n", "Action: 1\n" ] } ], "source": [ "# Do not modify this cell!\n", "\n", "## Test Code for agent_start() ##\n", "\n", "agent_info = {\"num_actions\": 4, \"num_states\": 3, \"epsilon\": 0.1, \"step_size\": 0.1, \"discount\": 1.0, \"seed\": 0}\n", "current_agent = QLearningAgent()\n", "current_agent.agent_init(agent_info)\n", "action = current_agent.agent_start(0)\n", "print(\"Action Value Estimates: \\n\", current_agent.q)\n", "print(\"Action:\", action)" ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "markdown", "checksum": "fbe3f4201266f67423b1ece02dbc0333", "grade": false, "grade_id": "cell-f1a6a8b66b6598e6", "locked": true, "schema_version": 3, "solution": false } }, "source": [ "**Expected Output:**\n", "\n", "```\n", "Action Value Estimates: \n", " [[0. 0. 0. 0.]\n", " [0. 0. 0. 0.]\n", " [0. 0. 0. 0.]]\n", "Action: 1\n", "```" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "code", "checksum": "b5d0abaed2b270d5a21f9503d8470e68", "grade": false, "grade_id": "cell-b63b908156924031", "locked": true, "schema_version": 3, "solution": false } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Action Value Estimates: \n", " [[0. 0.2 0. 0. ]\n", " [0. 0. 0. 0.02]\n", " [0. 0. 0. 0. ]]\n", "Actions: [1, 3, 1]\n" ] } ], "source": [ "# Do not modify this cell!\n", "\n", "## Test Code for agent_step() ##\n", "\n", "actions = []\n", "agent_info = {\"num_actions\": 4, \"num_states\": 3, \"epsilon\": 0.1, \"step_size\": 0.1, \"discount\": 1.0, \"seed\": 0}\n", "current_agent = QLearningAgent()\n", "current_agent.agent_init(agent_info)\n", "actions.append(current_agent.agent_start(0))\n", "actions.append(current_agent.agent_step(2, 1))\n", "actions.append(current_agent.agent_step(0, 0))\n", "print(\"Action Value Estimates: \\n\", current_agent.q)\n", "print(\"Actions:\", actions)" ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "markdown", "checksum": "ed1a688d14e6eb3961b32a8dbdbbb858", "grade": false, "grade_id": "cell-3b916a9081886d4d", "locked": true, "schema_version": 3, "solution": false } }, "source": [ "**Expected Output:**\n", "\n", "```\n", "Action Value Estimates: \n", " [[ 0. 0.2 0. 0. ]\n", " [ 0. 0. 0. 0.02]\n", " [ 0. 0. 0. 0. ]]\n", "Actions: [1, 3, 1]\n", "```" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "code", "checksum": "49dd68d058ac35cf96e3682e71080b1f", "grade": false, "grade_id": "cell-8fe80d6a4a6555a5", "locked": true, "schema_version": 3, "solution": false } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Action Value Estimates: \n", " [[0. 0.2 0. 0. ]\n", " [0. 0. 0. 0.1]\n", " [0. 0. 0. 0. ]]\n", "Actions: [1, 3]\n" ] } ], "source": [ "# Do not modify this cell!\n", "\n", "## Test Code for agent_end() ##\n", "\n", "actions = []\n", "agent_info = {\"num_actions\": 4, \"num_states\": 3, \"epsilon\": 0.1, \"step_size\": 0.1, \"discount\": 1.0, \"seed\": 0}\n", "current_agent = QLearningAgent()\n", "current_agent.agent_init(agent_info)\n", "actions.append(current_agent.agent_start(0))\n", "actions.append(current_agent.agent_step(2, 1))\n", "current_agent.agent_end(1)\n", "print(\"Action Value Estimates: \\n\", current_agent.q)\n", "print(\"Actions:\", actions)" ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "markdown", "checksum": "d34093b01b729874834af87668416b5f", "grade": false, "grade_id": "cell-8eddb10c5e7c1791", "locked": true, "schema_version": 3, "solution": false } }, "source": [ "**Expected Output:**\n", "\n", "```\n", "Action Value Estimates: \n", " [[0. 0.2 0. 0. ]\n", " [0. 0. 0. 0.1]\n", " [0. 0. 0. 0. ]]\n", "Actions: [1, 3]\n", "```" ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "markdown", "checksum": "9a549cc5d3d6a35b2578be87a3ea288a", "grade": false, "grade_id": "cell-3ab82a89ea44f09e", "locked": true, "schema_version": 3, "solution": false } }, "source": [ "## Section 2: Expected Sarsa" ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "markdown", "checksum": "e16e2e0918866de0908360b07d53b814", "grade": false, "grade_id": "cell-12980d9f811d7bb6", "locked": true, "schema_version": 3, "solution": false } }, "source": [ "In this section you will implement an Expected Sarsa agent with $\\epsilon$-greedy action selection (Section 6.6 in the textbook). " ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "markdown", "checksum": "f635cf2541375086474f964e9ebe31d8", "grade": false, "grade_id": "cell-09c8eef6bd8e9472", "locked": true, "schema_version": 3, "solution": false } }, "source": [ "### Implementation" ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "markdown", "checksum": "401762021600e7176bb065754532c57b", "grade": false, "grade_id": "cell-27a67597b07f3d03", "locked": true, "schema_version": 3, "solution": false } }, "source": [ "Your job is to implement the updates in the methods agent_step and agent_end. We provide detailed comments in each method describing what your code should do." ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "deletable": false, "nbgrader": { "cell_type": "code", "checksum": "db1e0c043dcc4292dc81eb19e3e0debd", "grade": false, "grade_id": "cell-8d20990dcf9eeb6c", "locked": false, "schema_version": 3, "solution": true } }, "outputs": [], "source": [ "# [Graded]\n", "# Expected Sarsa agent here\n", "class ExpectedSarsaAgent(agent.BaseAgent):\n", " def agent_init(self, agent_init_info):\n", " \"\"\"Setup for the agent called when the experiment first starts.\n", " \n", " Args:\n", " agent_init_info (dict), the parameters used to initialize the agent. The dictionary contains:\n", " {\n", " num_states (int): The number of states,\n", " num_actions (int): The number of actions,\n", " epsilon (float): The epsilon parameter for exploration,\n", " step_size (float): The step-size,\n", " discount (float): The discount factor,\n", " }\n", " \n", " \"\"\"\n", " # Store the parameters provided in agent_init_info.\n", " self.num_actions = agent_init_info[\"num_actions\"]\n", " self.num_states = agent_init_info[\"num_states\"]\n", " self.epsilon = agent_init_info[\"epsilon\"]\n", " self.step_size = agent_init_info[\"step_size\"]\n", " self.discount = agent_init_info[\"discount\"]\n", " self.rand_generator = np.random.RandomState(agent_info[\"seed\"])\n", " \n", " # Create an array for action-value estimates and initialize it to zero.\n", " self.q = np.zeros((self.num_states, self.num_actions)) # The array of action-value estimates.\n", "\n", " \n", " def agent_start(self, state):\n", " \"\"\"The first method called when the episode starts, called after\n", " the environment starts.\n", " Args:\n", " state (int): the state from the\n", " environment's evn_start function.\n", " Returns:\n", " action (int): the first action the agent takes.\n", " \"\"\"\n", " \n", " # Choose action using epsilon greedy.\n", " current_q = self.q[state, :]\n", " if self.rand_generator.rand() < self.epsilon:\n", " action = self.rand_generator.randint(self.num_actions)\n", " else:\n", " action = self.argmax(current_q)\n", " self.prev_state = state\n", " self.prev_action = action\n", " return action\n", " \n", " def agent_step(self, reward, state):\n", " \"\"\"A step taken by the agent.\n", " Args:\n", " reward (float): the reward received for taking the last action taken\n", " state (int): the state from the\n", " environment's step based on where the agent ended up after the\n", " last step.\n", " Returns:\n", " action (int): the action the agent is taking.\n", " \"\"\"\n", " \n", " # Choose action using epsilon greedy.\n", " current_q = self.q[state,:]\n", " if self.rand_generator.rand() < self.epsilon:\n", " action = self.rand_generator.randint(self.num_actions)\n", " else:\n", " action = self.argmax(current_q)\n", " \n", " # Perform an update (~5 lines)\n", " ### START CODE HERE ###\n", " q_max = np.max(current_q)\n", " pi = np.ones(self.num_actions) * (self.epsilon / self.num_actions)\n", " pi += (current_q == q_max) * ((1 - self.epsilon) / np.sum(current_q == q_max))\n", " expectation = np.sum(current_q * pi)\n", " self.q[self.prev_state, self.prev_action] += self.step_size * (reward + self.discount * expectation - self.q[self.prev_state, self.prev_action])\n", " ### END CODE HERE ###\n", " \n", " self.prev_state = state\n", " self.prev_action = action\n", " return action\n", " \n", " def agent_end(self, reward):\n", " \"\"\"Run when the agent terminates.\n", " Args:\n", " reward (float): the reward the agent received for entering the\n", " terminal state.\n", " \"\"\"\n", " # Perform the last update in the episode (1 line)\n", " ### START CODE HERE ###\n", " self.q[self.prev_state, self.prev_action] += self.step_size * (reward - self.q[self.prev_state, self.prev_action])\n", " ### END CODE HERE ###\n", " \n", " def argmax(self, q_values):\n", " \"\"\"argmax with random tie-breaking\n", " Args:\n", " q_values (Numpy array): the array of action-values\n", " Returns:\n", " action (int): an action with the highest value\n", " \"\"\"\n", " top = float(\"-inf\")\n", " ties = []\n", "\n", " for i in range(len(q_values)):\n", " if q_values[i] > top:\n", " top = q_values[i]\n", " ties = []\n", "\n", " if q_values[i] == top:\n", " ties.append(i)\n", "\n", " return self.rand_generator.choice(ties)" ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "markdown", "checksum": "f358f7e2676a77b8dd13a09fad9261a2", "grade": false, "grade_id": "cell-bd6580041d80533a", "locked": true, "schema_version": 3, "solution": false } }, "source": [ "### Test" ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "markdown", "checksum": "562af8b2c4449bec9534666c9747e461", "grade": false, "grade_id": "cell-7574736a2553024d", "locked": true, "schema_version": 3, "solution": false } }, "source": [ "Run the cells below to test the implemented methods. The output of each cell should match the expected output.\n", "\n", "Note that passing this test does not guarantee correct behavior on the Cliff World." ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "code", "checksum": "62db384f5fa66caae6a68a840cb56797", "grade": false, "grade_id": "cell-7d4f037d4106e8e2", "locked": true, "schema_version": 3, "solution": false } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Action Value Estimates: \n", " [[0. 0. 0. 0.]\n", " [0. 0. 0. 0.]\n", " [0. 0. 0. 0.]]\n", "Action: 1\n" ] } ], "source": [ "# Do not modify this cell!\n", "\n", "## Test Code for agent_start() ##\n", "\n", "agent_info = {\"num_actions\": 4, \"num_states\": 3, \"epsilon\": 0.1, \"step_size\": 0.1, \"discount\": 1.0, \"seed\": 0}\n", "current_agent = ExpectedSarsaAgent()\n", "current_agent.agent_init(agent_info)\n", "action = current_agent.agent_start(0)\n", "print(\"Action Value Estimates: \\n\", current_agent.q)\n", "print(\"Action:\", action)" ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "markdown", "checksum": "2f5cc33e33a94e5123e0311be2208c2a", "grade": false, "grade_id": "cell-4d1ae44ff39f2ef6", "locked": true, "schema_version": 3, "solution": false } }, "source": [ "**Expected Output:**\n", "\n", "```\n", "Action Value Estimates: \n", " [[0. 0. 0. 0.]\n", " [0. 0. 0. 0.]\n", " [0. 0. 0. 0.]]\n", "Action: 1\n", "```" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "code", "checksum": "5b40fa207655b4dd1028786e8d553a70", "grade": false, "grade_id": "cell-e77508d1e061c326", "locked": true, "schema_version": 3, "solution": false } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Action Value Estimates: \n", " [[0. 0.2 0. 0. ]\n", " [0. 0. 0. 0.0185]\n", " [0. 0. 0. 0. ]]\n", "Actions: [1, 3, 1]\n" ] } ], "source": [ "# Do not modify this cell!\n", "\n", "## Test Code for agent_step() ##\n", "\n", "actions = []\n", "agent_info = {\"num_actions\": 4, \"num_states\": 3, \"epsilon\": 0.1, \"step_size\": 0.1, \"discount\": 1.0, \"seed\": 0}\n", "current_agent = ExpectedSarsaAgent()\n", "current_agent.agent_init(agent_info)\n", "actions.append(current_agent.agent_start(0))\n", "actions.append(current_agent.agent_step(2, 1))\n", "actions.append(current_agent.agent_step(0, 0))\n", "print(\"Action Value Estimates: \\n\", current_agent.q)\n", "print(\"Actions:\", actions)" ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "markdown", "checksum": "e92c78b348a88e1db2e988fd442a1ae5", "grade": false, "grade_id": "cell-11bdb20cca21c6d6", "locked": true, "schema_version": 3, "solution": false } }, "source": [ "**Expected Output:**\n", "\n", "```\n", "Action Value Estimates: \n", " [[0. 0.2 0. 0. ]\n", " [0. 0. 0. 0.0185]\n", " [0. 0. 0. 0. ]]\n", "Actions: [1, 3, 1]\n", "```" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "code", "checksum": "4f52f3065b81d15c96f297117c7b6d81", "grade": false, "grade_id": "cell-1866144548cd9c28", "locked": true, "schema_version": 3, "solution": false } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Action Value Estimates: \n", " [[0. 0.2 0. 0. ]\n", " [0. 0. 0. 0.1]\n", " [0. 0. 0. 0. ]]\n", "Actions: [1, 3]\n" ] } ], "source": [ "# Do not modify this cell!\n", "\n", "## Test Code for agent_end() ##\n", "\n", "actions = []\n", "agent_info = {\"num_actions\": 4, \"num_states\": 3, \"epsilon\": 0.1, \"step_size\": 0.1, \"discount\": 1.0, \"seed\": 0}\n", "current_agent = ExpectedSarsaAgent()\n", "current_agent.agent_init(agent_info)\n", "actions.append(current_agent.agent_start(0))\n", "actions.append(current_agent.agent_step(2, 1))\n", "current_agent.agent_end(1)\n", "print(\"Action Value Estimates: \\n\", current_agent.q)\n", "print(\"Actions:\", actions)" ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "markdown", "checksum": "e9a2554acf9aa8d280d1175c3f23554b", "grade": false, "grade_id": "cell-9edd1b6d5a51c18a", "locked": true, "schema_version": 3, "solution": false } }, "source": [ "**Expected Output:**\n", "\n", "```\n", "Action Value Estimates: \n", " [[0. 0.2 0. 0. ]\n", " [0. 0. 0. 0.1]\n", " [0. 0. 0. 0. ]]\n", "Actions: [1, 3]\n", "```" ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "markdown", "checksum": "95e2ea24f0de8c0a847e3f9b1719e8f1", "grade": false, "grade_id": "cell-2692792f654c792f", "locked": true, "schema_version": 3, "solution": false } }, "source": [ "## Section 3: Solving the Cliff World" ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "markdown", "checksum": "5f6c1e54b358fabad02c9002f23a1087", "grade": false, "grade_id": "cell-6e7fbbaa12d4bf31", "locked": true, "schema_version": 3, "solution": false } }, "source": [ "We described the Cliff World environment in the video \"Expected Sarsa in the Cliff World\" in Lesson 3. This is an undiscounted episodic task and thus we set $\\gamma$=1. The agent starts in the bottom left corner of the gridworld below and takes actions that move it in the four directions. Actions that would move the agent off of the cliff incur a reward of -100 and send the agent back to the start state. The reward for all other transitions is -1. An episode terminates when the agent reaches the bottom right corner. " ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "markdown", "checksum": "bac5c2eaf9d52fa5d29242db0de448f4", "grade": false, "grade_id": "cell-6aaddf82523ef2a5", "locked": true, "schema_version": 3, "solution": false } }, "source": [ "\"Drawing\"\n" ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "markdown", "checksum": "4215fbaa30c33d57f4351e501f0a6422", "grade": false, "grade_id": "cell-e55d077b9f8b6133", "locked": true, "schema_version": 3, "solution": false } }, "source": [ "Using the experiment program in the cell below we now compare the agents on the Cliff World environment and plot the sum of rewards during each episode for the two agents.\n", "\n", "The result of this cell will be graded. If you make any changes to your algorithms, you have to run this cell again before submitting the assignment." ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "code", "checksum": "343a62fbee9e83abdb3d4bd9a25c6283", "grade": false, "grade_id": "cell-6d11bb590ebfb0b2", "locked": true, "schema_version": 3, "solution": false } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 100/100 [00:25<00:00, 3.91it/s]\n", "100%|██████████| 100/100 [00:56<00:00, 1.77it/s]\n" ] }, { "data": { "image/png": "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rIYWjS2tGAPhkPVScjLDWiahlFIqy8477zyOPfZY7r33Xs4888yEy2688UZqa2v57ne/S2VlJZWVlSluJe6www4jGo2ydetWZs6c6bmOHfSGQiFn2erVq3nppZd6vIXbsGHDGDx4ME899RRHHnmks/zpp5/uwa3qfTQYVulFmsFvHfZpsYPhWGZ4R7NVY+WUSQQ0M6yUUio3jjnmGBYsWMA555zDu+++y5w5c4hEIjz66KPcf//9nHvuuUyfPj3j29ttt91YsGABJ554IpdeeimTJk2isbGRFStW8P7773Pvvfcyfvx4qqurueiii1i4cCHbtm3jmmuuYejQobl7oBny+/1ccsklXHLJJQwcOJCDDjqIp59+mrfffhvAM9ut2tJgWKUXaYxnhlutlmpbG6xguKHZGqAQLrBeSiEdQKeUUiqH7rrrLg444ADuvvtufvOb31Bfb7XV/+lPf8pll13W4dtbtGgRu+66K7/5zW+4+uqrKSsrY/fdd+e0004DrIzw4sWLOeecczjuuOOorq7myiuvZPny5XkxrfMFF1zAli1buOuuu7jtttuYN28eV1xxBWeffTZlZalnjlVxEp/VV/VFkyZNMm+88Ub7K/12FvgCcMoz3PfiKhY+8y5FQT8rF87ivXV1zLr9X9z1zf04aq8hfO8Pb/DXFet58pyD2GdYRfu3q5RSqlusXLmSCRMm9PRm5MSaNWuYPHky++67L3/5y188exD3NaeffjrPPfdcu4MN81l7r1cRedMYM8nzwk7SzLBKL9IE4WIAWqJWZrihJUprq6HeyQzbZRLW36Bfp2NWSimVe9XV1c5EFueddx6LFi3q6U3qVu+88w6PPvoo06ZNw+fzsXTpUn73u99x00039fSm9RoaDKv0os3gtwfQxWeeq21oob7JCoaLQ4llEiGtGVZKKdVNpk6dmlGbsp1RcXExL774InfeeSc7duxgxIgR3HTTTVx00UU9vWm9hgbDKr1IEwQSB9ABbNre5AygKwomDqDTmmGllFIq90aNGsULL7zQ05vRq2nEotKLNjmZ4RZXZnjTtiZnAF1xcms1zQwrpZRSqhfQiEWlF2l2MsOR1nhmeKMrM2zXDGs3CaWUUkr1JlomoVKzO424MsPNkXhmuK6hhabyudagAAAZwElEQVTY+eRgWDPDSimllOoNNBhWqT0wF4ZNiWWG432GS0MBtjVFqK1vwU4U232GiwoCiOgMdEoppZTqHTQYVqlt/hjC/WOZ4ViZRNRQVOCn1RhqG1oI+IVQwIffZ7VSO27/akYNCFMY1D6PSimllMp/Ggyr1KLN0LwDWiNOZrg52krQ76MiXEBtfQvhAr8zeA5gYGmIWXsO6aktVkoppZTqEA2GVWqRZmjcav3vygwH/UK4IMDWhmYMQaetmlJKKaVUb6OFnSq1aDM01Fr/u2qGA34fFeEgtfUtNDRHKQ5pMKyUUiq3rr32WkTE8/Tggw/29OZ52rBhA9deey2ffPJJ1m7z4osvZuTIkWnXu//++9l///0pLS2lX79+7Lvvvlx44YVZ246diWaGVWrRZmiMBcOxzHBzxMTKJIK8v3474VCAogJ9GSmllMq98vJynn322TbLx44d2wNbk96GDRu47rrrmD59ekYBbLb89Kc/5aqrruLSSy/lxhtvpLGxkTfffJMHH3yQ2267rdu2o7fQKEZ5a42CiXpmhoN+obzIqhnuFw5SXKCZYaWUUrkXCASYOnVqT29G3rvzzjv53ve+x09+8hNn2dy5c7nmmmu6fNsNDQ0UFRV1+XbyiZZJKG/RZutva4v1N9ZnOBI1BHxCRTjI1oZmdjRFnbZqSimlVE+6+eabKSws5N1333WWvfbaawQCAe69914Ali9fjoiwbNky5syZQ3FxMcOHD+eee+5pc3svvvgihx56KOFwmMrKSs444wy2bduWsM7q1as56aSTGDBgAOFwmIkTJ/LQQw/xySefsNdeewEwY8YMp6TDtnnzZr73ve8xaNAgCgsLmTZtGv/+978Tbru2tpaTTz6Z4uJihgwZwo9//OOMnofa2loGDx7cZrn7/gEuv/xy9tprL0pKSqiuruab3/wm69atS1hn5MiRXHTRRSxcuJDq6mrKysoAWLFiBbNmzaJ///4UFxczYcIEFi1a5FxvyZIlzJw5k6qqKsrKypg6dSrLli3LaPu7m0YxypsdDNtiM9A53SSKgrREDZu2NzG2qqQHNlAppVRfFIlE2iwLBKxw5qKLLuKpp55i/vz5vPLKK0QiEebPn88RRxzB6aefnnCd0047jW9/+9t8//vfZ/HixZx11llUV1czZ84cAF566SVqamo45phjeOyxx/jyyy+5/PLL2bJlC4899hhglUEceOCBhMNhbrnlFoYNG8Y777zDZ599xpAhQ/jjH//IN7/5TRYtWsR+++3n3HdTUxOHH344tbW13HzzzVRVVXH33Xdz+OGH88EHHziB7He/+12WL1/O7bffzuDBg7nlllv46KOPnMebyn777ccdd9zB8OHDmTNnDpWVlZ7rbdiwgSuuuIJddtmFjRs3cuutt3LYYYfx9ttv4/fHj/o+9NBD7LHHHtx1113O8z9v3jzGjx/Pgw8+SCgU4r///S91dXXOdVatWsXcuXO5+OKL8fl8LF26lNmzZ/PPf/6Tgw46qN3t724aDCtv0ZbE805muJVwQYCKcBCADduadACdUkr1Rksvh3Vv98x9D94LZt/Y4at9+eWXBIPBNstXrVrFyJEj8fl83H///eyzzz789Kc/ZcuWLaxfv57nn3++zXVmz57tlBEceeSRfPzxx9xwww1OMHz55Zczbdo0Hn30Uec6Q4cOpaamhnfeeYc999yTn//852zdupU333yTIUOstqI1NTXO+hMnTgRg9913TyjvePDBB3nnnXdYsWIF48aNA+Dwww9nt91249Zbb+Xmm29mxYoVPPnkkzzyyCOccMIJgJVhHj58uJOdTWXRokUcc8wxnHLKKYgIEyZM4Otf/zoXX3xxwnV/+9vfOv9Ho1EOPPBAqqureemllzjkkEMSbvOZZ56hsLAQgE2bNvHxxx/z5JNPOtlv9+MGOPfcc53/W1tbmTFjBitWrOC+++7Lu2BYyySUt0hT4vlYZrglagj4hfKi+IdRRbigO7dMKaVUH1VeXs7rr7/e5rTLLrs464wdO5abbrqJhQsX8otf/II77rgj4XLbsccem3D+a1/7Gm+++SbRaJT6+npeeeUVvvGNbxCJRJzTwQcfTDAY5M033wTg73//O7NmzXIC4Uz97W9/Y//992fUqFHObQMceuihvPHGGwC8/vrrgJWBtZWUlDBz5sy0tz9x4kRWrlzJ008/zdlnn40xhoULFzJp0iS2b9/urLd06VKmTZtGeXk5gUCA6upqAN5///2E26upqXECYYD+/fszbNgwFixYwKOPPsqGDRvabMOaNWuYP38+Q4cOJRAIEAwGWbZsWZvbzgeaGVbeksskYpnhlliZRHlRPACeNsb78ItSSqk81onMbE8LBAJMmjQp7Xpf//rXueCCC+jfvz/HH3+85zpVVVVtzkciETZt2kQkEiEajXL22Wdz9tlnt7nuZ599BliZ6smTJ3f4cWzatIlXX33VM8s9ZswYANatW0dpaWmbwWrJ251KKBRi7ty5zJ07F4D77ruP008/nfvuu4/zzz+f119/nXnz5nHsscdy+eWXU1VVhYgwdepUGhsbE25r0KBBCed9Ph/Lli3jyiuv5NRTT6WhoYGDDjqIX/7yl+y77760trYyb948tm3bxvXXX8/YsWMpLi7m6quv9gyce5oGw8pbcpmE003CmnTDLpMAmDKqf3dumVJKKdWuBQsWMHz4cKfPr7urgi05KNuwYQOBQIABAwbQ2NiIiHDttddy1FFHtbmunWmurKxk7dq1Hd6+/v37M2nSJO6+++42l4VC1vft4MGD2bZtW5vuDZ0NJk877TQuvfRS3nvvPQCeeOIJBg4cyKOPPuoMrFu9erXndZMH3gGMHz+exx9/nJaWFv71r39x2WWX8dWvfpU1a9bw4Ycf8tZbb7F06VJmzZrlXKehoaFT255rGgwrb20yw3aZRCsBny+hTCIU0JphpZRS+eH3v/89zzzzDC+++CJvv/02Z511FscccwxTpkxJWO+JJ55g9uzZCef3339//H4/xcXFTJ06lf/+979cffXVKe+rpqaGX/7yl6xfv75N9hSgoMD67kzOtNbU1LBs2TKGDx+eMtNrZ5yffvppp2Z4+/btPPfcc2lrhjds2NDmdjdu3MjWrVud7WxoaCAYDCYEun/84x/bvV0vwWCQww47jAsvvJCTTz6Z2tpaJ+i1A3uwAu2XXnrJqaPOJxoMK2/R5JrheGu1oN/HgJIQlcUFXDprtx7YOKWUUn1RJBLh1VdfbbN82LBhDB06lDVr1nD++edzySWXMHXqVKZOncrixYuZP38+b731VkLd69KlS7nyyis59NBDWbx4Mc899xxPPfWUc/nPfvYzampq8Pl8HHfccZSWlvLpp5+yZMkSfvzjH7PrrrtywQUX8Pvf/56vfOUrXHnllQwbNoyVK1eyY8cOLr30UoYPH05RUREPPPAA5eXlBINBJk2axHe+8x3uuecepk+fzsUXX8zo0aP58ssvee211xg8eDAXXHABe+yxB/PmzeOss86irq6OIUOGcPPNNxMOh9M+T3vttRdHH300RxxxBFVVVaxevZpbbrmFcDjM/PnzAZg5cya33347P/jBD5g7dy4vv/xyxjP5/d///R8XX3wx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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Do not modify this cell!\n", "\n", "agents = {\n", " \"Q-learning\": QLearningAgent,\n", " \"Expected Sarsa\": ExpectedSarsaAgent\n", "}\n", "env = cliffworld_env.Environment\n", "all_reward_sums = {} # Contains sum of rewards during episode\n", "all_state_visits = {} # Contains state visit counts during the last 10 episodes\n", "agent_info = {\"num_actions\": 4, \"num_states\": 48, \"epsilon\": 0.1, \"step_size\": 0.5, \"discount\": 1.0}\n", "env_info = {}\n", "num_runs = 100 # The number of runs\n", "num_episodes = 500 # The number of episodes in each run\n", "\n", "for algorithm in [\"Q-learning\", \"Expected Sarsa\"]:\n", " all_reward_sums[algorithm] = []\n", " all_state_visits[algorithm] = []\n", " for run in tqdm(range(num_runs)):\n", " agent_info[\"seed\"] = run\n", " rl_glue = RLGlue(env, agents[algorithm])\n", " rl_glue.rl_init(agent_info, env_info)\n", "\n", " reward_sums = []\n", " state_visits = np.zeros(48)\n", "# last_episode_total_reward = 0\n", " for episode in range(num_episodes):\n", " if episode < num_episodes - 10:\n", " # Runs an episode\n", " rl_glue.rl_episode(0) \n", " else: \n", " # Runs an episode while keeping track of visited states\n", " state, action = rl_glue.rl_start()\n", " state_visits[state] += 1\n", " is_terminal = False\n", " while not is_terminal:\n", " reward, state, action, is_terminal = rl_glue.rl_step()\n", " state_visits[state] += 1\n", " \n", " reward_sums.append(rl_glue.rl_return())\n", "# last_episode_total_reward = rl_glue.rl_return()\n", " \n", " all_reward_sums[algorithm].append(reward_sums)\n", " all_state_visits[algorithm].append(state_visits)\n", "\n", "# save results\n", "import os\n", "import shutil\n", "os.makedirs('results', exist_ok=True)\n", "np.save('results/q_learning.npy', all_reward_sums['Q-learning'])\n", "np.save('results/expected_sarsa.npy', all_reward_sums['Expected Sarsa'])\n", "shutil.make_archive('results', 'zip', '.', 'results')\n", "\n", " \n", "for algorithm in [\"Q-learning\", \"Expected Sarsa\"]:\n", " plt.plot(np.mean(all_reward_sums[algorithm], axis=0), label=algorithm)\n", "plt.xlabel(\"Episodes\")\n", "plt.ylabel(\"Sum of\\n rewards\\n during\\n episode\",rotation=0, labelpad=40)\n", "plt.xlim(0,500)\n", "plt.ylim(-100,0)\n", "plt.legend()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "markdown", "checksum": "1cbb34897b56a32ea1e378b95caa0842", "grade": false, "grade_id": "cell-c3967df7d24c7d02", "locked": true, "schema_version": 3, "solution": false } }, "source": [ "To see why these two agents behave differently, let's inspect the states they visit most. Run the cell below to generate plots showing the number of timesteps that the agents spent in each state over the last 10 episodes." ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "code", "checksum": "a5d9243d4e90f82665bc9ca467e065ef", "grade": false, "grade_id": "cell-37a2b6675676da6f", "locked": true, "schema_version": 3, "solution": false } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Do not modify this cell!\n", "\n", "for algorithm, position in [(\"Q-learning\", 211), (\"Expected Sarsa\", 212)]:\n", " plt.subplot(position)\n", " average_state_visits = np.array(all_state_visits[algorithm]).mean(axis=0)\n", " grid_state_visits = average_state_visits.reshape((4,12))\n", " grid_state_visits[0,1:-1] = np.nan\n", " plt.pcolormesh(grid_state_visits, edgecolors='gray', linewidth=2)\n", " plt.title(algorithm)\n", " plt.axis('off')\n", " cm = plt.get_cmap()\n", " cm.set_bad('gray')\n", "\n", " plt.subplots_adjust(bottom=0.0, right=0.7, top=1.0)\n", " cax = plt.axes([0.85, 0.0, 0.075, 1.])\n", "cbar = plt.colorbar(cax=cax)\n", "cbar.ax.set_ylabel(\"Visits during\\n the last 10\\n episodes\", rotation=0, labelpad=70)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "markdown", "checksum": "e20aaec2eb1806cda6de9f75002264d5", "grade": false, "grade_id": "cell-c7575e40e56f751c", "locked": true, "schema_version": 3, "solution": false } }, "source": [ "The Q-learning agent learns the optimal policy, one that moves along the cliff and reaches the goal in as few steps as possible. However, since the agent does not follow the optimal policy and uses $\\epsilon$-greedy exploration, it occasionally falls off the cliff. The Expected Sarsa agent takes exploration into account and follows a safer path. Note this is different from the book. The book shows Sarsa learns the even safer path\n", "\n", "\n", "Previously we used a fixed step-size of 0.5 for the agents. What happens with other step-sizes? Does this difference in performance persist?\n", "\n", "In the next experiment we will try 10 different step-sizes from 0.1 to 1.0 and compare the sum of rewards per episode averaged over the first 100 episodes (similar to the interim performance curves in Figure 6.3 of the textbook). Shaded regions show standard errors.\n", "\n", "This cell takes around 10 minutes to run. The result of this cell will be graded. If you make any changes to your algorithms, you have to run this cell again before submitting the assignment." ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "code", "checksum": "96725dad62b0596792b4d5694f64637e", "grade": false, "grade_id": "cell-f079ef9418195c22", "locked": true, "schema_version": 3, "solution": false } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 100/100 [00:21<00:00, 4.65it/s]\n", "100%|██████████| 100/100 [00:15<00:00, 6.60it/s]\n", "100%|██████████| 100/100 [00:11<00:00, 8.92it/s]\n", "100%|██████████| 100/100 [00:09<00:00, 10.57it/s]\n", "100%|██████████| 100/100 [00:09<00:00, 10.92it/s]\n", "100%|██████████| 100/100 [00:08<00:00, 11.17it/s]\n", "100%|██████████| 100/100 [00:08<00:00, 11.79it/s]\n", "100%|██████████| 100/100 [00:07<00:00, 13.26it/s]\n", "100%|██████████| 100/100 [00:06<00:00, 14.45it/s]\n", "100%|██████████| 100/100 [00:07<00:00, 12.89it/s]\n", "100%|██████████| 100/100 [00:48<00:00, 2.07it/s]\n", "100%|██████████| 100/100 [00:33<00:00, 2.99it/s]\n", "100%|██████████| 100/100 [00:27<00:00, 3.62it/s]\n", "100%|██████████| 100/100 [00:22<00:00, 4.35it/s]\n", "100%|██████████| 100/100 [00:20<00:00, 4.92it/s]\n", "100%|██████████| 100/100 [00:17<00:00, 5.60it/s]\n", "100%|██████████| 100/100 [00:18<00:00, 5.55it/s]\n", "100%|██████████| 100/100 [00:17<00:00, 5.67it/s]\n", "100%|██████████| 100/100 [00:17<00:00, 5.80it/s]\n", "100%|██████████| 100/100 [00:14<00:00, 6.73it/s]\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Do not modify this cell!\n", "\n", "agents = {\n", " \"Q-learning\": QLearningAgent,\n", " \"Expected Sarsa\": ExpectedSarsaAgent\n", "}\n", "env = cliffworld_env.Environment\n", "all_reward_sums = {}\n", "step_sizes = np.linspace(0.1,1.0,10)\n", "agent_info = {\"num_actions\": 4, \"num_states\": 48, \"epsilon\": 0.1, \"discount\": 1.0}\n", "env_info = {}\n", "num_runs = 100\n", "num_episodes = 100\n", "all_reward_sums = {}\n", "\n", "for algorithm in [\"Q-learning\", \"Expected Sarsa\"]:\n", " for step_size in step_sizes:\n", " all_reward_sums[(algorithm, step_size)] = []\n", " agent_info[\"step_size\"] = step_size\n", " for run in tqdm(range(num_runs)):\n", " agent_info[\"seed\"] = run\n", " rl_glue = RLGlue(env, agents[algorithm])\n", " rl_glue.rl_init(agent_info, env_info)\n", "\n", " return_sum = 0\n", " for episode in range(num_episodes):\n", " rl_glue.rl_episode(0)\n", " return_sum += rl_glue.rl_return()\n", " all_reward_sums[(algorithm, step_size)].append(return_sum/num_episodes)\n", " \n", "\n", "for algorithm in [\"Q-learning\", \"Expected Sarsa\"]:\n", " algorithm_means = np.array([np.mean(all_reward_sums[(algorithm, step_size)]) for step_size in step_sizes])\n", " algorithm_stds = np.array([sem(all_reward_sums[(algorithm, step_size)]) for step_size in step_sizes])\n", " plt.plot(step_sizes, algorithm_means, marker='o', linestyle='solid', label=algorithm)\n", " plt.fill_between(step_sizes, algorithm_means + algorithm_stds, algorithm_means - algorithm_stds, alpha=0.2)\n", "\n", "plt.legend()\n", "plt.xlabel(\"Step-size\")\n", "plt.ylabel(\"Sum of\\n rewards\\n per episode\",rotation=0, labelpad=50)\n", "plt.xticks(step_sizes)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "markdown", "checksum": "6113751690c166257cd1ace47ef977b1", "grade": false, "grade_id": "cell-e2c9c37b494e40f1", "locked": true, "schema_version": 3, "solution": false } }, "source": [ "## Wrapping up" ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "markdown", "checksum": "893577356341c384f4e2457631037f81", "grade": false, "grade_id": "cell-10150ffd5c7c91f8", "locked": true, "schema_version": 3, "solution": false } }, "source": [ "Expected Sarsa shows an advantage over Q-learning in this problem across a wide range of step-sizes.\n", "\n", "Congratulations! Now you have:\n", "\n", "- implemented Q-Learning with $\\epsilon$-greedy action selection\n", "- implemented Expected Sarsa with $\\epsilon$-greedy action selection\n", "- investigated the behavior of these two algorithms on Cliff World\n", "\n", "To submit your solution, you will need to submit the `results.zip` file generated by the experiments. Here are the steps:\n", "\n", "- Go to the `file` menu at the top of the screen\n", "- Select `open`\n", "- Click the selection square next to `results.zip`\n", "- Select `Download` from the top menu\n", "- Upload that file to the grader in the next part of this module\n" ] } ], "metadata": { "coursera": { "course_slug": "sample-based-learning-methods", "launcher_item_id": "biN1L" }, "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.1" } }, "nbformat": 4, "nbformat_minor": 2 }