{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Function Approximation (1) \n", "## Tile Coding in the Mountain Car problem\n", "\n", "In this notebook we will show benefits of FA in the Mountain Car problem\n", "\n", "The Goal of Mountain Car problem is to reach the top of a hill when the obvious solution of accelerating does not work when starting form the bottom of the valley.\n", "\n", "https://gym.openai.com/envs/MountainCar-v0/" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "[2018-04-12 18:01:49,008] Making new env: MountainCar-v0\n" ] } ], "source": [ "import gym\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "env = gym.make(\"MountainCar-v0\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "From the previous notebook, we can obtain the action and state space" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Actions : Discrete(3)\n", "Variables: Box(2,)\n", "Max. var: [ 0.6 0.07]\n", "Min. var: [-1.2 -0.07]\n" ] } ], "source": [ "print('Actions : ',env.action_space)\n", "print('Variables: ',env.observation_space)\n", "print('Max. var: ',env.observation_space.high)\n", "print('Min. var: ',env.observation_space.low)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Variables correspond to position in x axis and speed. Actions correspond to forward and backward acceleration respectively.\n", "\n", "Let's see performance of random behaviour" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "observation = env.reset()\n", "for _ in range(300):\n", " env.render()\n", " action = env.action_space.sample() # this takes random actions\n", " observation, reward, done, info = env.step(action)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "For this problem we will define Tile Coding. The following Class define a TileCoding. Each variable will be discretized using *numTilings* grids, each one with *tilesPerTiling x tilesPerTiling* dimension. Tiles are overlaping in the usual way:\n", "\n", "\n", "\n" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "class Tilecoder:\n", "\n", " def __init__(self, numTilings, tilesPerTiling):\n", " # Set max value for normalization of inputs\n", " self.maxNormal = 1\n", " self.maxVal = env.observation_space.high\n", " self.minVal = env.observation_space.low\n", " self.numTilings = numTilings\n", " self.tilesPerTiling = tilesPerTiling\n", " self.dim = len(self.maxVal)\n", " self.numTiles = (self.tilesPerTiling**self.dim) * self.numTilings\n", " self.actions = env.action_space.n\n", " self.n = self.numTiles * self.actions\n", " self.tileSize = np.divide(np.ones(self.dim)*self.maxNormal, self.tilesPerTiling-1)\n", "\n", " def getFeatures(self, variables):\n", " # Ensures range is always between 0 and self.maxValue\n", " values = np.zeros(self.dim)\n", " for i in range(len(env.observation_space.shape)+1):\n", " values[i] = self.maxNormal * ((variables[i] - self.minVal[i])/(self.maxVal[i]-self.minVal[i]))\n", " tileIndices = np.zeros(self.numTilings)\n", " matrix = np.zeros([self.numTilings,self.dim])\n", " for i in range(self.numTilings):\n", " for i2 in range(self.dim):\n", " matrix[i,i2] = int(values[i2] / self.tileSize[i2] + i / self.numTilings)\n", " for i in range(1,self.dim):\n", " matrix[:,i] *= self.tilesPerTiling**i\n", " for i in range(self.numTilings):\n", " tileIndices[i] = (i * (self.tilesPerTiling**self.dim) + sum(matrix[i,:])) \n", " return tileIndices\n", "\n", " def oneHotVector(self, features, action):\n", " oneHot = np.zeros(self.n)\n", " for i in features:\n", " index = int(i + (self.numTiles*action))\n", " oneHot[index] = 1\n", " return oneHot\n", "\n", " def getVal(self, theta, features, action):\n", " val = 0 \n", " for i in features:\n", " index = int(i + (self.numTiles*action))\n", " val += theta[index]\n", " return val\n", "\n", " def getQ(self, features, theta):\n", " Q = np.zeros(self.actions)\n", " for i in range(self.actions):\n", " Q[i] = tile.getVal(theta, features, i)\n", " return Q\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Q-learning with TileCoding\n", "\n", "Let's start defining one function to implement epsilon-greedy procedure and another one to sum long-term reward of the current episode form position *t*" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "def e_greedy_policy(Qs):\n", " return env.action_space.sample() if (np.random.random() <= epsilon) else np.argmax(Q)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Definition of funtion to collect scores of an episode whith completely greedy policy. Just to compare scores" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "def rollout(niter):\n", " G = 0\n", " for i in range(niter):\n", " state = env.reset()\n", " for _ in range(1000):\n", " F = tile.getFeatures(state)\n", " Q = tile.getQ(F, theta) \n", " action = np.argmax(Q)\n", " state, reward, done, info = env.step(action)\n", " G += reward\n", " if done: break\n", " return G/niter\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now, we define a TileCoder of 7x14 and apply Q-learning procedure" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Average reward = -193.345\n", "Average reward = -160.68\n", "Average reward = -142.11\n", "Average reward = -129.25\n", "Average reward = -125.67\n", "Average reward = -131.57\n", "Average reward = -128.69\n", "Average reward = -122.05\n", "Average reward = -123.705\n", "Average reward = -125.395\n", "Average reward = -123.175\n", "Average reward = -122.74\n", "Average reward = -127.015\n", "Average reward = -122.975\n", "Average reward = -120.465\n" ] } ], "source": [ "tile = Tilecoder(7,14) # Definition of tiles (7x (14x14)) \n", "theta = np.random.uniform(-0.001, 0, size=(tile.n)) # Parameters for FA (7x (14x14)) = 1.372 parameters\n", "\n", "# Parameters of learning\n", "alpha = 0.05\n", "gamma = 1\n", "numEpisodes = 3000\n", "epsilon = 0.05\n", "\n", "# Variables to collect scores\n", "rewardTracker = []\n", "rewardTracker2 = []\n", "episodeSum = 0\n", "counter = 0 \n", "\n", "for episodeNum in range(1,numEpisodes+1):\n", " G = 0\n", " state = env.reset()\n", " while True:\n", " F = tile.getFeatures(state) # Vector of 1.372 representing state \n", " Q = tile.getQ(F, theta) # Q-values for given state all actions\n", " action = e_greedy_policy(Q) # select action with epsilon-greedy procedure\n", " Qs = Q[action]\n", " state2, reward, done, info = env.step(action)\n", " G += reward\n", " if done == True:\n", " theta += np.multiply((alpha*(reward - Qs)), tile.oneHotVector(F,action))\n", " episodeSum += G\n", " rewardTracker.append(G) # Store reward collected\n", " rewardTracker2.append(rollout(1)) # Store reward collected TESTING with epsilon = 0\n", " if episodeNum %200 == 0:\n", " print('Average reward = {}'.format(episodeSum / 200))\n", " episodeSum = 0\n", " break\n", " Q = tile.getQ(tile.getFeatures(state2), theta)\n", " theta += np.multiply((alpha*(reward - Qs+gamma*np.max(Q))), tile.oneHotVector(F,action))\n", " state = state2\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's see behaviour learnt " ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "state = env.reset()\n", "for _ in range(200):\n", " env.render()\n", " F = tile.getFeatures(state)\n", " Q = tile.getQ(F, theta) \n", " action = np.argmax(Q)\n", " state, reward, done, info = env.step(action)\n", " if done: break" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(rewardTracker)\n", "plt.plot(rewardTracker2)\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "def smoothen(data,window_width):\n", " cumsum_vec = np.cumsum(np.insert(data, 0, 0)) \n", " return (cumsum_vec[window_width:] - cumsum_vec[:-window_width]) / window_width\n", "\n", "plt.plot(smoothen(rewardTracker2,100),label='greedy')\n", "plt.plot(smoothen(rewardTracker,100),label='e-greedy')\n", "\n", "plt.legend()\n", "plt.show()\n", "\n", "tiles_rew = rewardTracker2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Just to be sure of the benefits of the approach, let's compare learning performance without FA on a single grid. To do a fair comparison, we will use approximately the same ammount of parameters, so 1 tile of 40x40, that is, 1.600 parameters" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Average reward = -200.0\n", "Average reward = -200.0\n", "Average reward = -200.0\n", "Average reward = -200.0\n", "Average reward = -200.0\n", "Average reward = -200.0\n", "Average reward = -200.0\n", "Average reward = -200.0\n", "Average reward = -200.0\n", "Average reward = -200.0\n", "Average reward = -200.0\n", "Average reward = -200.0\n", "Average reward = -200.0\n", "Average reward = -199.835\n", "Average reward = -199.995\n" ] } ], "source": [ "tile = Tilecoder(1,40)\n", "theta = np.random.uniform(-0.001, 0, size=(tile.n))\n", "alpha = 0.05\n", "gamma = 1\n", "numEpisodes = 3000\n", "rewardTracker = []\n", "rewardTracker2 = []\n", "episodeSum = 0\n", "counter = 0 \n", "epsilon = 0.05\n", "\n", "for episodeNum in range(1,numEpisodes+1):\n", " G = 0\n", " state = env.reset()\n", " while True:\n", " #env.render()\n", " F = tile.getFeatures(state)\n", " Q = tile.getQ(F, theta)\n", " action = e_greedy_policy(Q)\n", " #action = np.argmax(Q)\n", " Qs = Q[action]\n", " state2, reward, done, info = env.step(action)\n", " G += reward\n", " if done == True:\n", " theta += np.multiply((alpha*(reward - Qs)), tile.oneHotVector(F,action))\n", " episodeSum += G\n", " rewardTracker.append(G)\n", " rewardTracker2.append(rollout(1))\n", " if episodeNum %200 == 0:\n", " print('Average reward = {}'.format(episodeSum / 200))\n", " #rewardTracker.append(episodeSum/ 100) \n", " episodeSum = 0\n", " break\n", " Q = tile.getQ(tile.getFeatures(state2), theta)\n", " theta += np.multiply((alpha*(reward - Qs+gamma*np.max(Q))), tile.oneHotVector(F,action))\n", " state = state2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "No learning at all. Let's try to reduce the number of parameters to allow higher generalization" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Average reward = -200.0\n", "Average reward = -199.7\n", "Average reward = -198.73\n", "Average reward = -197.785\n", "Average reward = -197.905\n", "Average reward = -194.21\n", "Average reward = -192.71\n", "Average reward = -178.28\n", "Average reward = -191.21\n", "Average reward = -184.51\n", "Average reward = -177.005\n", "Average reward = -181.715\n", "Average reward = -176.215\n", "Average reward = -164.04\n", "Average reward = -157.57\n" ] } ], "source": [ "tile = Tilecoder(1,14)\n", "theta = np.random.uniform(-0.001, 0, size=(tile.n))\n", "alpha = 0.05\n", "gamma = 1\n", "numEpisodes = 3000\n", "rewardTracker = []\n", "rewardTracker2 = []\n", "episodeSum = 0\n", "counter = 0 \n", "epsilon = 0.05\n", "\n", "for episodeNum in range(1,numEpisodes+1):\n", " G = 0\n", " state = env.reset()\n", " while True:\n", " #env.render()\n", " F = tile.getFeatures(state)\n", " Q = tile.getQ(F, theta)\n", " action = e_greedy_policy(Q)\n", " #action = np.argmax(Q)\n", " Qs = Q[action]\n", " state2, reward, done, info = env.step(action)\n", " G += reward\n", " if done == True:\n", " theta += np.multiply((alpha*(reward - Qs)), tile.oneHotVector(F,action))\n", " episodeSum += G\n", " rewardTracker.append(G)\n", " rewardTracker2.append(rollout(1))\n", " if episodeNum %200 == 0:\n", " print('Average reward = {}'.format(episodeSum / 200))\n", " #rewardTracker.append(episodeSum/ 100) \n", " episodeSum = 0\n", " break\n", " Q = tile.getQ(tile.getFeatures(state2), theta)\n", " theta += np.multiply((alpha*(reward - Qs+gamma*np.max(Q))), tile.oneHotVector(F,action))\n", " state = state2" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "aggre_rew = rewardTracker2\n", "plt.plot(smoothen(tiles_rew,100),label='Tiles')\n", "plt.plot(smoothen(aggre_rew,100),label='Agreg.')\n", "plt.legend()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Exercises \n", "\n", "1. Try to find better parameters for agregation approach\n", "2. Play with the parameters of Tiles\n", "3. Use same approximation with Sarsa or MonteCarlo\n", "4. **Try n-steps back-up**\n", "5. Use other exploration strategies and play with functions reducing alpha and/or epsilon" ] }, { "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.4" } }, "nbformat": 4, "nbformat_minor": 2 }