From b27967423a455dfece9d4061444852700baec304 Mon Sep 17 00:00:00 2001 From: cmburgul Date: Fri, 6 Sep 2019 08:07:36 -0400 Subject: [PATCH] tile coding --- .../Tile_Coding-checkpoint.ipynb | 758 ++++++++++++++++ .../Tile_Coding_Solution-checkpoint.ipynb | 810 +++++++++++++++++ tile-coding/README.md | 5 + tile-coding/Tile_Coding.ipynb | 801 +++++++++++++++++ tile-coding/Tile_Coding_Solution.ipynb | 826 ++++++++++++++++++ 5 files changed, 3200 insertions(+) create mode 100644 tile-coding/.ipynb_checkpoints/Tile_Coding-checkpoint.ipynb create mode 100644 tile-coding/.ipynb_checkpoints/Tile_Coding_Solution-checkpoint.ipynb create mode 100644 tile-coding/README.md create mode 100644 tile-coding/Tile_Coding.ipynb create mode 100644 tile-coding/Tile_Coding_Solution.ipynb diff --git a/tile-coding/.ipynb_checkpoints/Tile_Coding-checkpoint.ipynb b/tile-coding/.ipynb_checkpoints/Tile_Coding-checkpoint.ipynb new file mode 100644 index 0000000..8458b36 --- /dev/null +++ b/tile-coding/.ipynb_checkpoints/Tile_Coding-checkpoint.ipynb @@ -0,0 +1,758 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Tile Coding\n", + "---\n", + "\n", + "Tile coding is an innovative way of discretizing a continuous space that enables better generalization compared to a single grid-based approach. The fundamental idea is to create several overlapping grids or _tilings_; then for any given sample value, you need only check which tiles it lies in. You can then encode the original continuous value by a vector of integer indices or bits that identifies each activated tile.\n", + "\n", + "### 1. Import the Necessary Packages" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "# Import common libraries\n", + "import sys\n", + "import gym\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "\n", + "# Set plotting options\n", + "%matplotlib inline\n", + "plt.style.use('ggplot')\n", + "np.set_printoptions(precision=3, linewidth=120)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2. Specify the Environment, and Explore the State and Action Spaces\n", + "\n", + "We'll use [OpenAI Gym](https://gym.openai.com/) environments to test and develop our algorithms. These simulate a variety of classic as well as contemporary reinforcement learning tasks. Let's begin with an environment that has a continuous state space, but a discrete action space." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "State space: Box(6,)\n", + "- low: [ -1. -1. -1. -1. -12.566 -28.274]\n", + "- high: [ 1. 1. 1. 1. 12.566 28.274]\n", + "Action space: Discrete(3)\n" + ] + } + ], + "source": [ + "# Create an environment\n", + "env = gym.make('Acrobot-v1')\n", + "env.seed(505);\n", + "\n", + "# Explore state (observation) space\n", + "print(\"State space:\", env.observation_space)\n", + "print(\"- low:\", env.observation_space.low)\n", + "print(\"- high:\", env.observation_space.high)\n", + "\n", + "# Explore action space\n", + "print(\"Action space:\", env.action_space)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that the state space is multi-dimensional, with most dimensions ranging from -1 to 1 (positions of the two joints), while the final two dimensions have a larger range. How do we discretize such a space using tiles?\n", + "\n", + "### 3. Tiling\n", + "\n", + "Let's first design a way to create a single tiling for a given state space. This is very similar to a uniform grid! The only difference is that you should include an offset for each dimension that shifts the split points.\n", + "\n", + "For instance, if `low = [-1.0, -5.0]`, `high = [1.0, 5.0]`, `bins = (10, 10)`, and `offsets = (-0.1, 0.5)`, then return a list of 2 NumPy arrays (2 dimensions) each containing the following split points (9 split points per dimension):\n", + "\n", + "```\n", + "[array([-0.9, -0.7, -0.5, -0.3, -0.1, 0.1, 0.3, 0.5, 0.7]),\n", + " array([-3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 4.5])]\n", + "```\n", + "\n", + "Notice how the split points for the first dimension are offset by `-0.1`, and for the second dimension are offset by `+0.5`. This might mean that some of our tiles, especially along the perimeter, are partially outside the valid state space, but that is unavoidable and harmless." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "env: Box(6,)\n", + "- low : [ -1. -1. -1. -1. -12.566 -28.274]\n", + "- high : [ 1. 1. 1. 1. 12.566 28.274]\n", + "[array([-0.8, -0.6, -0.4, -0.2, 0. , 0.2, 0.4, 0.6, 0.8]), array([-4., -3., -2., -1., 0., 1., 2., 3., 4.])]\n", + "[-0.8 -0.6 -0.4 -0.2 0. 0.2 0.4 0.6 0.8]\n", + "[-4. -3. -2. -1. 0. 1. 2. 3. 4.]\n", + "---------------\n", + "[-0.9 -0.7 -0.5 -0.3 -0.1 0.1 0.3 0.5 0.7]\n", + "[-3.5 -2.5 -1.5 -0.5 0.5 1.5 2.5 3.5 4.5]\n", + "--------------------------------------------------------------\n", + "[array([-0.9, -0.7, -0.5, -0.3, -0.1, 0.1, 0.3, 0.5, 0.7]), array([-3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 4.5])]\n" + ] + } + ], + "source": [ + "# Practice \n", + "print(\"env: \", env.observation_space)\n", + "print(\"- low :\", env.observation_space.low)\n", + "print(\"- high : \",env.observation_space.high)\n", + "low = [-1.0, -5.0]\n", + "high = [1.0, 5.0]\n", + "offset = (-0.1, 0.5)\n", + "\n", + "bins = (10, 10)\n", + "tiling_grid = []\n", + "for i in range( len(bins) ):\n", + " tiling_grid.append(np.linspace(low[i], high[i], num=bins[i]+1)[1:-1])\n", + "print(tiling_grid)\n", + "print(tiling_grid[0])\n", + "print(tiling_grid[1])\n", + "print('---------------')\n", + "print(np.add(tiling_grid[0], offset[0]))\n", + "print(np.add(tiling_grid[1], offset[1]))\n", + "\n", + "print(\"--------------------------------------------------------------\")\n", + "tiling_grid = [ np.linspace( low[i], high[i], num=bins[i]+1 )[1:-1] + offset[i] for i in range(len(bins)) ]\n", + "print(tiling_grid)" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[array([-0.9, -0.7, -0.5, -0.3, -0.1, 0.1, 0.3, 0.5, 0.7]),\n", + " array([-3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 4.5])]" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "def create_tiling_grid(low, high, bins=(10, 10), offsets=(0.0, 0.0)):\n", + " \"\"\"Define a uniformly-spaced grid that can be used for tile-coding a space.\n", + " \n", + " Parameters\n", + " ----------\n", + " low : array_like\n", + " Lower bounds for each dimension of the continuous space.\n", + " high : array_like\n", + " Upper bounds for each dimension of the continuous space.\n", + " bins : tuple\n", + " Number of bins or tiles along each corresponding dimension.\n", + " offsets : tuple\n", + " Split points for each dimension should be offset by these values.\n", + " \n", + " Returns\n", + " -------\n", + " grid : list of array_like\n", + " A list of arrays containing split points for each dimension.\n", + " \"\"\"\n", + " # TODO: Implement this\n", + " grid = [ np.linspace(low[i], high[i], num=bins[i]+1)[1:-1] + offsets[i] for i in range( len(bins) )]\n", + " return grid\n", + "\n", + "low = [-1.0, -5.0]\n", + "high = [1.0, 5.0]\n", + "create_tiling_grid(low, high, bins=(10, 10), offsets=(-0.1, 0.5)) # [test]" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[array([-0.9, -0.7, -0.5, -0.3, -0.1, 0.1, 0.3, 0.5, 0.7]), array([-3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 4.5])]\n", + "-------\n", + "((10, 10), (-0.066, -0.33))\n", + "((10, 10), (0.0, 0.0))\n", + "((10, 10), (0.066, 0.33))\n", + "=======\n", + " at 0x7f9834a75360>\n", + "--------\n", + "[[[array([-0.866, -0.666, -0.466, -0.266, -0.066, 0.134, 0.334, 0.534, 0.734]), array([-4.33, -3.33, -2.33, -1.33, -0.33, 0.67, 1.67, 2.67, 3.67])]], [[array([-0.8, -0.6, -0.4, -0.2, 0. , 0.2, 0.4, 0.6, 0.8]), array([-4., -3., -2., -1., 0., 1., 2., 3., 4.])]], [[array([-0.734, -0.534, -0.334, -0.134, 0.066, 0.266, 0.466, 0.666, 0.866]), array([-3.67, -2.67, -1.67, -0.67, 0.33, 1.33, 2.33, 3.33, 4.33])]]]\n" + ] + } + ], + "source": [ + "# Practice\n", + "# Tiling specs: [(, ), ...]\n", + "tiling_specs = [((10, 10), (-0.066, -0.33)),\n", + " ((10, 10), (0.0, 0.0)),\n", + " ((10, 10), (0.066, 0.33))]\n", + "\n", + "low = [-1.0, -5.0]\n", + "high = [1.0, 5.0]\n", + "\n", + "print( create_tiling_grid(low, high, bins=(10, 10), offsets=(-0.1, 0.5)) )\n", + "print('-------')\n", + "for specs in range(len(tiling_specs)):\n", + " print( tiling_specs[specs] )\n", + "print('=======')\n", + "\n", + "print( tiling_specs[dim] for dim in range(len(tiling_specs)) )\n", + "print(\"--------\")\n", + "grid = []\n", + "for dim in range( len(tiling_specs)):\n", + " grid.append( [ create_tiling_grid(low, high, bins=tiling_specs[dim][0], offsets=tiling_specs[dim][1] ) ] )\n", + "print(grid)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You can now use this function to define a set of tilings that are a little offset from each other." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "def create_tilings(low, high, tiling_specs):\n", + " \"\"\"Define multiple tilings using the provided specifications.\n", + "\n", + " Parameters\n", + " ----------\n", + " low : array_like\n", + " Lower bounds for each dimension of the continuous space.\n", + " high : array_like\n", + " Upper bounds for each dimension of the continuous space.\n", + " tiling_specs : list of tuples\n", + " A sequence of (bins, offsets) to be passed to create_tiling_grid().\n", + "\n", + " Returns\n", + " -------\n", + " tilings : list\n", + " A list of tilings (grids), each produced by create_tiling_grid().\n", + " \"\"\"\n", + " # TODO: Implement this\n", + " grid = []\n", + " for dim in range( len(tiling_specs)):\n", + " grid.append( create_tiling_grid(low, high, bins=tiling_specs[dim][0], offsets=tiling_specs[dim][1] ) )\n", + " return grid\n", + "\n", + "\n", + "# Tiling specs: [(, ), ...]\n", + "tiling_specs = [((10, 10), (-0.066, -0.33)),\n", + " ((10, 10), (0.0, 0.0)),\n", + " ((10, 10), (0.066, 0.33))]\n", + "tilings = create_tilings(low, high, tiling_specs)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "It may be hard to gauge whether you are getting desired results or not. So let's try to visualize these tilings." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/cmb/anaconda3/envs/cmb-singularity/lib/python3.6/site-packages/matplotlib/cbook/__init__.py:424: MatplotlibDeprecationWarning: \n", + "Passing one of 'on', 'true', 'off', 'false' as a boolean is deprecated; use an actual boolean (True/False) instead.\n", + " warn_deprecated(\"2.2\", \"Passing one of 'on', 'true', 'off', 'false' as a \"\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "from matplotlib.lines import Line2D\n", + "\n", + "def visualize_tilings(tilings):\n", + " \"\"\"Plot each tiling as a grid.\"\"\"\n", + " prop_cycle = plt.rcParams['axes.prop_cycle']\n", + " colors = prop_cycle.by_key()['color']\n", + " linestyles = ['-', '--', ':']\n", + " legend_lines = []\n", + "\n", + " fig, ax = plt.subplots(figsize=(10, 10))\n", + " for i, grid in enumerate(tilings):\n", + " for x in grid[0]:\n", + " l = ax.axvline(x=x, color=colors[i % len(colors)], linestyle=linestyles[i % len(linestyles)], label=i)\n", + " for y in grid[1]:\n", + " l = ax.axhline(y=y, color=colors[i % len(colors)], linestyle=linestyles[i % len(linestyles)])\n", + " legend_lines.append(l)\n", + " ax.grid('off')\n", + " ax.legend(legend_lines, [\"Tiling #{}\".format(t) for t in range(len(legend_lines))], facecolor='white', framealpha=0.9)\n", + " ax.set_title(\"Tilings\")\n", + " return ax # return Axis object to draw on later, if needed\n", + "\n", + "\n", + "visualize_tilings(tilings);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Great! Now that we have a way to generate these tilings, we can next write our encoding function that will convert any given continuous state value to a discrete vector.\n", + "\n", + "### 4. Tile Encoding\n", + "\n", + "Implement the following to produce a vector that contains the indices for each tile that the input state value belongs to. The shape of the vector can be the same as the arrangment of tiles you have, or it can be ultimately flattened for convenience.\n", + "\n", + "You can use the same `discretize()` function here from grid-based discretization, and simply call it for each tiling." + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[(0, 0), (0, 0), (0, 0)], [(1, 8), (1, 8), (0, 7)], [(2, 5), (2, 5), (2, 4)], [(6, 3), (6, 3), (5, 2)], [(6, 3), (5, 3), (5, 2)], [(9, 7), (8, 7), (8, 7)], [(8, 1), (8, 1), (8, 0)], [(9, 9), (9, 9), (9, 9)]]\n" + ] + }, + { + "data": { + "text/plain": [ + "'\\nprint(\"------------\")\\nprint(\"sample :\")\\nfor sample in samples:\\n print(sample, len(sample))\\nprint(\"tiling :\")\\nfor tiling in tilings:\\n print(tiling)\\n print(\\'[]\\')\\n'" + ] + }, + "execution_count": 65, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Practice code\n", + "\n", + "# Test with some sample values\n", + "samples = [(-1.2 , -5.1 ),\n", + " (-0.75, 3.25),\n", + " (-0.5 , 0.0 ),\n", + " ( 0.25, -1.9 ),\n", + " ( 0.15, -1.75),\n", + " ( 0.75, 2.5 ),\n", + " ( 0.7 , -3.7 ),\n", + " ( 1.0 , 5.0 )]\n", + "\n", + "\n", + "# For Discretizing\n", + "def discretize(sample, grid):\n", + " return tuple( int(np.digitize(sample[i], grid[i])) for i in range( len(sample) ) ) \n", + "grid = []\n", + "for sample in samples:\n", + " #print(\"sample :\", sample)\n", + " discretized_tile = [ discretize(sample, tiling) for tiling in tilings ]\n", + " grid.append(discretized_tile)\n", + " #print('==')\n", + "#print(discretized_tile)\n", + "print(grid)\n", + "\"\"\"\n", + "print(\"------------\")\n", + "print(\"sample :\")\n", + "for sample in samples:\n", + " print(sample, len(sample))\n", + "print(\"tiling :\")\n", + "for tiling in tilings:\n", + " print(tiling)\n", + " print('[]')\n", + "\"\"\"" + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Samples:\n", + "[(-1.2, -5.1), (-0.75, 3.25), (-0.5, 0.0), (0.25, -1.9), (0.15, -1.75), (0.75, 2.5), (0.7, -3.7), (1.0, 5.0)]\n", + "\n", + "Encoded samples:\n", + "[[(0, 0), (0, 0), (0, 0)], [(1, 8), (1, 8), (0, 7)], [(2, 5), (2, 5), (2, 4)], [(6, 3), (6, 3), (5, 2)], [(6, 3), (5, 3), (5, 2)], [(9, 7), (8, 7), (8, 7)], [(8, 1), (8, 1), (8, 0)], [(9, 9), (9, 9), (9, 9)]]\n" + ] + } + ], + "source": [ + "def discretize(sample, grid):\n", + " \"\"\"Discretize a sample as per given grid.\n", + " \n", + " Parameters\n", + " ----------\n", + " sample : array_like\n", + " A single sample from the (original) continuous space.\n", + " grid : list of array_like\n", + " A list of arrays containing split points for each dimension.\n", + " \n", + " Returns\n", + " -------\n", + " discretized_sample : array_like\n", + " A sequence of integers with the same number of dimensions as sample.\n", + " \"\"\"\n", + " # TODO: Implement this\n", + " #print(\"grid :\", grid)\n", + " return tuple( int(np.digitize(sample[i], grid[i])) for i in range( len(sample) ) ) \n", + "\n", + "\n", + "def tile_encode(sample, tilings, flatten=False):\n", + " \"\"\"Encode given sample using tile-coding.\n", + " \n", + " Parameters\n", + " ----------\n", + " sample : array_like\n", + " A single sample from the (original) continuous space.\n", + " tilings : list\n", + " A list of tilings (grids), each produced by create_tiling_grid().\n", + " flatten : bool\n", + " If true, flatten the resulting binary arrays into a single long vector.\n", + "\n", + " Returns\n", + " -------\n", + " encoded_sample : list or array_like\n", + " A list of binary vectors, one for each tiling, or flattened into one.\n", + " \"\"\"\n", + " # TODO: Implement this\n", + " encoded_sample = [ discretize(sample, tiling) for tiling in tilings ]\n", + " return np.concatenate(encoded_sample) if flatten else encoded_sample\n", + "\n", + "\n", + "# Test with some sample values\n", + "samples = [(-1.2 , -5.1 ),\n", + " (-0.75, 3.25),\n", + " (-0.5 , 0.0 ),\n", + " ( 0.25, -1.9 ),\n", + " ( 0.15, -1.75),\n", + " ( 0.75, 2.5 ),\n", + " ( 0.7 , -3.7 ),\n", + " ( 1.0 , 5.0 )]\n", + "encoded_samples = [tile_encode(sample, tilings) for sample in samples]\n", + "print(\"\\nSamples:\", repr(samples), sep=\"\\n\")\n", + "print(\"\\nEncoded samples:\", repr(encoded_samples), sep=\"\\n\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that we did not flatten the encoding above, which is why each sample's representation is a pair of indices for each tiling. This makes it easy to visualize it using the tilings." + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/cmb/anaconda3/envs/cmb-singularity/lib/python3.6/site-packages/matplotlib/cbook/__init__.py:424: MatplotlibDeprecationWarning: \n", + "Passing one of 'on', 'true', 'off', 'false' as a boolean is deprecated; use an actual boolean (True/False) instead.\n", + " warn_deprecated(\"2.2\", \"Passing one of 'on', 'true', 'off', 'false' as a \"\n" + ] + }, + { + "data": { + "image/png": "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yAfx1ot460W89eNU96BvutRUpZGkahxMmjSJ/v7+Yb97++23eeqpp/jP//xPHnvsMY4cOUJTUxNHjhzhb//2b/mbv/kbAB5//HF+8YtfMGfOHGpra7n44ouzkrX9+/dTX19Pe3s75eXl/OIXvyAUClFXV8frr7/O2rVr+cxnPsOUKeYaKJ/5zGf4/e9/zx133KHnBRgHt59Xa7nvwsX2nYsXb72It17EWy/5eIN97vW1YfaE3Jb7l5b3EJeaKkCSqoKxZ88e3nzzTfx+P4sXL+a+++5j27ZtvPrqq2zevJlEIsGyZcu4+OKLs/ouWLCALVu2cPPNN/PCCy/wzDPPsHTpUm688UYAWlpamDNnTmb72bNn09LSou25jYclM8st9506w746AvHWi3jrRbz1ko832Od+YXmcaMr6OlVFxWEMwyU1VUzQpKr/Z08RP9BY0Mcsmr+QSf/31wv6mEO54YYb8Hq9eL1epk2bxtGjR1m3bh0333xz5qrGgSTpWHR2dlJTU8POnTu59957M783jOy1P+xaj+pYNPVEADhjSu7fVoKBJADlFda/KVlFvPUi3noRb73k4w32uTdF3ByNuagpsrbOlFlT5calnFcPVmiksqxAeL2Di7253W4SicSoydBo3H///Vx44YU0NjZSV1fH73//e2655RaefvppAObMmUNzc3Nm+5aWFmbNmlXYJ5Anz285yvNbjlrqu21TiG2bQgU2Gh/irRfx1ot46yUfb7DP/fmj5bzRb/30XdA3nUhocgGNnMuEnKk6kTNKOrn88su5//77WbVqFYlEgtdff5177rkna7tnn32WX/3qVxw+fJjbbruNVatW8dJLL2Xar7vuOr797W/T29sLwBtvvMETTzyh7XmcaM46z5nrk4m3XsRbL+KtH6e6l5b3yDpVaSZkUnWysGzZMm666SYuvvjizBINkyZNGnXbd999l7vuuov333+flStXDmubMmUKjzzyCCtWrADg29/+dqZo/WSgdpozh6F460W89SLe+nGqu9RUDeLMd/AE8+ijjw6LB678mzdvHtu2bQPgyiuv5Morrxx1+4FtAB566CEeffRRQqEQV111FQ8++OCo+/zxj38MwPLly0dt//KXv8yXv/zl3J+MAwj4zDqCiir9NRD5IN56EW+9iLd+nOqeTBSRSrpxuaSmSmqqTjD33XcfdXV1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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "from matplotlib.patches import Rectangle\n", + "\n", + "def visualize_encoded_samples(samples, encoded_samples, tilings, low=None, high=None):\n", + " \"\"\"Visualize samples by activating the respective tiles.\"\"\"\n", + " samples = np.array(samples) # for ease of indexing\n", + "\n", + " # Show tiling grids\n", + " ax = visualize_tilings(tilings)\n", + " \n", + " # If bounds (low, high) are specified, use them to set axis limits\n", + " if low is not None and high is not None:\n", + " ax.set_xlim(low[0], high[0])\n", + " ax.set_ylim(low[1], high[1])\n", + " else:\n", + " # Pre-render (invisible) samples to automatically set reasonable axis limits, and use them as (low, high)\n", + " ax.plot(samples[:, 0], samples[:, 1], 'o', alpha=0.0)\n", + " low = [ax.get_xlim()[0], ax.get_ylim()[0]]\n", + " high = [ax.get_xlim()[1], ax.get_ylim()[1]]\n", + "\n", + " # Map each encoded sample (which is really a list of indices) to the corresponding tiles it belongs to\n", + " tilings_extended = [np.hstack((np.array([low]).T, grid, np.array([high]).T)) for grid in tilings] # add low and high ends\n", + " tile_centers = [(grid_extended[:, 1:] + grid_extended[:, :-1]) / 2 for grid_extended in tilings_extended] # compute center of each tile\n", + " tile_toplefts = [grid_extended[:, :-1] for grid_extended in tilings_extended] # compute topleft of each tile\n", + " tile_bottomrights = [grid_extended[:, 1:] for grid_extended in tilings_extended] # compute bottomright of each tile\n", + "\n", + " prop_cycle = plt.rcParams['axes.prop_cycle']\n", + " colors = prop_cycle.by_key()['color']\n", + " for sample, encoded_sample in zip(samples, encoded_samples):\n", + " for i, tile in enumerate(encoded_sample):\n", + " # Shade the entire tile with a rectangle\n", + " topleft = tile_toplefts[i][0][tile[0]], tile_toplefts[i][1][tile[1]]\n", + " bottomright = tile_bottomrights[i][0][tile[0]], tile_bottomrights[i][1][tile[1]]\n", + " ax.add_patch(Rectangle(topleft, bottomright[0] - topleft[0], bottomright[1] - topleft[1],\n", + " color=colors[i], alpha=0.33))\n", + "\n", + " # In case sample is outside tile bounds, it may not have been highlighted properly\n", + " if any(sample < topleft) or any(sample > bottomright):\n", + " # So plot a point in the center of the tile and draw a connecting line\n", + " cx, cy = tile_centers[i][0][tile[0]], tile_centers[i][1][tile[1]]\n", + " ax.add_line(Line2D([sample[0], cx], [sample[1], cy], color=colors[i]))\n", + " ax.plot(cx, cy, 's', color=colors[i])\n", + " \n", + " # Finally, plot original samples\n", + " ax.plot(samples[:, 0], samples[:, 1], 'o', color='r')\n", + "\n", + " ax.margins(x=0, y=0) # remove unnecessary margins\n", + " ax.set_title(\"Tile-encoded samples\")\n", + " return ax\n", + "\n", + "visualize_encoded_samples(samples, encoded_samples, tilings);" + ] + }, + { + "cell_type": "code", + "execution_count": 74, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "----\n", + "[array([-0.866, -0.666, -0.466, -0.266, -0.066, 0.134, 0.334, 0.534, 0.734]), array([-4.33, -3.33, -2.33, -1.33, -0.33, 0.67, 1.67, 2.67, 3.67])]\n", + "----\n", + "[array([-0.8, -0.6, -0.4, -0.2, 0. , 0.2, 0.4, 0.6, 0.8]), array([-4., -3., -2., -1., 0., 1., 2., 3., 4.])]\n", + "----\n", + "[array([-0.734, -0.534, -0.334, -0.134, 0.066, 0.266, 0.466, 0.666, 0.866]), array([-3.67, -2.67, -1.67, -0.67, 0.33, 1.33, 2.33, 3.33, 4.33])]\n" + ] + } + ], + "source": [ + "# Practice\n", + "for tiling in tilings:\n", + " print('----')\n", + " print(tiling)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Inspect the results and make sure you understand how the corresponding tiles are being chosen. Note that some samples may have one or more tiles in common.\n", + "\n", + "### 5. Q-Table with Tile Coding\n", + "\n", + "The next step is to design a special Q-table that is able to utilize this tile coding scheme. It should have the same kind of interface as a regular table, i.e. given a `` pair, it should return a ``. Similarly, it should also allow you to update the `` for a given `` pair (note that this should update all the tiles that `` belongs to).\n", + "\n", + "The `` supplied here is assumed to be from the original continuous state space, and `` is discrete (and integer index). The Q-table should internally convert the `` to its tile-coded representation when required." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "class QTable:\n", + " \"\"\"Simple Q-table.\"\"\"\n", + "\n", + " def __init__(self, state_size, action_size):\n", + " \"\"\"Initialize Q-table.\n", + " \n", + " Parameters\n", + " ----------\n", + " state_size : tuple\n", + " Number of discrete values along each dimension of state space.\n", + " action_size : int\n", + " Number of discrete actions in action space.\n", + " \"\"\"\n", + " self.state_size = state_size\n", + " self.action_size = action_size\n", + "\n", + " # TODO: Create Q-table, initialize all Q-values to zero\n", + " # Note: If state_size = (9, 9), action_size = 2, q_table.shape should be (9, 9, 2)\n", + " q_table = np.zeros( self.state_size + (self.action_size,) )\n", + " \n", + " print(\"QTable(): size =\", self.q_table.shape)\n", + "\n", + "\n", + "class TiledQTable:\n", + " \"\"\"Composite Q-table with an internal tile coding scheme.\"\"\"\n", + " \n", + " def __init__(self, low, high, tiling_specs, action_size):\n", + " \"\"\"Create tilings and initialize internal Q-table(s).\n", + " \n", + " Parameters\n", + " ----------\n", + " low : array_like\n", + " Lower bounds for each dimension of state space.\n", + " high : array_like\n", + " Upper bounds for each dimension of state space.\n", + " tiling_specs : list of tuples\n", + " A sequence of (bins, offsets) to be passed to create_tilings() along with low, high.\n", + " action_size : int\n", + " Number of discrete actions in action space.\n", + " \"\"\"\n", + " self.tilings = create_tilings(low, high, tiling_specs)\n", + " self.state_sizes = [tuple(len(splits)+1 for splits in tiling_grid) for tiling_grid in self.tilings]\n", + " self.action_size = action_size\n", + " self.q_tables = [QTable(state_size, self.action_size) for state_size in self.state_sizes]\n", + " print(\"TiledQTable(): no. of internal tables = \", len(self.q_tables))\n", + " \n", + " def get(self, state, action):\n", + " \"\"\"Get Q-value for given pair.\n", + " \n", + " Parameters\n", + " ----------\n", + " state : array_like\n", + " Vector representing the state in the original continuous space.\n", + " action : int\n", + " Index of desired action.\n", + " \n", + " Returns\n", + " -------\n", + " value : float\n", + " Q-value of given pair, averaged from all internal Q-tables.\n", + " \"\"\"\n", + " # TODO: Encode state to get tile indices\n", + " \n", + " # TODO: Retrieve q-value for each tiling, and return their average\n", + " pass\n", + "\n", + " def update(self, state, action, value, alpha=0.1):\n", + " \"\"\"Soft-update Q-value for given pair to value.\n", + " \n", + " Instead of overwriting Q(state, action) with value, perform soft-update:\n", + " Q(state, action) = alpha * value + (1.0 - alpha) * Q(state, action)\n", + " \n", + " Parameters\n", + " ----------\n", + " state : array_like\n", + " Vector representing the state in the original continuous space.\n", + " action : int\n", + " Index of desired action.\n", + " value : float\n", + " Desired Q-value for pair.\n", + " alpha : float\n", + " Update factor to perform soft-update, in [0.0, 1.0] range.\n", + " \"\"\"\n", + " # TODO: Encode state to get tile indices\n", + " \n", + " # TODO: Update q-value for each tiling by update factor alpha\n", + " pass\n", + "\n", + "\n", + "# Test with a sample Q-table\n", + "tq = TiledQTable(low, high, tiling_specs, 2)\n", + "s1 = 3; s2 = 4; a = 0; q = 1.0\n", + "print(\"[GET] Q({}, {}) = {}\".format(samples[s1], a, tq.get(samples[s1], a))) # check value at sample = s1, action = a\n", + "print(\"[UPDATE] Q({}, {}) = {}\".format(samples[s2], a, q)); tq.update(samples[s2], a, q) # update value for sample with some common tile(s)\n", + "print(\"[GET] Q({}, {}) = {}\".format(samples[s1], a, tq.get(samples[s1], a))) # check value again, should be slightly updated" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If you update the q-value for a particular state (say, `(0.25, -1.91)`) and action (say, `0`), then you should notice the q-value of a nearby state (e.g. `(0.15, -1.75)` and same action) has changed as well! This is how tile-coding is able to generalize values across the state space better than a single uniform grid." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 6. Implement a Q-Learning Agent using Tile-Coding\n", + "\n", + "Now it's your turn to apply this discretization technique to design and test a complete learning agent! " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "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.6.7" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/tile-coding/.ipynb_checkpoints/Tile_Coding_Solution-checkpoint.ipynb b/tile-coding/.ipynb_checkpoints/Tile_Coding_Solution-checkpoint.ipynb new file mode 100644 index 0000000..89dbb4e --- /dev/null +++ b/tile-coding/.ipynb_checkpoints/Tile_Coding_Solution-checkpoint.ipynb @@ -0,0 +1,810 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Tile Coding\n", + "---\n", + "\n", + "Tile coding is an innovative way of discretizing a continuous space that enables better generalization compared to a single grid-based approach. The fundamental idea is to create several overlapping grids or _tilings_; then for any given sample value, you need only check which tiles it lies in. You can then encode the original continuous value by a vector of integer indices or bits that identifies each activated tile.\n", + "\n", + "### 1. Import the Necessary Packages" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "# Import common libraries\n", + "import sys\n", + "import gym\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import pandas as pd\n", + "\n", + "# Set plotting options\n", + "%matplotlib inline\n", + "plt.style.use('ggplot')\n", + "np.set_printoptions(precision=3, linewidth=120)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2. Specify the Environment, and Explore the State and Action Spaces\n", + "\n", + "We'll use [OpenAI Gym](https://gym.openai.com/) environments to test and develop our algorithms. These simulate a variety of classic as well as contemporary reinforcement learning tasks. Let's begin with an environment that has a continuous state space, but a discrete action space." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[33mWARN: gym.spaces.Box autodetected dtype as . Please provide explicit dtype.\u001b[0m\n", + "State space: Box(6,)\n", + "- low: [ -1. -1. -1. -1. -12.566 -28.274]\n", + "- high: [ 1. 1. 1. 1. 12.566 28.274]\n", + "Action space: Discrete(3)\n" + ] + } + ], + "source": [ + "# Create an environment\n", + "env = gym.make('Acrobot-v1')\n", + "env.seed(505);\n", + "\n", + "# Explore state (observation) space\n", + "print(\"State space:\", env.observation_space)\n", + "print(\"- low:\", env.observation_space.low)\n", + "print(\"- high:\", env.observation_space.high)\n", + "\n", + "# Explore action space\n", + "print(\"Action space:\", env.action_space)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that the state space is multi-dimensional, with most dimensions ranging from -1 to 1 (positions of the two joints), while the final two dimensions have a larger range. How do we discretize such a space using tiles?\n", + "\n", + "### 3. Tiling\n", + "\n", + "Let's first design a way to create a single tiling for a given state space. This is very similar to a uniform grid! The only difference is that you should include an offset for each dimension that shifts the split points.\n", + "\n", + "For instance, if `low = [-1.0, -5.0]`, `high = [1.0, 5.0]`, `bins = (10, 10)`, and `offsets = (-0.1, 0.5)`, then return a list of 2 NumPy arrays (2 dimensions) each containing the following split points (9 split points per dimension):\n", + "\n", + "```\n", + "[array([-0.9, -0.7, -0.5, -0.3, -0.1, 0.1, 0.3, 0.5, 0.7]),\n", + " array([-3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 4.5])]\n", + "```\n", + "\n", + "Notice how the split points for the first dimension are offset by `-0.1`, and for the second dimension are offset by `+0.5`. This might mean that some of our tiles, especially along the perimeter, are partially outside the valid state space, but that is unavoidable and harmless." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Tiling: [, ] / + () => \n", + " [-1.0, 1.0] / 10 + (-0.1) => [-0.9 -0.7 -0.5 -0.3 -0.1 0.1 0.3 0.5 0.7]\n", + " [-5.0, 5.0] / 10 + (0.5) => [-3.5 -2.5 -1.5 -0.5 0.5 1.5 2.5 3.5 4.5]\n" + ] + }, + { + "data": { + "text/plain": [ + "[array([-0.9, -0.7, -0.5, -0.3, -0.1, 0.1, 0.3, 0.5, 0.7]),\n", + " array([-3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 4.5])]" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "def create_tiling_grid(low, high, bins=(10, 10), offsets=(0.0, 0.0)):\n", + " \"\"\"Define a uniformly-spaced grid that can be used for tile-coding a space.\n", + " \n", + " Parameters\n", + " ----------\n", + " low : array_like\n", + " Lower bounds for each dimension of the continuous space.\n", + " high : array_like\n", + " Upper bounds for each dimension of the continuous space.\n", + " bins : tuple\n", + " Number of bins or tiles along each corresponding dimension.\n", + " offsets : tuple\n", + " Split points for each dimension should be offset by these values.\n", + " \n", + " Returns\n", + " -------\n", + " grid : list of array_like\n", + " A list of arrays containing split points for each dimension.\n", + " \"\"\"\n", + " # TODO: Implement this\n", + " grid = [np.linspace(low[dim], high[dim], bins[dim] + 1)[1:-1] + offsets[dim] for dim in range(len(bins))]\n", + " print(\"Tiling: [, ] / + () => \")\n", + " for l, h, b, o, splits in zip(low, high, bins, offsets, grid):\n", + " print(\" [{}, {}] / {} + ({}) => {}\".format(l, h, b, o, splits))\n", + " return grid\n", + "\n", + "\n", + "low = [-1.0, -5.0]\n", + "high = [1.0, 5.0]\n", + "create_tiling_grid(low, high, bins=(10, 10), offsets=(-0.1, 0.5)) # [test]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You can now use this function to define a set of tilings that are a little offset from each other." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Tiling: [, ] / + () => \n", + " [-1.0, 1.0] / 10 + (-0.066) => [-0.866 -0.666 -0.466 -0.266 -0.066 0.134 0.334 0.534 0.734]\n", + " [-5.0, 5.0] / 10 + (-0.33) => [-4.33 -3.33 -2.33 -1.33 -0.33 0.67 1.67 2.67 3.67]\n", + "Tiling: [, ] / + () => \n", + " [-1.0, 1.0] / 10 + (0.0) => [-0.8 -0.6 -0.4 -0.2 0. 0.2 0.4 0.6 0.8]\n", + " [-5.0, 5.0] / 10 + (0.0) => [-4. -3. -2. -1. 0. 1. 2. 3. 4.]\n", + "Tiling: [, ] / + () => \n", + " [-1.0, 1.0] / 10 + (0.066) => [-0.734 -0.534 -0.334 -0.134 0.066 0.266 0.466 0.666 0.866]\n", + " [-5.0, 5.0] / 10 + (0.33) => [-3.67 -2.67 -1.67 -0.67 0.33 1.33 2.33 3.33 4.33]\n" + ] + } + ], + "source": [ + "def create_tilings(low, high, tiling_specs):\n", + " \"\"\"Define multiple tilings using the provided specifications.\n", + "\n", + " Parameters\n", + " ----------\n", + " low : array_like\n", + " Lower bounds for each dimension of the continuous space.\n", + " high : array_like\n", + " Upper bounds for each dimension of the continuous space.\n", + " tiling_specs : list of tuples\n", + " A sequence of (bins, offsets) to be passed to create_tiling_grid().\n", + "\n", + " Returns\n", + " -------\n", + " tilings : list\n", + " A list of tilings (grids), each produced by create_tiling_grid().\n", + " \"\"\"\n", + " # TODO: Implement this\n", + " return [create_tiling_grid(low, high, bins, offsets) for bins, offsets in tiling_specs]\n", + "\n", + "\n", + "# Tiling specs: [(, ), ...]\n", + "tiling_specs = [((10, 10), (-0.066, -0.33)),\n", + " ((10, 10), (0.0, 0.0)),\n", + " ((10, 10), (0.066, 0.33))]\n", + "tilings = create_tilings(low, high, tiling_specs)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "It may be hard to gauge whether you are getting desired results or not. So let's try to visualize these tilings." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from matplotlib.lines import Line2D\n", + "\n", + "def visualize_tilings(tilings):\n", + " \"\"\"Plot each tiling as a grid.\"\"\"\n", + " prop_cycle = plt.rcParams['axes.prop_cycle']\n", + " colors = prop_cycle.by_key()['color']\n", + " linestyles = ['-', '--', ':']\n", + " legend_lines = []\n", + "\n", + " fig, ax = plt.subplots(figsize=(10, 10))\n", + " for i, grid in enumerate(tilings):\n", + " for x in grid[0]:\n", + " l = ax.axvline(x=x, color=colors[i % len(colors)], linestyle=linestyles[i % len(linestyles)], label=i)\n", + " for y in grid[1]:\n", + " l = ax.axhline(y=y, color=colors[i % len(colors)], linestyle=linestyles[i % len(linestyles)])\n", + " legend_lines.append(l)\n", + " ax.grid('off')\n", + " ax.legend(legend_lines, [\"Tiling #{}\".format(t) for t in range(len(legend_lines))], facecolor='white', framealpha=0.9)\n", + " ax.set_title(\"Tilings\")\n", + " return ax # return Axis object to draw on later, if needed\n", + "\n", + "\n", + "visualize_tilings(tilings);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Great! Now that we have a way to generate these tilings, we can next write our encoding function that will convert any given continuous state value to a discrete vector.\n", + "\n", + "### 4. Tile Encoding\n", + "\n", + "Implement the following to produce a vector that contains the indices for each tile that the input state value belongs to. The shape of the vector can be the same as the arrangment of tiles you have, or it can be ultimately flattened for convenience.\n", + "\n", + "You can use the same `discretize()` function here from grid-based discretization, and simply call it for each tiling." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Samples:\n", + "[(-1.2, -5.1), (-0.75, 3.25), (-0.5, 0.0), (0.25, -1.9), (0.15, -1.75), (0.75, 2.5), (0.7, -3.7), (1.0, 5.0)]\n", + "\n", + "Encoded samples:\n", + "[[(0, 0), (0, 0), (0, 0)], [(1, 8), (1, 8), (0, 7)], [(2, 5), (2, 5), (2, 4)], [(6, 3), (6, 3), (5, 2)], [(6, 3), (5, 3), (5, 2)], [(9, 7), (8, 7), (8, 7)], [(8, 1), (8, 1), (8, 0)], [(9, 9), (9, 9), (9, 9)]]\n" + ] + } + ], + "source": [ + "def discretize(sample, grid):\n", + " \"\"\"Discretize a sample as per given grid.\n", + " \n", + " Parameters\n", + " ----------\n", + " sample : array_like\n", + " A single sample from the (original) continuous space.\n", + " grid : list of array_like\n", + " A list of arrays containing split points for each dimension.\n", + " \n", + " Returns\n", + " -------\n", + " discretized_sample : array_like\n", + " A sequence of integers with the same number of dimensions as sample.\n", + " \"\"\"\n", + " # TODO: Implement this\n", + " return tuple(int(np.digitize(s, g)) for s, g in zip(sample, grid)) # apply along each dimension\n", + "\n", + "\n", + "def tile_encode(sample, tilings, flatten=False):\n", + " \"\"\"Encode given sample using tile-coding.\n", + " \n", + " Parameters\n", + " ----------\n", + " sample : array_like\n", + " A single sample from the (original) continuous space.\n", + " tilings : list\n", + " A list of tilings (grids), each produced by create_tiling_grid().\n", + " flatten : bool\n", + " If true, flatten the resulting binary arrays into a single long vector.\n", + "\n", + " Returns\n", + " -------\n", + " encoded_sample : list or array_like\n", + " A list of binary vectors, one for each tiling, or flattened into one.\n", + " \"\"\"\n", + " # TODO: Implement this\n", + " encoded_sample = [discretize(sample, grid) for grid in tilings]\n", + " return np.concatenate(encoded_sample) if flatten else encoded_sample\n", + "\n", + "\n", + "# Test with some sample values\n", + "samples = [(-1.2 , -5.1 ),\n", + " (-0.75, 3.25),\n", + " (-0.5 , 0.0 ),\n", + " ( 0.25, -1.9 ),\n", + " ( 0.15, -1.75),\n", + " ( 0.75, 2.5 ),\n", + " ( 0.7 , -3.7 ),\n", + " ( 1.0 , 5.0 )]\n", + "encoded_samples = [tile_encode(sample, tilings) for sample in samples]\n", + "print(\"\\nSamples:\", repr(samples), sep=\"\\n\")\n", + "print(\"\\nEncoded samples:\", repr(encoded_samples), sep=\"\\n\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that we did not flatten the encoding above, which is why each sample's representation is a pair of indices for each tiling. This makes it easy to visualize it using the tilings." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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yAfx1ot460W89eNU96BvutRUpZGkahxMmjSJ/v7+Yb97++23eeqpp/jP//xPHnvsMY4cOUJTUxNHjhzhb//2b/mbv/kbAB5//HF+8YtfMGfOHGpra7n44ouzkrX9+/dTX19Pe3s75eXl/OIXvyAUClFXV8frr7/O2rVr+cxnPsOUKeYaKJ/5zGf4/e9/zx133KHnBRgHt59Xa7nvwsX2nYsXb72It17EWy/5eIN97vW1YfaE3Jb7l5b3EJeaKkCSqoKxZ88e3nzzTfx+P4sXL+a+++5j27ZtvPrqq2zevJlEIsGyZcu4+OKLs/ouWLCALVu2cPPNN/PCCy/wzDPPsHTpUm688UYAWlpamDNnTmb72bNn09LSou25jYclM8st9506w746AvHWi3jrRbz1ko832Od+YXmcaMr6OlVFxWEMwyU1VUzQpKr/Z08RP9BY0Mcsmr+QSf/31wv6mEO54YYb8Hq9eL1epk2bxtGjR1m3bh0333xz5qrGgSTpWHR2dlJTU8POnTu59957M783jOy1P+xaj+pYNPVEADhjSu7fVoKBJADlFda/KVlFvPUi3noRb73k4w32uTdF3ByNuagpsrbOlFlT5calnFcPVmiksqxAeL2Di7253W4SicSoydBo3H///Vx44YU0NjZSV1fH73//e2655RaefvppAObMmUNzc3Nm+5aWFmbNmlXYJ5Anz285yvNbjlrqu21TiG2bQgU2Gh/irRfx1ot46yUfb7DP/fmj5bzRb/30XdA3nUhocgGNnMuEnKk6kTNKOrn88su5//77WbVqFYlEgtdff5177rkna7tnn32WX/3qVxw+fJjbbruNVatW8dJLL2Xar7vuOr797W/T29sLwBtvvMETTzyh7XmcaM46z5nrk4m3XsRbL+KtH6e6l5b3yDpVaSZkUnWysGzZMm666SYuvvjizBINkyZNGnXbd999l7vuuov333+flStXDmubMmUKjzzyCCtWrADg29/+dqZo/WSgdpozh6F460W89SLe+nGqu9RUDeLMd/AE8+ijjw6LB678mzdvHtu2bQPgyiuv5Morrxx1+4FtAB566CEeffRRQqEQV111FQ8++OCo+/zxj38MwPLly0dt//KXv8yXv/zl3J+MAwj4zDqCiir9NRD5IN56EW+9iLd+nOqeTBSRSrpxuaSmSmqqTjD33XcfdXV1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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from matplotlib.patches import Rectangle\n", + "\n", + "def visualize_encoded_samples(samples, encoded_samples, tilings, low=None, high=None):\n", + " \"\"\"Visualize samples by activating the respective tiles.\"\"\"\n", + " samples = np.array(samples) # for ease of indexing\n", + "\n", + " # Show tiling grids\n", + " ax = visualize_tilings(tilings)\n", + " \n", + " # If bounds (low, high) are specified, use them to set axis limits\n", + " if low is not None and high is not None:\n", + " ax.set_xlim(low[0], high[0])\n", + " ax.set_ylim(low[1], high[1])\n", + " else:\n", + " # Pre-render (invisible) samples to automatically set reasonable axis limits, and use them as (low, high)\n", + " ax.plot(samples[:, 0], samples[:, 1], 'o', alpha=0.0)\n", + " low = [ax.get_xlim()[0], ax.get_ylim()[0]]\n", + " high = [ax.get_xlim()[1], ax.get_ylim()[1]]\n", + "\n", + " # Map each encoded sample (which is really a list of indices) to the corresponding tiles it belongs to\n", + " tilings_extended = [np.hstack((np.array([low]).T, grid, np.array([high]).T)) for grid in tilings] # add low and high ends\n", + " tile_centers = [(grid_extended[:, 1:] + grid_extended[:, :-1]) / 2 for grid_extended in tilings_extended] # compute center of each tile\n", + " tile_toplefts = [grid_extended[:, :-1] for grid_extended in tilings_extended] # compute topleft of each tile\n", + " tile_bottomrights = [grid_extended[:, 1:] for grid_extended in tilings_extended] # compute bottomright of each tile\n", + "\n", + " prop_cycle = plt.rcParams['axes.prop_cycle']\n", + " colors = prop_cycle.by_key()['color']\n", + " for sample, encoded_sample in zip(samples, encoded_samples):\n", + " for i, tile in enumerate(encoded_sample):\n", + " # Shade the entire tile with a rectangle\n", + " topleft = tile_toplefts[i][0][tile[0]], tile_toplefts[i][1][tile[1]]\n", + " bottomright = tile_bottomrights[i][0][tile[0]], tile_bottomrights[i][1][tile[1]]\n", + " ax.add_patch(Rectangle(topleft, bottomright[0] - topleft[0], bottomright[1] - topleft[1],\n", + " color=colors[i], alpha=0.33))\n", + "\n", + " # In case sample is outside tile bounds, it may not have been highlighted properly\n", + " if any(sample < topleft) or any(sample > bottomright):\n", + " # So plot a point in the center of the tile and draw a connecting line\n", + " cx, cy = tile_centers[i][0][tile[0]], tile_centers[i][1][tile[1]]\n", + " ax.add_line(Line2D([sample[0], cx], [sample[1], cy], color=colors[i]))\n", + " ax.plot(cx, cy, 's', color=colors[i])\n", + " \n", + " # Finally, plot original samples\n", + " ax.plot(samples[:, 0], samples[:, 1], 'o', color='r')\n", + "\n", + " ax.margins(x=0, y=0) # remove unnecessary margins\n", + " ax.set_title(\"Tile-encoded samples\")\n", + " return ax\n", + "\n", + "visualize_encoded_samples(samples, encoded_samples, tilings);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Inspect the results and make sure you understand how the corresponding tiles are being chosen. Note that some samples may have one or more tiles in common.\n", + "\n", + "### 5. Q-Table with Tile Coding\n", + "\n", + "The next step is to design a special Q-table that is able to utilize this tile coding scheme. It should have the same kind of interface as a regular table, i.e. given a `` pair, it should return a ``. Similarly, it should also allow you to update the `` for a given `` pair (note that this should update all the tiles that `` belongs to).\n", + "\n", + "The `` supplied here is assumed to be from the original continuous state space, and `` is discrete (and integer index). The Q-table should internally convert the `` to its tile-coded representation when required." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Tiling: [, ] / + () => \n", + " [-1.0, 1.0] / 10 + (-0.066) => [-0.866 -0.666 -0.466 -0.266 -0.066 0.134 0.334 0.534 0.734]\n", + " [-5.0, 5.0] / 10 + (-0.33) => [-4.33 -3.33 -2.33 -1.33 -0.33 0.67 1.67 2.67 3.67]\n", + "Tiling: [, ] / + () => \n", + " [-1.0, 1.0] / 10 + (0.0) => [-0.8 -0.6 -0.4 -0.2 0. 0.2 0.4 0.6 0.8]\n", + " [-5.0, 5.0] / 10 + (0.0) => [-4. -3. -2. -1. 0. 1. 2. 3. 4.]\n", + "Tiling: [, ] / + () => \n", + " [-1.0, 1.0] / 10 + (0.066) => [-0.734 -0.534 -0.334 -0.134 0.066 0.266 0.466 0.666 0.866]\n", + " [-5.0, 5.0] / 10 + (0.33) => [-3.67 -2.67 -1.67 -0.67 0.33 1.33 2.33 3.33 4.33]\n", + "QTable(): size = (10, 10, 2)\n", + "QTable(): size = (10, 10, 2)\n", + "QTable(): size = (10, 10, 2)\n", + "TiledQTable(): no. of internal tables = 3\n", + "[GET] Q((0.25, -1.9), 0) = 0.0\n", + "[UPDATE] Q((0.15, -1.75), 0) = 1.0\n", + "[GET] Q((0.25, -1.9), 0) = 0.06666666666666667\n" + ] + } + ], + "source": [ + "class QTable:\n", + " \"\"\"Simple Q-table.\"\"\"\n", + "\n", + " def __init__(self, state_size, action_size):\n", + " \"\"\"Initialize Q-table.\n", + " \n", + " Parameters\n", + " ----------\n", + " state_size : tuple\n", + " Number of discrete values along each dimension of state space.\n", + " action_size : int\n", + " Number of discrete actions in action space.\n", + " \"\"\"\n", + " self.state_size = state_size\n", + " self.action_size = action_size\n", + "\n", + " # TODO: Create Q-table, initialize all Q-values to zero\n", + " # Note: If state_size = (9, 9), action_size = 2, q_table.shape should be (9, 9, 2)\n", + " self.q_table = np.zeros(shape=(self.state_size + (self.action_size,)))\n", + " print(\"QTable(): size =\", self.q_table.shape)\n", + "\n", + "\n", + "class TiledQTable:\n", + " \"\"\"Composite Q-table with an internal tile coding scheme.\"\"\"\n", + " \n", + " def __init__(self, low, high, tiling_specs, action_size):\n", + " \"\"\"Create tilings and initialize internal Q-table(s).\n", + " \n", + " Parameters\n", + " ----------\n", + " low : array_like\n", + " Lower bounds for each dimension of state space.\n", + " high : array_like\n", + " Upper bounds for each dimension of state space.\n", + " tiling_specs : list of tuples\n", + " A sequence of (bins, offsets) to be passed to create_tilings() along with low, high.\n", + " action_size : int\n", + " Number of discrete actions in action space.\n", + " \"\"\"\n", + " self.tilings = create_tilings(low, high, tiling_specs)\n", + " self.state_sizes = [tuple(len(splits)+1 for splits in tiling_grid) for tiling_grid in self.tilings]\n", + " self.action_size = action_size\n", + " self.q_tables = [QTable(state_size, self.action_size) for state_size in self.state_sizes]\n", + " print(\"TiledQTable(): no. of internal tables = \", len(self.q_tables))\n", + " \n", + " def get(self, state, action):\n", + " \"\"\"Get Q-value for given pair.\n", + " \n", + " Parameters\n", + " ----------\n", + " state : array_like\n", + " Vector representing the state in the original continuous space.\n", + " action : int\n", + " Index of desired action.\n", + " \n", + " Returns\n", + " -------\n", + " value : float\n", + " Q-value of given pair, averaged from all internal Q-tables.\n", + " \"\"\"\n", + " # TODO: Encode state to get tile indices\n", + " encoded_state = tile_encode(state, self.tilings)\n", + " \n", + " # TODO: Retrieve q-value for each tiling, and return their average\n", + " value = 0.0\n", + " for idx, q_table in zip(encoded_state, self.q_tables):\n", + " value += q_table.q_table[tuple(idx + (action,))]\n", + " value /= len(self.q_tables)\n", + " return value\n", + " \n", + " def update(self, state, action, value, alpha=0.1):\n", + " \"\"\"Soft-update Q-value for given pair to value.\n", + " \n", + " Instead of overwriting Q(state, action) with value, perform soft-update:\n", + " Q(state, action) = alpha * value + (1.0 - alpha) * Q(state, action)\n", + " \n", + " Parameters\n", + " ----------\n", + " state : array_like\n", + " Vector representing the state in the original continuous space.\n", + " action : int\n", + " Index of desired action.\n", + " value : float\n", + " Desired Q-value for pair.\n", + " alpha : float\n", + " Update factor to perform soft-update, in [0.0, 1.0] range.\n", + " \"\"\"\n", + " # TODO: Encode state to get tile indices\n", + " encoded_state = tile_encode(state, self.tilings)\n", + " \n", + " # TODO: Update q-value for each tiling by update factor alpha\n", + " for idx, q_table in zip(encoded_state, self.q_tables):\n", + " value_ = q_table.q_table[tuple(idx + (action,))] # current value\n", + " q_table.q_table[tuple(idx + (action,))] = alpha * value + (1.0 - alpha) * value_\n", + "\n", + "\n", + "# Test with a sample Q-table\n", + "tq = TiledQTable(low, high, tiling_specs, 2)\n", + "s1 = 3; s2 = 4; a = 0; q = 1.0\n", + "print(\"[GET] Q({}, {}) = {}\".format(samples[s1], a, tq.get(samples[s1], a))) # check value at sample = s1, action = a\n", + "print(\"[UPDATE] Q({}, {}) = {}\".format(samples[s2], a, q)); tq.update(samples[s2], a, q) # update value for sample with some common tile(s)\n", + "print(\"[GET] Q({}, {}) = {}\".format(samples[s1], a, tq.get(samples[s1], a))) # check value again, should be slightly updated" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If you update the q-value for a particular state (say, `(0.25, -1.91)`) and action (say, `0`), then you should notice the q-value of a nearby state (e.g. `(0.15, -1.75)` and same action) has changed as well! This is how tile-coding is able to generalize values across the state space better than a single uniform grid." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 6. Implement a Q-Learning Agent using Tile-Coding\n", + "\n", + "Now it's your turn to apply this discretization technique to design and test a complete learning agent! " + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "class QLearningAgent:\n", + " \"\"\"Q-Learning agent that can act on a continuous state space by discretizing it.\"\"\"\n", + "\n", + " def __init__(self, env, tq, alpha=0.02, gamma=0.99,\n", + " epsilon=1.0, epsilon_decay_rate=0.9995, min_epsilon=.01, seed=0):\n", + " \"\"\"Initialize variables, create grid for discretization.\"\"\"\n", + " # Environment info\n", + " self.env = env\n", + " self.tq = tq \n", + " self.state_sizes = tq.state_sizes # list of state sizes for each tiling\n", + " self.action_size = self.env.action_space.n # 1-dimensional discrete action space\n", + " self.seed = np.random.seed(seed)\n", + " print(\"Environment:\", self.env)\n", + " print(\"State space sizes:\", self.state_sizes)\n", + " print(\"Action space size:\", self.action_size)\n", + " \n", + " # Learning parameters\n", + " self.alpha = alpha # learning rate\n", + " self.gamma = gamma # discount factor\n", + " self.epsilon = self.initial_epsilon = epsilon # initial exploration rate\n", + " self.epsilon_decay_rate = epsilon_decay_rate # how quickly should we decrease epsilon\n", + " self.min_epsilon = min_epsilon\n", + "\n", + " def reset_episode(self, state):\n", + " \"\"\"Reset variables for a new episode.\"\"\"\n", + " # Gradually decrease exploration rate\n", + " self.epsilon *= self.epsilon_decay_rate\n", + " self.epsilon = max(self.epsilon, self.min_epsilon)\n", + " \n", + " self.last_state = state\n", + " Q_s = [self.tq.get(state, action) for action in range(self.action_size)]\n", + " self.last_action = np.argmax(Q_s)\n", + " return self.last_action\n", + " \n", + " def reset_exploration(self, epsilon=None):\n", + " \"\"\"Reset exploration rate used when training.\"\"\"\n", + " self.epsilon = epsilon if epsilon is not None else self.initial_epsilon\n", + "\n", + " def act(self, state, reward=None, done=None, mode='train'):\n", + " \"\"\"Pick next action and update internal Q table (when mode != 'test').\"\"\"\n", + " Q_s = [self.tq.get(state, action) for action in range(self.action_size)]\n", + " # Pick the best action from Q table\n", + " greedy_action = np.argmax(Q_s)\n", + " if mode == 'test':\n", + " # Test mode: Simply produce an action\n", + " action = greedy_action\n", + " else:\n", + " # Train mode (default): Update Q table, pick next action\n", + " # Note: We update the Q table entry for the *last* (state, action) pair with current state, reward\n", + " value = reward + self.gamma * max(Q_s)\n", + " self.tq.update(self.last_state, self.last_action, value, self.alpha)\n", + "\n", + " # Exploration vs. exploitation\n", + " do_exploration = np.random.uniform(0, 1) < self.epsilon\n", + " if do_exploration:\n", + " # Pick a random action\n", + " action = np.random.randint(0, self.action_size)\n", + " else:\n", + " # Pick the greedy action\n", + " action = greedy_action\n", + "\n", + " # Roll over current state, action for next step\n", + " self.last_state = state\n", + " self.last_action = action\n", + " return action" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Tiling: [, ] / + () => \n", + " [-1.0, 1.0] / 5 + (-0.13333334028720856) => [-0.733 -0.333 0.067 0.467]\n", + " [-1.0, 1.0] / 5 + (-0.13333334028720856) => [-0.733 -0.333 0.067 0.467]\n", + " [-1.0, 1.0] / 5 + (-0.13333334028720856) => [-0.733 -0.333 0.067 0.467]\n", + " [-1.0, 1.0] / 5 + (-0.13333334028720856) => [-0.733 -0.333 0.067 0.467]\n", + " [-12.566370964050293, 12.566370964050293] / 5 + (-1.675516128540039) => [-9.215 -4.189 0.838 5.864]\n", + " [-28.274333953857422, 28.274333953857422] / 5 + (-3.769911289215088) => [-20.735 -9.425 1.885 13.195]\n", + "Tiling: [, ] / + () => \n", + " [-1.0, 1.0] / 5 + (0.0) => [-0.6 -0.2 0.2 0.6]\n", + " [-1.0, 1.0] / 5 + (0.0) => [-0.6 -0.2 0.2 0.6]\n", + " [-1.0, 1.0] / 5 + (0.0) => [-0.6 -0.2 0.2 0.6]\n", + " [-1.0, 1.0] / 5 + (0.0) => [-0.6 -0.2 0.2 0.6]\n", + " [-12.566370964050293, 12.566370964050293] / 5 + (0.0) => [-7.54 -2.513 2.513 7.54 ]\n", + " [-28.274333953857422, 28.274333953857422] / 5 + (0.0) => [-16.965 -5.655 5.655 16.965]\n", + "Tiling: [, ] / + () => \n", + " [-1.0, 1.0] / 5 + (0.13333334028720856) => [-0.467 -0.067 0.333 0.733]\n", + " [-1.0, 1.0] / 5 + (0.13333334028720856) => [-0.467 -0.067 0.333 0.733]\n", + " [-1.0, 1.0] / 5 + (0.13333334028720856) => [-0.467 -0.067 0.333 0.733]\n", + " [-1.0, 1.0] / 5 + (0.13333334028720856) => [-0.467 -0.067 0.333 0.733]\n", + " [-12.566370964050293, 12.566370964050293] / 5 + (1.675516128540039) => [-5.864 -0.838 4.189 9.215]\n", + " [-28.274333953857422, 28.274333953857422] / 5 + (3.769911289215088) => [-13.195 -1.885 9.425 20.735]\n", + "QTable(): size = (5, 5, 5, 5, 5, 5, 3)\n", + "QTable(): size = (5, 5, 5, 5, 5, 5, 3)\n", + "QTable(): size = (5, 5, 5, 5, 5, 5, 3)\n", + "TiledQTable(): no. of internal tables = 3\n", + "Environment: >>\n", + "State space sizes: [(5, 5, 5, 5, 5, 5), (5, 5, 5, 5, 5, 5), (5, 5, 5, 5, 5, 5)]\n", + "Action space size: 3\n" + ] + } + ], + "source": [ + "n_bins = 5\n", + "bins = tuple([n_bins]*env.observation_space.shape[0])\n", + "offset_pos = (env.observation_space.high - env.observation_space.low)/(3*n_bins)\n", + "\n", + "tiling_specs = [(bins, -offset_pos),\n", + " (bins, tuple([0.0]*env.observation_space.shape[0])),\n", + " (bins, offset_pos)]\n", + "\n", + "tq = TiledQTable(env.observation_space.low, \n", + " env.observation_space.high, \n", + " tiling_specs, \n", + " env.action_space.n)\n", + "agent = QLearningAgent(env, tq)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Episode 10000/10000 | Max Average Score: -242.47" + ] + } + ], + "source": [ + "def run(agent, env, num_episodes=10000, mode='train'):\n", + " \"\"\"Run agent in given reinforcement learning environment and return scores.\"\"\"\n", + " scores = []\n", + " max_avg_score = -np.inf\n", + " for i_episode in range(1, num_episodes+1):\n", + " # Initialize episode\n", + " state = env.reset()\n", + " action = agent.reset_episode(state)\n", + " total_reward = 0\n", + " done = False\n", + "\n", + " # Roll out steps until done\n", + " while not done:\n", + " state, reward, done, info = env.step(action)\n", + " total_reward += reward\n", + " action = agent.act(state, reward, done, mode)\n", + "\n", + " # Save final score\n", + " scores.append(total_reward)\n", + "\n", + " # Print episode stats\n", + " if mode == 'train':\n", + " if len(scores) > 100:\n", + " avg_score = np.mean(scores[-100:])\n", + " if avg_score > max_avg_score:\n", + " max_avg_score = avg_score\n", + " if i_episode % 100 == 0:\n", + " print(\"\\rEpisode {}/{} | Max Average Score: {}\".format(i_episode, num_episodes, max_avg_score), end=\"\")\n", + " sys.stdout.flush()\n", + " return scores\n", + "\n", + "scores = run(agent, env)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "def plot_scores(scores, rolling_window=100):\n", + " \"\"\"Plot scores and optional rolling mean using specified window.\"\"\"\n", + " plt.plot(scores); plt.title(\"Scores\");\n", + " rolling_mean = pd.Series(scores).rolling(rolling_window).mean()\n", + " plt.plot(rolling_mean);\n", + " return rolling_mean\n", + "\n", + "rolling_mean = plot_scores(scores)" + ] + } + ], + "metadata": { + "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.6.7" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/tile-coding/README.md b/tile-coding/README.md new file mode 100644 index 0000000..f7097ba --- /dev/null +++ b/tile-coding/README.md @@ -0,0 +1,5 @@ +# Tile Coding + +### Instructions + +Follow the instructions in `Tile_Coding.ipynb` to learn how to discretize continuous state spaces, to use tabular solution methods to solve complex tasks. The corresponding solutions can be found in `Tile_Coding_Solution.ipynb`. diff --git a/tile-coding/Tile_Coding.ipynb b/tile-coding/Tile_Coding.ipynb new file mode 100644 index 0000000..fe6d1d6 --- /dev/null +++ b/tile-coding/Tile_Coding.ipynb @@ -0,0 +1,801 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Tile Coding\n", + "---\n", + "\n", + "Tile coding is an innovative way of discretizing a continuous space that enables better generalization compared to a single grid-based approach. The fundamental idea is to create several overlapping grids or _tilings_; then for any given sample value, you need only check which tiles it lies in. You can then encode the original continuous value by a vector of integer indices or bits that identifies each activated tile.\n", + "\n", + "### 1. Import the Necessary Packages" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "# Import common libraries\n", + "import sys\n", + "import gym\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "\n", + "# Set plotting options\n", + "%matplotlib inline\n", + "plt.style.use('ggplot')\n", + "np.set_printoptions(precision=3, linewidth=120)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2. Specify the Environment, and Explore the State and Action Spaces\n", + "\n", + "We'll use [OpenAI Gym](https://gym.openai.com/) environments to test and develop our algorithms. These simulate a variety of classic as well as contemporary reinforcement learning tasks. Let's begin with an environment that has a continuous state space, but a discrete action space." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "State space: Box(6,)\n", + "- low: [ -1. -1. -1. -1. -12.566 -28.274]\n", + "- high: [ 1. 1. 1. 1. 12.566 28.274]\n", + "Action space: Discrete(3)\n" + ] + } + ], + "source": [ + "# Create an environment\n", + "env = gym.make('Acrobot-v1')\n", + "env.seed(505);\n", + "\n", + "# Explore state (observation) space\n", + "print(\"State space:\", env.observation_space)\n", + "print(\"- low:\", env.observation_space.low)\n", + "print(\"- high:\", env.observation_space.high)\n", + "\n", + "# Explore action space\n", + "print(\"Action space:\", env.action_space)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that the state space is multi-dimensional, with most dimensions ranging from -1 to 1 (positions of the two joints), while the final two dimensions have a larger range. How do we discretize such a space using tiles?\n", + "\n", + "### 3. Tiling\n", + "\n", + "Let's first design a way to create a single tiling for a given state space. This is very similar to a uniform grid! The only difference is that you should include an offset for each dimension that shifts the split points.\n", + "\n", + "For instance, if `low = [-1.0, -5.0]`, `high = [1.0, 5.0]`, `bins = (10, 10)`, and `offsets = (-0.1, 0.5)`, then return a list of 2 NumPy arrays (2 dimensions) each containing the following split points (9 split points per dimension):\n", + "\n", + "```\n", + "[array([-0.9, -0.7, -0.5, -0.3, -0.1, 0.1, 0.3, 0.5, 0.7]),\n", + " array([-3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 4.5])]\n", + "```\n", + "\n", + "Notice how the split points for the first dimension are offset by `-0.1`, and for the second dimension are offset by `+0.5`. This might mean that some of our tiles, especially along the perimeter, are partially outside the valid state space, but that is unavoidable and harmless." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "env: Box(6,)\n", + "- low : [ -1. -1. -1. -1. -12.566 -28.274]\n", + "- high : [ 1. 1. 1. 1. 12.566 28.274]\n", + "[array([-0.8, -0.6, -0.4, -0.2, 0. , 0.2, 0.4, 0.6, 0.8]), array([-4., -3., -2., -1., 0., 1., 2., 3., 4.])]\n", + "[-0.8 -0.6 -0.4 -0.2 0. 0.2 0.4 0.6 0.8]\n", + "[-4. -3. -2. -1. 0. 1. 2. 3. 4.]\n", + "---------------\n", + "[-0.9 -0.7 -0.5 -0.3 -0.1 0.1 0.3 0.5 0.7]\n", + "[-3.5 -2.5 -1.5 -0.5 0.5 1.5 2.5 3.5 4.5]\n", + "--------------------------------------------------------------\n", + "[array([-0.9, -0.7, -0.5, -0.3, -0.1, 0.1, 0.3, 0.5, 0.7]), array([-3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 4.5])]\n" + ] + } + ], + "source": [ + "# Practice \n", + "print(\"env: \", env.observation_space)\n", + "print(\"- low :\", env.observation_space.low)\n", + "print(\"- high : \",env.observation_space.high)\n", + "low = [-1.0, -5.0]\n", + "high = [1.0, 5.0]\n", + "offset = (-0.1, 0.5)\n", + "\n", + "bins = (10, 10)\n", + "tiling_grid = []\n", + "for i in range( len(bins) ):\n", + " tiling_grid.append(np.linspace(low[i], high[i], num=bins[i]+1)[1:-1])\n", + "print(tiling_grid)\n", + "print(tiling_grid[0])\n", + "print(tiling_grid[1])\n", + "print('---------------')\n", + "print(np.add(tiling_grid[0], offset[0]))\n", + "print(np.add(tiling_grid[1], offset[1]))\n", + "\n", + "print(\"--------------------------------------------------------------\")\n", + "tiling_grid = [ np.linspace( low[i], high[i], num=bins[i]+1 )[1:-1] + offset[i] for i in range(len(bins)) ]\n", + "print(tiling_grid)" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[array([-0.9, -0.7, -0.5, -0.3, -0.1, 0.1, 0.3, 0.5, 0.7]),\n", + " array([-3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 4.5])]" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "def create_tiling_grid(low, high, bins=(10, 10), offsets=(0.0, 0.0)):\n", + " \"\"\"Define a uniformly-spaced grid that can be used for tile-coding a space.\n", + " \n", + " Parameters\n", + " ----------\n", + " low : array_like\n", + " Lower bounds for each dimension of the continuous space.\n", + " high : array_like\n", + " Upper bounds for each dimension of the continuous space.\n", + " bins : tuple\n", + " Number of bins or tiles along each corresponding dimension.\n", + " offsets : tuple\n", + " Split points for each dimension should be offset by these values.\n", + " \n", + " Returns\n", + " -------\n", + " grid : list of array_like\n", + " A list of arrays containing split points for each dimension.\n", + " \"\"\"\n", + " # TODO: Implement this\n", + " grid = [ np.linspace(low[i], high[i], num=bins[i]+1)[1:-1] + offsets[i] for i in range( len(bins) )]\n", + " return grid\n", + "\n", + "low = [-1.0, -5.0]\n", + "high = [1.0, 5.0]\n", + "create_tiling_grid(low, high, bins=(10, 10), offsets=(-0.1, 0.5)) # [test]" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[array([-0.9, -0.7, -0.5, -0.3, -0.1, 0.1, 0.3, 0.5, 0.7]), array([-3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 4.5])]\n", + "-------\n", + "((10, 10), (-0.066, -0.33))\n", + "((10, 10), (0.0, 0.0))\n", + "((10, 10), (0.066, 0.33))\n", + "=======\n", + " at 0x7f9834a75360>\n", + "--------\n", + "[[[array([-0.866, -0.666, -0.466, -0.266, -0.066, 0.134, 0.334, 0.534, 0.734]), array([-4.33, -3.33, -2.33, -1.33, -0.33, 0.67, 1.67, 2.67, 3.67])]], [[array([-0.8, -0.6, -0.4, -0.2, 0. , 0.2, 0.4, 0.6, 0.8]), array([-4., -3., -2., -1., 0., 1., 2., 3., 4.])]], [[array([-0.734, -0.534, -0.334, -0.134, 0.066, 0.266, 0.466, 0.666, 0.866]), array([-3.67, -2.67, -1.67, -0.67, 0.33, 1.33, 2.33, 3.33, 4.33])]]]\n" + ] + } + ], + "source": [ + "# Practice\n", + "# Tiling specs: [(, ), ...]\n", + "tiling_specs = [((10, 10), (-0.066, -0.33)),\n", + " ((10, 10), (0.0, 0.0)),\n", + " ((10, 10), (0.066, 0.33))]\n", + "\n", + "low = [-1.0, -5.0]\n", + "high = [1.0, 5.0]\n", + "\n", + "print( create_tiling_grid(low, high, bins=(10, 10), offsets=(-0.1, 0.5)) )\n", + "print('-------')\n", + "for specs in range(len(tiling_specs)):\n", + " print( tiling_specs[specs] )\n", + "print('=======')\n", + "\n", + "print( tiling_specs[dim] for dim in range(len(tiling_specs)) )\n", + "print(\"--------\")\n", + "grid = []\n", + "for dim in range( len(tiling_specs)):\n", + " grid.append( [ create_tiling_grid(low, high, bins=tiling_specs[dim][0], offsets=tiling_specs[dim][1] ) ] )\n", + "print(grid)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You can now use this function to define a set of tilings that are a little offset from each other." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "def create_tilings(low, high, tiling_specs):\n", + " \"\"\"Define multiple tilings using the provided specifications.\n", + "\n", + " Parameters\n", + " ----------\n", + " low : array_like\n", + " Lower bounds for each dimension of the continuous space.\n", + " high : array_like\n", + " Upper bounds for each dimension of the continuous space.\n", + " tiling_specs : list of tuples\n", + " A sequence of (bins, offsets) to be passed to create_tiling_grid().\n", + "\n", + " Returns\n", + " -------\n", + " tilings : list\n", + " A list of tilings (grids), each produced by create_tiling_grid().\n", + " \"\"\"\n", + " # TODO: Implement this\n", + " grid = []\n", + " for dim in range( len(tiling_specs)):\n", + " grid.append( create_tiling_grid(low, high, bins=tiling_specs[dim][0], offsets=tiling_specs[dim][1] ) )\n", + " return grid\n", + "\n", + "\n", + "# Tiling specs: [(, ), ...]\n", + "tiling_specs = [((10, 10), (-0.066, -0.33)),\n", + " ((10, 10), (0.0, 0.0)),\n", + " ((10, 10), (0.066, 0.33))]\n", + "tilings = create_tilings(low, high, tiling_specs)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "It may be hard to gauge whether you are getting desired results or not. So let's try to visualize these tilings." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/cmb/anaconda3/envs/cmb-singularity/lib/python3.6/site-packages/matplotlib/cbook/__init__.py:424: MatplotlibDeprecationWarning: \n", + "Passing one of 'on', 'true', 'off', 'false' as a boolean is deprecated; use an actual boolean (True/False) instead.\n", + " warn_deprecated(\"2.2\", \"Passing one of 'on', 'true', 'off', 'false' as a \"\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "from matplotlib.lines import Line2D\n", + "\n", + "def visualize_tilings(tilings):\n", + " \"\"\"Plot each tiling as a grid.\"\"\"\n", + " prop_cycle = plt.rcParams['axes.prop_cycle']\n", + " colors = prop_cycle.by_key()['color']\n", + " linestyles = ['-', '--', ':']\n", + " legend_lines = []\n", + "\n", + " fig, ax = plt.subplots(figsize=(10, 10))\n", + " for i, grid in enumerate(tilings):\n", + " for x in grid[0]:\n", + " l = ax.axvline(x=x, color=colors[i % len(colors)], linestyle=linestyles[i % len(linestyles)], label=i)\n", + " for y in grid[1]:\n", + " l = ax.axhline(y=y, color=colors[i % len(colors)], linestyle=linestyles[i % len(linestyles)])\n", + " legend_lines.append(l)\n", + " ax.grid('off')\n", + " ax.legend(legend_lines, [\"Tiling #{}\".format(t) for t in range(len(legend_lines))], facecolor='white', framealpha=0.9)\n", + " ax.set_title(\"Tilings\")\n", + " return ax # return Axis object to draw on later, if needed\n", + "\n", + "\n", + "visualize_tilings(tilings);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Great! Now that we have a way to generate these tilings, we can next write our encoding function that will convert any given continuous state value to a discrete vector.\n", + "\n", + "### 4. Tile Encoding\n", + "\n", + "Implement the following to produce a vector that contains the indices for each tile that the input state value belongs to. The shape of the vector can be the same as the arrangment of tiles you have, or it can be ultimately flattened for convenience.\n", + "\n", + "You can use the same `discretize()` function here from grid-based discretization, and simply call it for each tiling." + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[(0, 0), (0, 0), (0, 0)], [(1, 8), (1, 8), (0, 7)], [(2, 5), (2, 5), (2, 4)], [(6, 3), (6, 3), (5, 2)], [(6, 3), (5, 3), (5, 2)], [(9, 7), (8, 7), (8, 7)], [(8, 1), (8, 1), (8, 0)], [(9, 9), (9, 9), (9, 9)]]\n" + ] + }, + { + "data": { + "text/plain": [ + "'\\nprint(\"------------\")\\nprint(\"sample :\")\\nfor sample in samples:\\n print(sample, len(sample))\\nprint(\"tiling :\")\\nfor tiling in tilings:\\n print(tiling)\\n print(\\'[]\\')\\n'" + ] + }, + "execution_count": 65, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Practice code\n", + "\n", + "# Test with some sample values\n", + "samples = [(-1.2 , -5.1 ),\n", + " (-0.75, 3.25),\n", + " (-0.5 , 0.0 ),\n", + " ( 0.25, -1.9 ),\n", + " ( 0.15, -1.75),\n", + " ( 0.75, 2.5 ),\n", + " ( 0.7 , -3.7 ),\n", + " ( 1.0 , 5.0 )]\n", + "\n", + "\n", + "# For Discretizing\n", + "def discretize(sample, grid):\n", + " return tuple( int(np.digitize(sample[i], grid[i])) for i in range( len(sample) ) ) \n", + "grid = []\n", + "for sample in samples:\n", + " #print(\"sample :\", sample)\n", + " discretized_tile = [ discretize(sample, tiling) for tiling in tilings ]\n", + " grid.append(discretized_tile)\n", + " #print('==')\n", + "#print(discretized_tile)\n", + "print(grid)\n", + "\"\"\"\n", + "print(\"------------\")\n", + "print(\"sample :\")\n", + "for sample in samples:\n", + " print(sample, len(sample))\n", + "print(\"tiling :\")\n", + "for tiling in tilings:\n", + " print(tiling)\n", + " print('[]')\n", + "\"\"\"" + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Samples:\n", + "[(-1.2, -5.1), (-0.75, 3.25), (-0.5, 0.0), (0.25, -1.9), (0.15, -1.75), (0.75, 2.5), (0.7, -3.7), (1.0, 5.0)]\n", + "\n", + "Encoded samples:\n", + "[[(0, 0), (0, 0), (0, 0)], [(1, 8), (1, 8), (0, 7)], [(2, 5), (2, 5), (2, 4)], [(6, 3), (6, 3), (5, 2)], [(6, 3), (5, 3), (5, 2)], [(9, 7), (8, 7), (8, 7)], [(8, 1), (8, 1), (8, 0)], [(9, 9), (9, 9), (9, 9)]]\n" + ] + } + ], + "source": [ + "def discretize(sample, grid):\n", + " \"\"\"Discretize a sample as per given grid.\n", + " \n", + " Parameters\n", + " ----------\n", + " sample : array_like\n", + " A single sample from the (original) continuous space.\n", + " grid : list of array_like\n", + " A list of arrays containing split points for each dimension.\n", + " \n", + " Returns\n", + " -------\n", + " discretized_sample : array_like\n", + " A sequence of integers with the same number of dimensions as sample.\n", + " \"\"\"\n", + " # TODO: Implement this\n", + " #print(\"grid :\", grid)\n", + " return tuple( int(np.digitize(sample[i], grid[i])) for i in range( len(sample) ) ) \n", + "\n", + "\n", + "def tile_encode(sample, tilings, flatten=False):\n", + " \"\"\"Encode given sample using tile-coding.\n", + " \n", + " Parameters\n", + " ----------\n", + " sample : array_like\n", + " A single sample from the (original) continuous space.\n", + " tilings : list\n", + " A list of tilings (grids), each produced by create_tiling_grid().\n", + " flatten : bool\n", + " If true, flatten the resulting binary arrays into a single long vector.\n", + "\n", + " Returns\n", + " -------\n", + " encoded_sample : list or array_like\n", + " A list of binary vectors, one for each tiling, or flattened into one.\n", + " \"\"\"\n", + " # TODO: Implement this\n", + " encoded_sample = [ discretize(sample, tiling) for tiling in tilings ]\n", + " return np.concatenate(encoded_sample) if flatten else encoded_sample\n", + "\n", + "\n", + "# Test with some sample values\n", + "samples = [(-1.2 , -5.1 ),\n", + " (-0.75, 3.25),\n", + " (-0.5 , 0.0 ),\n", + " ( 0.25, -1.9 ),\n", + " ( 0.15, -1.75),\n", + " ( 0.75, 2.5 ),\n", + " ( 0.7 , -3.7 ),\n", + " ( 1.0 , 5.0 )]\n", + "encoded_samples = [tile_encode(sample, tilings) for sample in samples]\n", + "print(\"\\nSamples:\", repr(samples), sep=\"\\n\")\n", + "print(\"\\nEncoded samples:\", repr(encoded_samples), sep=\"\\n\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that we did not flatten the encoding above, which is why each sample's representation is a pair of indices for each tiling. This makes it easy to visualize it using the tilings." + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/cmb/anaconda3/envs/cmb-singularity/lib/python3.6/site-packages/matplotlib/cbook/__init__.py:424: MatplotlibDeprecationWarning: \n", + "Passing one of 'on', 'true', 'off', 'false' as a boolean is deprecated; use an actual boolean (True/False) instead.\n", + " warn_deprecated(\"2.2\", \"Passing one of 'on', 'true', 'off', 'false' as a \"\n" + ] + }, + { + "data": { + "image/png": "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yAfx1ot460W89eNU96BvutRUpZGkahxMmjSJ/v7+Yb97++23eeqpp/jP//xPHnvsMY4cOUJTUxNHjhzhb//2b/mbv/kbAB5//HF+8YtfMGfOHGpra7n44ouzkrX9+/dTX19Pe3s75eXl/OIXvyAUClFXV8frr7/O2rVr+cxnPsOUKeYaKJ/5zGf4/e9/zx133KHnBRgHt59Xa7nvwsX2nYsXb72It17EWy/5eIN97vW1YfaE3Jb7l5b3EJeaKkCSqoKxZ88e3nzzTfx+P4sXL+a+++5j27ZtvPrqq2zevJlEIsGyZcu4+OKLs/ouWLCALVu2cPPNN/PCCy/wzDPPsHTpUm688UYAWlpamDNnTmb72bNn09LSou25jYclM8st9506w746AvHWi3jrRbz1ko832Od+YXmcaMr6OlVFxWEMwyU1VUzQpKr/Z08RP9BY0Mcsmr+QSf/31wv6mEO54YYb8Hq9eL1epk2bxtGjR1m3bh0333xz5qrGgSTpWHR2dlJTU8POnTu59957M783jOy1P+xaj+pYNPVEADhjSu7fVoKBJADlFda/KVlFvPUi3noRb73k4w32uTdF3ByNuagpsrbOlFlT5calnFcPVmiksqxAeL2Di7253W4SicSoydBo3H///Vx44YU0NjZSV1fH73//e2655RaefvppAObMmUNzc3Nm+5aWFmbNmlXYJ5Anz285yvNbjlrqu21TiG2bQgU2Gh/irRfx1ot46yUfb7DP/fmj5bzRb/30XdA3nUhocgGNnMuEnKk6kTNKOrn88su5//77WbVqFYlEgtdff5177rkna7tnn32WX/3qVxw+fJjbbruNVatW8dJLL2Xar7vuOr797W/T29sLwBtvvMETTzyh7XmcaM46z5nrk4m3XsRbL+KtH6e6l5b3yDpVaSZkUnWysGzZMm666SYuvvjizBINkyZNGnXbd999l7vuuov333+flStXDmubMmUKjzzyCCtWrADg29/+dqZo/WSgdpozh6F460W89SLe+nGqu9RUDeLMd/AE8+ijjw6LB678mzdvHtu2bQPgyiuv5Morrxx1+4FtAB566CEeffRRQqEQV111FQ8++OCo+/zxj38MwPLly0dt//KXv8yXv/zl3J+MAwj4zDqCiir9NRD5IN56EW+9iLd+nOqeTBSRSrpxuaSmSmqqTjD33XcfdXV1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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "from matplotlib.patches import Rectangle\n", + "\n", + "def visualize_encoded_samples(samples, encoded_samples, tilings, low=None, high=None):\n", + " \"\"\"Visualize samples by activating the respective tiles.\"\"\"\n", + " samples = np.array(samples) # for ease of indexing\n", + "\n", + " # Show tiling grids\n", + " ax = visualize_tilings(tilings)\n", + " \n", + " # If bounds (low, high) are specified, use them to set axis limits\n", + " if low is not None and high is not None:\n", + " ax.set_xlim(low[0], high[0])\n", + " ax.set_ylim(low[1], high[1])\n", + " else:\n", + " # Pre-render (invisible) samples to automatically set reasonable axis limits, and use them as (low, high)\n", + " ax.plot(samples[:, 0], samples[:, 1], 'o', alpha=0.0)\n", + " low = [ax.get_xlim()[0], ax.get_ylim()[0]]\n", + " high = [ax.get_xlim()[1], ax.get_ylim()[1]]\n", + "\n", + " # Map each encoded sample (which is really a list of indices) to the corresponding tiles it belongs to\n", + " tilings_extended = [np.hstack((np.array([low]).T, grid, np.array([high]).T)) for grid in tilings] # add low and high ends\n", + " tile_centers = [(grid_extended[:, 1:] + grid_extended[:, :-1]) / 2 for grid_extended in tilings_extended] # compute center of each tile\n", + " tile_toplefts = [grid_extended[:, :-1] for grid_extended in tilings_extended] # compute topleft of each tile\n", + " tile_bottomrights = [grid_extended[:, 1:] for grid_extended in tilings_extended] # compute bottomright of each tile\n", + "\n", + " prop_cycle = plt.rcParams['axes.prop_cycle']\n", + " colors = prop_cycle.by_key()['color']\n", + " for sample, encoded_sample in zip(samples, encoded_samples):\n", + " for i, tile in enumerate(encoded_sample):\n", + " # Shade the entire tile with a rectangle\n", + " topleft = tile_toplefts[i][0][tile[0]], tile_toplefts[i][1][tile[1]]\n", + " bottomright = tile_bottomrights[i][0][tile[0]], tile_bottomrights[i][1][tile[1]]\n", + " ax.add_patch(Rectangle(topleft, bottomright[0] - topleft[0], bottomright[1] - topleft[1],\n", + " color=colors[i], alpha=0.33))\n", + "\n", + " # In case sample is outside tile bounds, it may not have been highlighted properly\n", + " if any(sample < topleft) or any(sample > bottomright):\n", + " # So plot a point in the center of the tile and draw a connecting line\n", + " cx, cy = tile_centers[i][0][tile[0]], tile_centers[i][1][tile[1]]\n", + " ax.add_line(Line2D([sample[0], cx], [sample[1], cy], color=colors[i]))\n", + " ax.plot(cx, cy, 's', color=colors[i])\n", + " \n", + " # Finally, plot original samples\n", + " ax.plot(samples[:, 0], samples[:, 1], 'o', color='r')\n", + "\n", + " ax.margins(x=0, y=0) # remove unnecessary margins\n", + " ax.set_title(\"Tile-encoded samples\")\n", + " return ax\n", + "\n", + "visualize_encoded_samples(samples, encoded_samples, tilings);" + ] + }, + { + "cell_type": "code", + "execution_count": 105, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "----\n", + "[array([-0.866, -0.666, -0.466, -0.266, -0.066, 0.134, 0.334, 0.534, 0.734]), array([-4.33, -3.33, -2.33, -1.33, -0.33, 0.67, 1.67, 2.67, 3.67])]\n", + "----\n", + "[array([-0.8, -0.6, -0.4, -0.2, 0. , 0.2, 0.4, 0.6, 0.8]), array([-4., -3., -2., -1., 0., 1., 2., 3., 4.])]\n", + "----\n", + "[array([-0.734, -0.534, -0.334, -0.134, 0.066, 0.266, 0.466, 0.666, 0.866]), array([-3.67, -2.67, -1.67, -0.67, 0.33, 1.33, 2.33, 3.33, 4.33])]\n", + "==================================\n", + "QTable(): size = (5, 3, 5)\n", + "----------------------------------------------------------------------------------------\n", + "QTable(): size = (5, 3, 5)\n", + "<__main__.QTable object at 0x7f98345d8518>\n" + ] + } + ], + "source": [ + "# Practice\n", + "for tiling in tilings:\n", + " print('----')\n", + " print(tiling)\n", + "\n", + "print(\"==================================\")\n", + "qt_ = QTable((5,3),5)\n", + "#print(qt_.q_table)\n", + "print('----------------------------------------------------------------------------------------')\n", + "print(QTable((5,3),5))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Inspect the results and make sure you understand how the corresponding tiles are being chosen. Note that some samples may have one or more tiles in common.\n", + "\n", + "### 5. Q-Table with Tile Coding\n", + "\n", + "The next step is to design a special Q-table that is able to utilize this tile coding scheme. It should have the same kind of interface as a regular table, i.e. given a `` pair, it should return a ``. Similarly, it should also allow you to update the `` for a given `` pair (note that this should update all the tiles that `` belongs to).\n", + "\n", + "The `` supplied here is assumed to be from the original continuous state space, and `` is discrete (and integer index). The Q-table should internally convert the `` to its tile-coded representation when required." + ] + }, + { + "cell_type": "code", + "execution_count": 110, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "QTable(): size = (10, 10, 2)\n", + "QTable(): size = (10, 10, 2)\n", + "QTable(): size = (10, 10, 2)\n", + "TiledQTable(): no. of internal tables = 3\n", + "-------------\n", + "state : (0.25, -1.9)\n" + ] + }, + { + "ename": "TypeError", + "evalue": "unsupported operand type(s) for +: 'float' and 'tuple'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 98\u001b[0m \u001b[0mtq\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mTiledQTable\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlow\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mhigh\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtiling_specs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 99\u001b[0m \u001b[0ms1\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m3\u001b[0m\u001b[0;34m;\u001b[0m \u001b[0ms2\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m4\u001b[0m\u001b[0;34m;\u001b[0m \u001b[0ma\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m;\u001b[0m \u001b[0mq\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m1.0\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 100\u001b[0;31m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"[GET] Q({}, {}) = {}\"\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msamples\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0ms1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0ma\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtq\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msamples\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0ms1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0ma\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m# check value at sample = s1, action = a\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 101\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"[UPDATE] Q({}, {}) = {}\"\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msamples\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0ms2\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0ma\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mq\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m;\u001b[0m \u001b[0mtq\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mupdate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msamples\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0ms2\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0ma\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mq\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m# update value for sample with some common tile(s)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 102\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"[GET] Q({}, {}) = {}\"\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msamples\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0ms1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0ma\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtq\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msamples\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0ms1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0ma\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m# check value again, should be slightly updated\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m\u001b[0m in \u001b[0;36mget\u001b[0;34m(self, state, action)\u001b[0m\n\u001b[1;32m 67\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"state :\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstate\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 68\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0midx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mq_table\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mzip\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mstate\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mq_tables\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 69\u001b[0;31m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0midx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"--\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mq_table\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mq_table\u001b[0m\u001b[0;34m[\u001b[0m \u001b[0mtuple\u001b[0m\u001b[0;34m(\u001b[0m \u001b[0midx\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0maction\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m)\u001b[0m \u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 70\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'-------------'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 71\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mTypeError\u001b[0m: unsupported operand type(s) for +: 'float' and 'tuple'" + ] + } + ], + "source": [ + "class QTable:\n", + " \"\"\"Simple Q-table.\"\"\"\n", + "\n", + " def __init__(self, state_size, action_size):\n", + " \"\"\"Initialize Q-table.\n", + " \n", + " Parameters\n", + " ----------\n", + " state_size : tuple\n", + " Number of discrete values along each dimension of state space.\n", + " action_size : int\n", + " Number of discrete actions in action space.\n", + " \"\"\"\n", + " self.state_size = state_size\n", + " self.action_size = action_size\n", + "\n", + " # TODO: Create Q-table, initialize all Q-values to zero\n", + " # Note: If state_size = (9, 9), action_size = 2, q_table.shape should be (9, 9, 2)\n", + " self.q_table = np.zeros( self.state_size + (self.action_size,) )\n", + " \n", + " print(\"QTable(): size =\", self.q_table.shape)\n", + "\n", + "class TiledQTable:\n", + " \"\"\"Composite Q-table with an internal tile coding scheme.\"\"\"\n", + " \n", + " def __init__(self, low, high, tiling_specs, action_size):\n", + " \"\"\"Create tilings and initialize internal Q-table(s).\n", + " \n", + " Parameters\n", + " ----------\n", + " low : array_like\n", + " Lower bounds for each dimension of state space.\n", + " high : array_like\n", + " Upper bounds for each dimension of state space.\n", + " tiling_specs : list of tuples\n", + " A sequence of (bins, offsets) to be passed to create_tilings() along with low, high.\n", + " action_size : int\n", + " Number of discrete actions in action space.\n", + " \"\"\"\n", + " self.tilings = create_tilings(low, high, tiling_specs)\n", + " self.state_sizes = [tuple(len(splits)+1 for splits in tiling_grid) for tiling_grid in self.tilings]\n", + " self.action_size = action_size\n", + " self.q_tables = [QTable(state_size, self.action_size) for state_size in self.state_sizes]\n", + " print(\"TiledQTable(): no. of internal tables = \", len(self.q_tables))\n", + " #print(self.state_sizes)\n", + " \n", + " def get(self, state, action):\n", + " \"\"\"Get Q-value for given pair.\n", + " \n", + " Parameters\n", + " ----------\n", + " state : array_like\n", + " Vector representing the state in the original continuous space.\n", + " action : int\n", + " Index of desired action.\n", + " \n", + " Returns\n", + " -------\n", + " value : float\n", + " Q-value of given pair, averaged from all internal Q-tables.\n", + " \"\"\"\n", + " # TODO: Encode state to get tile indices\n", + " encoded_state = tile_encode(state, self.tilings)\n", + " \n", + " # TODO: Retrieve q-value for each tiling, and return their average\n", + " print('-------------')\n", + " print(\"state :\", state)\n", + " for idx, q_table in zip(state, self.q_tables):\n", + " print(idx, \"--\", q_table.q_table[ tuple( idx + (action,) ) ])\n", + " print('-------------')\n", + " \n", + " return encoded_state\n", + " \n", + " def update(self, state, action, value, alpha=0.1):\n", + " \"\"\"Soft-update Q-value for given pair to value.\n", + " \n", + " Instead of overwriting Q(state, action) with value, perform soft-update:\n", + " Q(state, action) = alpha * value + (1.0 - alpha) * Q(state, action)\n", + " \n", + " Parameters\n", + " ----------\n", + " state : array_like\n", + " Vector representing the state in the original continuous space.\n", + " action : int\n", + " Index of desired action.\n", + " value : float\n", + " Desired Q-value for pair.\n", + " alpha : float\n", + " Update factor to perform soft-update, in [0.0, 1.0] range.\n", + " \"\"\"\n", + " # TODO: Encode state to get tile indices\n", + " \n", + " # TODO: Update q-value for each tiling by update factor alpha\n", + " pass\n", + "\n", + "\n", + "# Test with a sample Q-table\n", + "tq = TiledQTable(low, high, tiling_specs, 2)\n", + "s1 = 3; s2 = 4; a = 0; q = 1.0\n", + "print(\"[GET] Q({}, {}) = {}\".format(samples[s1], a, tq.get(samples[s1], a))) # check value at sample = s1, action = a\n", + "print(\"[UPDATE] Q({}, {}) = {}\".format(samples[s2], a, q)); tq.update(samples[s2], a, q) # update value for sample with some common tile(s)\n", + "print(\"[GET] Q({}, {}) = {}\".format(samples[s1], a, tq.get(samples[s1], a))) # check value again, should be slightly updated" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If you update the q-value for a particular state (say, `(0.25, -1.91)`) and action (say, `0`), then you should notice the q-value of a nearby state (e.g. `(0.15, -1.75)` and same action) has changed as well! This is how tile-coding is able to generalize values across the state space better than a single uniform grid." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 6. Implement a Q-Learning Agent using Tile-Coding\n", + "\n", + "Now it's your turn to apply this discretization technique to design and test a complete learning agent! " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "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.6.7" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/tile-coding/Tile_Coding_Solution.ipynb b/tile-coding/Tile_Coding_Solution.ipynb new file mode 100644 index 0000000..96b3ef4 --- /dev/null +++ b/tile-coding/Tile_Coding_Solution.ipynb @@ -0,0 +1,826 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Tile Coding\n", + "---\n", + "\n", + "Tile coding is an innovative way of discretizing a continuous space that enables better generalization compared to a single grid-based approach. The fundamental idea is to create several overlapping grids or _tilings_; then for any given sample value, you need only check which tiles it lies in. You can then encode the original continuous value by a vector of integer indices or bits that identifies each activated tile.\n", + "\n", + "### 1. Import the Necessary Packages" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "# Import common libraries\n", + "import sys\n", + "import gym\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import pandas as pd\n", + "\n", + "# Set plotting options\n", + "%matplotlib inline\n", + "plt.style.use('ggplot')\n", + "np.set_printoptions(precision=3, linewidth=120)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2. Specify the Environment, and Explore the State and Action Spaces\n", + "\n", + "We'll use [OpenAI Gym](https://gym.openai.com/) environments to test and develop our algorithms. These simulate a variety of classic as well as contemporary reinforcement learning tasks. Let's begin with an environment that has a continuous state space, but a discrete action space." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "State space: Box(6,)\n", + "- low: [ -1. -1. -1. -1. -12.566 -28.274]\n", + "- high: [ 1. 1. 1. 1. 12.566 28.274]\n", + "Action space: Discrete(3)\n" + ] + } + ], + "source": [ + "# Create an environment\n", + "env = gym.make('Acrobot-v1')\n", + "env.seed(505);\n", + "\n", + "# Explore state (observation) space\n", + "print(\"State space:\", env.observation_space)\n", + "print(\"- low:\", env.observation_space.low)\n", + "print(\"- high:\", env.observation_space.high)\n", + "\n", + "# Explore action space\n", + "print(\"Action space:\", env.action_space)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that the state space is multi-dimensional, with most dimensions ranging from -1 to 1 (positions of the two joints), while the final two dimensions have a larger range. How do we discretize such a space using tiles?\n", + "\n", + "### 3. Tiling\n", + "\n", + "Let's first design a way to create a single tiling for a given state space. This is very similar to a uniform grid! The only difference is that you should include an offset for each dimension that shifts the split points.\n", + "\n", + "For instance, if `low = [-1.0, -5.0]`, `high = [1.0, 5.0]`, `bins = (10, 10)`, and `offsets = (-0.1, 0.5)`, then return a list of 2 NumPy arrays (2 dimensions) each containing the following split points (9 split points per dimension):\n", + "\n", + "```\n", + "[array([-0.9, -0.7, -0.5, -0.3, -0.1, 0.1, 0.3, 0.5, 0.7]),\n", + " array([-3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 4.5])]\n", + "```\n", + "\n", + "Notice how the split points for the first dimension are offset by `-0.1`, and for the second dimension are offset by `+0.5`. This might mean that some of our tiles, especially along the perimeter, are partially outside the valid state space, but that is unavoidable and harmless." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Tiling: [, ] / + () => \n", + " [-1.0, 1.0] / 10 + (-0.1) => [-0.9 -0.7 -0.5 -0.3 -0.1 0.1 0.3 0.5 0.7]\n", + " [-5.0, 5.0] / 10 + (0.5) => [-3.5 -2.5 -1.5 -0.5 0.5 1.5 2.5 3.5 4.5]\n" + ] + }, + { + "data": { + "text/plain": [ + "[array([-0.9, -0.7, -0.5, -0.3, -0.1, 0.1, 0.3, 0.5, 0.7]),\n", + " array([-3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 4.5])]" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "def create_tiling_grid(low, high, bins=(10, 10), offsets=(0.0, 0.0)):\n", + " \"\"\"Define a uniformly-spaced grid that can be used for tile-coding a space.\n", + " \n", + " Parameters\n", + " ----------\n", + " low : array_like\n", + " Lower bounds for each dimension of the continuous space.\n", + " high : array_like\n", + " Upper bounds for each dimension of the continuous space.\n", + " bins : tuple\n", + " Number of bins or tiles along each corresponding dimension.\n", + " offsets : tuple\n", + " Split points for each dimension should be offset by these values.\n", + " \n", + " Returns\n", + " -------\n", + " grid : list of array_like\n", + " A list of arrays containing split points for each dimension.\n", + " \"\"\"\n", + " # TODO: Implement this\n", + " grid = [np.linspace(low[dim], high[dim], bins[dim] + 1)[1:-1] + offsets[dim] for dim in range(len(bins))]\n", + " print(\"Tiling: [, ] / + () => \")\n", + " for l, h, b, o, splits in zip(low, high, bins, offsets, grid):\n", + " print(\" [{}, {}] / {} + ({}) => {}\".format(l, h, b, o, splits))\n", + " return grid\n", + "\n", + "\n", + "low = [-1.0, -5.0]\n", + "high = [1.0, 5.0]\n", + "create_tiling_grid(low, high, bins=(10, 10), offsets=(-0.1, 0.5)) # [test]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You can now use this function to define a set of tilings that are a little offset from each other." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Tiling: [, ] / + () => \n", + " [-1.0, 1.0] / 10 + (-0.066) => [-0.866 -0.666 -0.466 -0.266 -0.066 0.134 0.334 0.534 0.734]\n", + " [-5.0, 5.0] / 10 + (-0.33) => [-4.33 -3.33 -2.33 -1.33 -0.33 0.67 1.67 2.67 3.67]\n", + "Tiling: [, ] / + () => \n", + " [-1.0, 1.0] / 10 + (0.0) => [-0.8 -0.6 -0.4 -0.2 0. 0.2 0.4 0.6 0.8]\n", + " [-5.0, 5.0] / 10 + (0.0) => [-4. -3. -2. -1. 0. 1. 2. 3. 4.]\n", + "Tiling: [, ] / + () => \n", + " [-1.0, 1.0] / 10 + (0.066) => [-0.734 -0.534 -0.334 -0.134 0.066 0.266 0.466 0.666 0.866]\n", + " [-5.0, 5.0] / 10 + (0.33) => [-3.67 -2.67 -1.67 -0.67 0.33 1.33 2.33 3.33 4.33]\n" + ] + } + ], + "source": [ + "def create_tilings(low, high, tiling_specs):\n", + " \"\"\"Define multiple tilings using the provided specifications.\n", + "\n", + " Parameters\n", + " ----------\n", + " low : array_like+\\\n", + " Lower bounds for each dimension of the continuous space.\n", + " high : array_like\n", + " Upper bounds for each dimension of the continuous space.\n", + " tiling_specs : list of tuples\n", + " A sequence of (bins, offsets) to be passed to create_tiling_grid().\n", + "\n", + " Returns\n", + " -------\n", + " tilings : list\n", + " A list of tilings (grids), each produced by create_tiling_grid().\n", + " \"\"\"\n", + " # TODO: Implement this\n", + " return [create_tiling_grid(low, high, bins, offsets) for bins, offsets in tiling_specs]\n", + "\n", + "\n", + "# Tiling specs: [(, ), ...]\n", + "tiling_specs = [((10, 10), (-0.066, -0.33)),\n", + " ((10, 10), (0.0, 0.0)),\n", + " ((10, 10), (0.066, 0.33))]\n", + "tilings = create_tilings(low, high, tiling_specs)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[array([-0.866, -0.666, -0.466, -0.266, -0.066, 0.134, 0.334, 0.534, 0.734]), array([-4.33, -3.33, -2.33, -1.33, -0.33, 0.67, 1.67, 2.67, 3.67])], [array([-0.8, -0.6, -0.4, -0.2, 0. , 0.2, 0.4, 0.6, 0.8]), array([-4., -3., -2., -1., 0., 1., 2., 3., 4.])], [array([-0.734, -0.534, -0.334, -0.134, 0.066, 0.266, 0.466, 0.666, 0.866]), array([-3.67, -2.67, -1.67, -0.67, 0.33, 1.33, 2.33, 3.33, 4.33])]]\n" + ] + } + ], + "source": [ + "print(tilings)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "It may be hard to gauge whether you are getting desired results or not. So let's try to visualize these tilings." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from matplotlib.lines import Line2D\n", + "\n", + "def visualize_tilings(tilings):\n", + " \"\"\"Plot each tiling as a grid.\"\"\"\n", + " prop_cycle = plt.rcParams['axes.prop_cycle']\n", + " colors = prop_cycle.by_key()['color']\n", + " linestyles = ['-', '--', ':']\n", + " legend_lines = []\n", + "\n", + " fig, ax = plt.subplots(figsize=(10, 10))\n", + " for i, grid in enumerate(tilings):\n", + " for x in grid[0]:\n", + " l = ax.axvline(x=x, color=colors[i % len(colors)], linestyle=linestyles[i % len(linestyles)], label=i)\n", + " for y in grid[1]:\n", + " l = ax.axhline(y=y, color=colors[i % len(colors)], linestyle=linestyles[i % len(linestyles)])\n", + " legend_lines.append(l)\n", + " ax.grid('off')\n", + " ax.legend(legend_lines, [\"Tiling #{}\".format(t) for t in range(len(legend_lines))], facecolor='white', framealpha=0.9)\n", + " ax.set_title(\"Tilings\")\n", + " return ax # return Axis object to draw on later, if needed\n", + "\n", + "\n", + "visualize_tilings(tilings);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Great! Now that we have a way to generate these tilings, we can next write our encoding function that will convert any given continuous state value to a discrete vector.\n", + "\n", + "### 4. Tile Encoding\n", + "\n", + "Implement the following to produce a vector that contains the indices for each tile that the input state value belongs to. The shape of the vector can be the same as the arrangment of tiles you have, or it can be ultimately flattened for convenience.\n", + "\n", + "You can use the same `discretize()` function here from grid-based discretization, and simply call it for each tiling." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Samples:\n", + "[(-1.2, -5.1), (-0.75, 3.25), (-0.5, 0.0), (0.25, -1.9), (0.15, -1.75), (0.75, 2.5), (0.7, -3.7), (1.0, 5.0)]\n", + "\n", + "Encoded samples:\n", + "[[(0, 0), (0, 0), (0, 0)], [(1, 8), (1, 8), (0, 7)], [(2, 5), (2, 5), (2, 4)], [(6, 3), (6, 3), (5, 2)], [(6, 3), (5, 3), (5, 2)], [(9, 7), (8, 7), (8, 7)], [(8, 1), (8, 1), (8, 0)], [(9, 9), (9, 9), (9, 9)]]\n" + ] + } + ], + "source": [ + "def discretize(sample, grid):\n", + " \"\"\"Discretize a sample as per given grid.\n", + " \n", + " Parameters\n", + " ----------\n", + " sample : array_like\n", + " A single sample from the (original) continuous space.\n", + " grid : list of array_like\n", + " A list of arrays containing split points for each dimension.\n", + " \n", + " Returns\n", + " -------\n", + " discretized_sample : array_like\n", + " A sequence of integers with the same number of dimensions as sample.\n", + " \"\"\"\n", + " # TODO: Implement this\n", + " return tuple(int(np.digitize(s, g)) for s, g in zip(sample, grid)) # apply along each dimension\n", + "\n", + "\n", + "def tile_encode(sample, tilings, flatten=False):\n", + " \"\"\"Encode given sample using tile-coding.\n", + " \n", + " Parameters\n", + " ----------\n", + " sample : array_like\n", + " A single sample from the (original) continuous space.\n", + " tilings : list\n", + " A list of tilings (grids), each produced by create_tiling_grid().\n", + " flatten : bool\n", + " If true, flatten the resulting binary arrays into a single long vector.\n", + "\n", + " Returns\n", + " -------\n", + " encoded_sample : list or array_like\n", + " A list of binary vectors, one for each tiling, or flattened into one.\n", + " \"\"\"\n", + " # TODO: Implement this\n", + " encoded_sample = [discretize(sample, grid) for grid in tilings]\n", + " return np.concatenate(encoded_sample) if flatten else encoded_sample\n", + "\n", + "\n", + "# Test with some sample values\n", + "samples = [(-1.2 , -5.1 ),\n", + " (-0.75, 3.25),\n", + " (-0.5 , 0.0 ),\n", + " ( 0.25, -1.9 ),\n", + " ( 0.15, -1.75),\n", + " ( 0.75, 2.5 ),\n", + " ( 0.7 , -3.7 ),\n", + " ( 1.0 , 5.0 )]\n", + "encoded_samples = [tile_encode(sample, tilings) for sample in samples]\n", + "print(\"\\nSamples:\", repr(samples), sep=\"\\n\")\n", + "print(\"\\nEncoded samples:\", repr(encoded_samples), sep=\"\\n\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that we did not flatten the encoding above, which is why each sample's representation is a pair of indices for each tiling. This makes it easy to visualize it using the tilings." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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yAfx1ot460W89eNU96BvutRUpZGkahxMmjSJ/v7+Yb97++23eeqpp/jP//xPHnvsMY4cOUJTUxNHjhzhb//2b/mbv/kbAB5//HF+8YtfMGfOHGpra7n44ouzkrX9+/dTX19Pe3s75eXl/OIXvyAUClFXV8frr7/O2rVr+cxnPsOUKeYaKJ/5zGf4/e9/zx133KHnBRgHt59Xa7nvwsX2nYsXb72It17EWy/5eIN97vW1YfaE3Jb7l5b3EJeaKkCSqoKxZ88e3nzzTfx+P4sXL+a+++5j27ZtvPrqq2zevJlEIsGyZcu4+OKLs/ouWLCALVu2cPPNN/PCCy/wzDPPsHTpUm688UYAWlpamDNnTmb72bNn09LSou25jYclM8st9506w746AvHWi3jrRbz1ko832Od+YXmcaMr6OlVFxWEMwyU1VUzQpKr/Z08RP9BY0Mcsmr+QSf/31wv6mEO54YYb8Hq9eL1epk2bxtGjR1m3bh0333xz5qrGgSTpWHR2dlJTU8POnTu59957M783jOy1P+xaj+pYNPVEADhjSu7fVoKBJADlFda/KVlFvPUi3noRb73k4w32uTdF3ByNuagpsrbOlFlT5calnFcPVmiksqxAeL2Di7253W4SicSoydBo3H///Vx44YU0NjZSV1fH73//e2655RaefvppAObMmUNzc3Nm+5aWFmbNmlXYJ5Anz285yvNbjlrqu21TiG2bQgU2Gh/irRfx1ot46yUfb7DP/fmj5bzRb/30XdA3nUhocgGNnMuEnKk6kTNKOrn88su5//77WbVqFYlEgtdff5177rkna7tnn32WX/3qVxw+fJjbbruNVatW8dJLL2Xar7vuOr797W/T29sLwBtvvMETTzyh7XmcaM46z5nrk4m3XsRbL+KtH6e6l5b3yDpVaSZkUnWysGzZMm666SYuvvjizBINkyZNGnXbd999l7vuuov333+flStXDmubMmUKjzzyCCtWrADg29/+dqZo/WSgdpozh6F460W89SLe+nGqu9RUDeLMd/AE8+ijjw6LB678mzdvHtu2bQPgyiuv5Morrxx1+4FtAB566CEeffRRQqEQV111FQ8++OCo+/zxj38MwPLly0dt//KXv8yXv/zl3J+MAwj4zDqCiir9NRD5IN56EW+9iLd+nOqeTBSRSrpxuaSmSmqqTjD33XcfdXV1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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from matplotlib.patches import Rectangle\n", + "\n", + "def visualize_encoded_samples(samples, encoded_samples, tilings, low=None, high=None):\n", + " \"\"\"Visualize samples by activating the respective tiles.\"\"\"\n", + " samples = np.array(samples) # for ease of indexing\n", + "\n", + " # Show tiling grids\n", + " ax = visualize_tilings(tilings)\n", + " \n", + " # If bounds (low, high) are specified, use them to set axis limits\n", + " if low is not None and high is not None:\n", + " ax.set_xlim(low[0], high[0])\n", + " ax.set_ylim(low[1], high[1])\n", + " else:\n", + " # Pre-render (invisible) samples to automatically set reasonable axis limits, and use them as (low, high)\n", + " ax.plot(samples[:, 0], samples[:, 1], 'o', alpha=0.0)\n", + " low = [ax.get_xlim()[0], ax.get_ylim()[0]]\n", + " high = [ax.get_xlim()[1], ax.get_ylim()[1]]\n", + "\n", + " # Map each encoded sample (which is really a list of indices) to the corresponding tiles it belongs to\n", + " tilings_extended = [np.hstack((np.array([low]).T, grid, np.array([high]).T)) for grid in tilings] # add low and high ends\n", + " tile_centers = [(grid_extended[:, 1:] + grid_extended[:, :-1]) / 2 for grid_extended in tilings_extended] # compute center of each tile\n", + " tile_toplefts = [grid_extended[:, :-1] for grid_extended in tilings_extended] # compute topleft of each tile\n", + " tile_bottomrights = [grid_extended[:, 1:] for grid_extended in tilings_extended] # compute bottomright of each tile\n", + "\n", + " prop_cycle = plt.rcParams['axes.prop_cycle']\n", + " colors = prop_cycle.by_key()['color']\n", + " for sample, encoded_sample in zip(samples, encoded_samples):\n", + " for i, tile in enumerate(encoded_sample):\n", + " # Shade the entire tile with a rectangle\n", + " topleft = tile_toplefts[i][0][tile[0]], tile_toplefts[i][1][tile[1]]\n", + " bottomright = tile_bottomrights[i][0][tile[0]], tile_bottomrights[i][1][tile[1]]\n", + " ax.add_patch(Rectangle(topleft, bottomright[0] - topleft[0], bottomright[1] - topleft[1],\n", + " color=colors[i], alpha=0.33))\n", + "\n", + " # In case sample is outside tile bounds, it may not have been highlighted properly\n", + " if any(sample < topleft) or any(sample > bottomright):\n", + " # So plot a point in the center of the tile and draw a connecting line\n", + " cx, cy = tile_centers[i][0][tile[0]], tile_centers[i][1][tile[1]]\n", + " ax.add_line(Line2D([sample[0], cx], [sample[1], cy], color=colors[i]))\n", + " ax.plot(cx, cy, 's', color=colors[i])\n", + " \n", + " # Finally, plot original samples\n", + " ax.plot(samples[:, 0], samples[:, 1], 'o', color='r')\n", + "\n", + " ax.margins(x=0, y=0) # remove unnecessary margins\n", + " ax.set_title(\"Tile-encoded samples\")\n", + " return ax\n", + "\n", + "visualize_encoded_samples(samples, encoded_samples, tilings);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Inspect the results and make sure you understand how the corresponding tiles are being chosen. Note that some samples may have one or more tiles in common.\n", + "\n", + "### 5. Q-Table with Tile Coding\n", + "\n", + "The next step is to design a special Q-table that is able to utilize this tile coding scheme. It should have the same kind of interface as a regular table, i.e. given a `` pair, it should return a ``. Similarly, it should also allow you to update the `` for a given `` pair (note that this should update all the tiles that `` belongs to).\n", + "\n", + "The `` supplied here is assumed to be from the original continuous state space, and `` is discrete (and integer index). The Q-table should internally convert the `` to its tile-coded representation when required." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Tiling: [, ] / + () => \n", + " [-1.0, 1.0] / 10 + (-0.066) => [-0.866 -0.666 -0.466 -0.266 -0.066 0.134 0.334 0.534 0.734]\n", + " [-5.0, 5.0] / 10 + (-0.33) => [-4.33 -3.33 -2.33 -1.33 -0.33 0.67 1.67 2.67 3.67]\n", + "Tiling: [, ] / + () => \n", + " [-1.0, 1.0] / 10 + (0.0) => [-0.8 -0.6 -0.4 -0.2 0. 0.2 0.4 0.6 0.8]\n", + " [-5.0, 5.0] / 10 + (0.0) => [-4. -3. -2. -1. 0. 1. 2. 3. 4.]\n", + "Tiling: [, ] / + () => \n", + " [-1.0, 1.0] / 10 + (0.066) => [-0.734 -0.534 -0.334 -0.134 0.066 0.266 0.466 0.666 0.866]\n", + " [-5.0, 5.0] / 10 + (0.33) => [-3.67 -2.67 -1.67 -0.67 0.33 1.33 2.33 3.33 4.33]\n", + "QTable(): size = (10, 10, 2)\n", + "QTable(): size = (10, 10, 2)\n", + "QTable(): size = (10, 10, 2)\n", + "TiledQTable(): no. of internal tables = 3\n", + "[GET] Q((0.25, -1.9), 0) = 0.0\n", + "[UPDATE] Q((0.15, -1.75), 0) = 1.0\n", + "[GET] Q((0.25, -1.9), 0) = 0.06666666666666667\n" + ] + } + ], + "source": [ + "class QTable:\n", + " \"\"\"Simple Q-table.\"\"\"\n", + "\n", + " def __init__(self, state_size, action_size):\n", + " \"\"\"Initialize Q-table.\n", + " \n", + " Parameters\n", + " ----------\n", + " state_size : tuple\n", + " Number of discrete values along each dimension of state space.\n", + " action_size : int\n", + " Number of discrete actions in action space.\n", + " \"\"\"\n", + " self.state_size = state_size\n", + " self.action_size = action_size\n", + "\n", + " # TODO: Create Q-table, initialize all Q-values to zero\n", + " # Note: If state_size = (9, 9), action_size = 2, q_table.shape should be (9, 9, 2)\n", + " self.q_table = np.zeros(shape=(self.state_size + (self.action_size,)))\n", + " print(\"QTable(): size =\", self.q_table.shape)\n", + "\n", + "\n", + "class TiledQTable:\n", + " \"\"\"Composite Q-table with an internal tile coding scheme.\"\"\"\n", + " \n", + " def __init__(self, low, high, tiling_specs, action_size):\n", + " \"\"\"Create tilings and initialize internal Q-table(s).\n", + " \n", + " Parameters\n", + " ----------\n", + " low : array_like\n", + " Lower bounds for each dimension of state space.\n", + " high : array_like\n", + " Upper bounds for each dimension of state space.\n", + " tiling_specs : list of tuples\n", + " A sequence of (bins, offsets) to be passed to create_tilings() along with low, high.\n", + " action_size : int\n", + " Number of discrete actions in action space.\n", + " \"\"\"\n", + " self.tilings = create_tilings(low, high, tiling_specs)\n", + " self.state_sizes = [tuple(len(splits)+1 for splits in tiling_grid) for tiling_grid in self.tilings]\n", + " self.action_size = action_size\n", + " self.q_tables = [QTable(state_size, self.action_size) for state_size in self.state_sizes]\n", + " print(\"TiledQTable(): no. of internal tables = \", len(self.q_tables))\n", + " \n", + " def get(self, state, action):\n", + " \"\"\"Get Q-value for given pair.\n", + " \n", + " Parameters\n", + " ----------\n", + " state : array_like\n", + " Vector representing the state in the original continuous space.\n", + " action : int\n", + " Index of desired action.\n", + " \n", + " Returns\n", + " -------\n", + " value : float\n", + " Q-value of given pair, averaged from all internal Q-tables.\n", + " \"\"\"\n", + " # TODO: Encode state to get tile indices\n", + " encoded_state = tile_encode(state, self.tilings)\n", + " \n", + " # TODO: Retrieve q-value for each tiling, and return their average\n", + " value = 0.0\n", + " for idx, q_table in zip(encoded_state, self.q_tables):\n", + " value += q_table.q_table[tuple(idx + (action,))]\n", + " value /= len(self.q_tables)\n", + " return value\n", + " \n", + " def update(self, state, action, value, alpha=0.1):\n", + " \"\"\"Soft-update Q-value for given pair to value.\n", + " \n", + " Instead of overwriting Q(state, action) with value, perform soft-update:\n", + " Q(state, action) = alpha * value + (1.0 - alpha) * Q(state, action)\n", + " \n", + " Parameters\n", + " ----------\n", + " state : array_like\n", + " Vector representing the state in the original continuous space.\n", + " action : int\n", + " Index of desired action.\n", + " value : float\n", + " Desired Q-value for pair.\n", + " alpha : float\n", + " Update factor to perform soft-update, in [0.0, 1.0] range.\n", + " \"\"\"\n", + " # TODO: Encode state to get tile indices\n", + " encoded_state = tile_encode(state, self.tilings)\n", + " \n", + " # TODO: Update q-value for each tiling by update factor alpha\n", + " for idx, q_table in zip(encoded_state, self.q_tables):\n", + " value_ = q_table.q_table[tuple(idx + (action,))] # current value\n", + " q_table.q_table[tuple(idx + (action,))] = alpha * value + (1.0 - alpha) * value_\n", + "\n", + "\n", + "# Test with a sample Q-table\n", + "tq = TiledQTable(low, high, tiling_specs, 2)\n", + "s1 = 3; s2 = 4; a = 0; q = 1.0\n", + "print(\"[GET] Q({}, {}) = {}\".format(samples[s1], a, tq.get(samples[s1], a))) # check value at sample = s1, action = a\n", + "print(\"[UPDATE] Q({}, {}) = {}\".format(samples[s2], a, q)); tq.update(samples[s2], a, q) # update value for sample with some common tile(s)\n", + "print(\"[GET] Q({}, {}) = {}\".format(samples[s1], a, tq.get(samples[s1], a))) # check value again, should be slightly updated" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If you update the q-value for a particular state (say, `(0.25, -1.91)`) and action (say, `0`), then you should notice the q-value of a nearby state (e.g. `(0.15, -1.75)` and same action) has changed as well! This is how tile-coding is able to generalize values across the state space better than a single uniform grid." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 6. Implement a Q-Learning Agent using Tile-Coding\n", + "\n", + "Now it's your turn to apply this discretization technique to design and test a complete learning agent! " + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "class QLearningAgent:\n", + " \"\"\"Q-Learning agent that can act on a continuous state space by discretizing it.\"\"\"\n", + "\n", + " def __init__(self, env, tq, alpha=0.02, gamma=0.99,\n", + " epsilon=1.0, epsilon_decay_rate=0.9995, min_epsilon=.01, seed=0):\n", + " \"\"\"Initialize variables, create grid for discretization.\"\"\"\n", + " # Environment info\n", + " self.env = env\n", + " self.tq = tq \n", + " self.state_sizes = tq.state_sizes # list of state sizes for each tiling\n", + " self.action_size = self.env.action_space.n # 1-dimensional discrete action space\n", + " self.seed = np.random.seed(seed)\n", + " print(\"Environment:\", self.env)\n", + " print(\"State space sizes:\", self.state_sizes)\n", + " print(\"Action space size:\", self.action_size)\n", + " \n", + " # Learning parameters\n", + " self.alpha = alpha # learning rate\n", + " self.gamma = gamma # discount factor\n", + " self.epsilon = self.initial_epsilon = epsilon # initial exploration rate\n", + " self.epsilon_decay_rate = epsilon_decay_rate # how quickly should we decrease epsilon\n", + " self.min_epsilon = min_epsilon\n", + "\n", + " def reset_episode(self, state):\n", + " \"\"\"Reset variables for a new episode.\"\"\"\n", + " # Gradually decrease exploration rate\n", + " self.epsilon *= self.epsilon_decay_rate\n", + " self.epsilon = max(self.epsilon, self.min_epsilon)\n", + " \n", + " self.last_state = state\n", + " Q_s = [self.tq.get(state, action) for action in range(self.action_size)]\n", + " self.last_action = np.argmax(Q_s)\n", + " return self.last_action\n", + " \n", + " def reset_exploration(self, epsilon=None):\n", + " \"\"\"Reset exploration rate used when training.\"\"\"\n", + " self.epsilon = epsilon if epsilon is not None else self.initial_epsilon\n", + "\n", + " def act(self, state, reward=None, done=None, mode='train'):\n", + " \"\"\"Pick next action and update internal Q table (when mode != 'test').\"\"\"\n", + " Q_s = [self.tq.get(state, action) for action in range(self.action_size)]\n", + " # Pick the best action from Q table\n", + " greedy_action = np.argmax(Q_s)\n", + " if mode == 'test':\n", + " # Test mode: Simply produce an action\n", + " action = greedy_action\n", + " else:\n", + " # Train mode (default): Update Q table, pick next action\n", + " # Note: We update the Q table entry for the *last* (state, action) pair with current state, reward\n", + " value = reward + self.gamma * max(Q_s)\n", + " self.tq.update(self.last_state, self.last_action, value, self.alpha)\n", + "\n", + " # Exploration vs. exploitation\n", + " do_exploration = np.random.uniform(0, 1) < self.epsilon\n", + " if do_exploration:\n", + " # Pick a random action\n", + " action = np.random.randint(0, self.action_size)\n", + " else:\n", + " # Pick the greedy action\n", + " action = greedy_action\n", + "\n", + " # Roll over current state, action for next step\n", + " self.last_state = state\n", + " self.last_action = action\n", + " return action" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Tiling: [, ] / + () => \n", + " [-1.0, 1.0] / 5 + (-0.13333334028720856) => [-0.733 -0.333 0.067 0.467]\n", + " [-1.0, 1.0] / 5 + (-0.13333334028720856) => [-0.733 -0.333 0.067 0.467]\n", + " [-1.0, 1.0] / 5 + (-0.13333334028720856) => [-0.733 -0.333 0.067 0.467]\n", + " [-1.0, 1.0] / 5 + (-0.13333334028720856) => [-0.733 -0.333 0.067 0.467]\n", + " [-12.566370964050293, 12.566370964050293] / 5 + (-1.675516128540039) => [-9.215 -4.189 0.838 5.864]\n", + " [-28.274333953857422, 28.274333953857422] / 5 + (-3.769911289215088) => [-20.735 -9.425 1.885 13.195]\n", + "Tiling: [, ] / + () => \n", + " [-1.0, 1.0] / 5 + (0.0) => [-0.6 -0.2 0.2 0.6]\n", + " [-1.0, 1.0] / 5 + (0.0) => [-0.6 -0.2 0.2 0.6]\n", + " [-1.0, 1.0] / 5 + (0.0) => [-0.6 -0.2 0.2 0.6]\n", + " [-1.0, 1.0] / 5 + (0.0) => [-0.6 -0.2 0.2 0.6]\n", + " [-12.566370964050293, 12.566370964050293] / 5 + (0.0) => [-7.54 -2.513 2.513 7.54 ]\n", + " [-28.274333953857422, 28.274333953857422] / 5 + (0.0) => [-16.965 -5.655 5.655 16.965]\n", + "Tiling: [, ] / + () => \n", + " [-1.0, 1.0] / 5 + (0.13333334028720856) => [-0.467 -0.067 0.333 0.733]\n", + " [-1.0, 1.0] / 5 + (0.13333334028720856) => [-0.467 -0.067 0.333 0.733]\n", + " [-1.0, 1.0] / 5 + (0.13333334028720856) => [-0.467 -0.067 0.333 0.733]\n", + " [-1.0, 1.0] / 5 + (0.13333334028720856) => [-0.467 -0.067 0.333 0.733]\n", + " [-12.566370964050293, 12.566370964050293] / 5 + (1.675516128540039) => [-5.864 -0.838 4.189 9.215]\n", + " [-28.274333953857422, 28.274333953857422] / 5 + (3.769911289215088) => [-13.195 -1.885 9.425 20.735]\n", + "QTable(): size = (5, 5, 5, 5, 5, 5, 3)\n", + "QTable(): size = (5, 5, 5, 5, 5, 5, 3)\n", + "QTable(): size = (5, 5, 5, 5, 5, 5, 3)\n", + "TiledQTable(): no. of internal tables = 3\n", + "Environment: >>\n", + "State space sizes: [(5, 5, 5, 5, 5, 5), (5, 5, 5, 5, 5, 5), (5, 5, 5, 5, 5, 5)]\n", + "Action space size: 3\n" + ] + } + ], + "source": [ + "n_bins = 5\n", + "bins = tuple([n_bins]*env.observation_space.shape[0])\n", + "offset_pos = (env.observation_space.high - env.observation_space.low)/(3*n_bins)\n", + "\n", + "tiling_specs = [(bins, -offset_pos),\n", + " (bins, tuple([0.0]*env.observation_space.shape[0])),\n", + " (bins, offset_pos)]\n", + "\n", + "tq = TiledQTable(env.observation_space.low, \n", + " env.observation_space.high, \n", + " tiling_specs, \n", + " env.action_space.n)\n", + "agent = QLearningAgent(env, tq)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Episode 10000/10000 | Max Average Score: -242.47" + ] + } + ], + "source": [ + "def run(agent, env, num_episodes=10000, mode='train'):\n", + " \"\"\"Run agent in given reinforcement learning environment and return scores.\"\"\"\n", + " scores = []\n", + " max_avg_score = -np.inf\n", + " for i_episode in range(1, num_episodes+1):\n", + " # Initialize episode\n", + " state = env.reset()\n", + " action = agent.reset_episode(state)\n", + " total_reward = 0\n", + " done = False\n", + "\n", + " # Roll out steps until done\n", + " while not done:\n", + " state, reward, done, info = env.step(action)\n", + " total_reward += reward\n", + " action = agent.act(state, reward, done, mode)\n", + "\n", + " # Save final score\n", + " scores.append(total_reward)\n", + "\n", + " # Print episode stats\n", + " if mode == 'train':\n", + " if len(scores) > 100:\n", + " avg_score = np.mean(scores[-100:])\n", + " if avg_score > max_avg_score:\n", + " max_avg_score = avg_score\n", + " if i_episode % 100 == 0:\n", + " print(\"\\rEpisode {}/{} | Max Average Score: {}\".format(i_episode, num_episodes, max_avg_score), end=\"\")\n", + " sys.stdout.flush()\n", + " return scores\n", + "\n", + "scores = run(agent, env)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "def plot_scores(scores, rolling_window=100):\n", + " \"\"\"Plot scores and optional rolling mean using specified window.\"\"\"\n", + " plt.plot(scores); plt.title(\"Scores\");\n", + " rolling_mean = pd.Series(scores).rolling(rolling_window).mean()\n", + " plt.plot(rolling_mean);\n", + " return rolling_mean\n", + "\n", + "rolling_mean = plot_scores(scores)" + ] + } + ], + "metadata": { + "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.6.7" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +}