{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Q-Learning Tutorial - Frozen Lake\n", "Welcome to Q-learning!\n", "Today we'll be going through how to set up and run q-learning using both the Frozen Lake and Taxi examples from OpenAI Gym.\n", "\n", "### Imports" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "%matplotlib inline\n", "from IPython import display\n", "from IPython.display import clear_output" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "import numpy as np" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "import torch" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "import gym" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "import time" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "from gym.envs.registration import register\n", "register(\n", " id='FrozenLakeNotSlippery-v0',\n", " entry_point='gym.envs.toy_text:FrozenLakeEnv',\n", " kwargs={'map_name' : '4x4', 'is_slippery': False},\n", " max_episode_steps=100,\n", " reward_threshold=0.78, # optimum = .8196\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Set-up\n", "Here we select which environment to use. (We'll be using FrozenLakeNotSlippery first)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "# Select your environment\n", "\n", "env = gym.make('FrozenLakeNotSlippery-v0')\n", "#env = gym.make('FrozenLake-v0')\n", "#env = gym.make('Taxi-v3')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Next, we need to find the number of states and actions possible for this environment." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "number_of_states=env.observation_space.n\n", "number_of_actions=env.action_space.n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Once we have these values, we can use them to initialize our q-table.\n", "You can see here that we're initiliazing it with all zeroes - during training, a vector with small random values will be added to lift the degeneracy in the q-values" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "# Initialize q-table\n", "Q=torch.zeros([number_of_states,number_of_actions])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now for our hyper-parameters.\n", "\n", "gamma - tracks how much future reward should affect current decision making" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "# Set the gamma value\n", "gamma=0.95" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "learning rate - affects how strongly the current and future rewards influence the updated q-value" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "# Set the learning rate\n", "learning_rate=0.9" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "egreedy (epsilon) - determines to what extent newly acquired information overrides old information\n", "\n", "egreedy_final - minimum epsilon value (at which point it stops decaying)\n", "\n", "egreedy_decay - rate of decay of epsilon value" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "# Set the epsilon value\n", "egreedy=0.9\n", "egreedy_final=0.01\n", "egreedy_decay=0.999" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Training\n", "\n", "And now we can set up our training loop!\n", "\n", "Outside the loop, you can see we're setting the number of episodes to 1000. (Feel free to play around with this to see the agent's progress after different amounts of training)\n", "\n", "Action selection will be either random exploration or exploitation of the known Q-table values. The likelihood of each selection type is controlled by the epsilon parameter.\n", "\n", "After an action is chosen, we update the Q-table according to the Bellman equation described last week.\n", "\n", "After the agent reaches the goal for the first time, an animation of the agent's progress through the environment will be displayed below the code. A graphic depiction of the Q-table is also shown - as it explores more of the table, this image will change." ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Episode finished after: 6\n", "Wall time: 2min 45s\n" ] } ], "source": [ "%%time\n", "\n", "x_e = []\n", "y_e = []\n", "\n", "num_episodes=1000\n", "reach_goal = False\n", "#learning_rate=i\n", "steps_total=np.full([num_episodes],-999,dtype=np.int32)\n", "rewards_total=np.full([num_episodes],-999,dtype=np.float32)\n", "\n", "for i_episode in range(num_episodes):\n", " \n", " # reset the state for the current episode\n", " state = env.reset()\n", " \n", " # keep track of how many steps have been taken in the episode\n", " step=0\n", "\n", " #undiscounted reward for the episode\n", " current_total_reward=0\n", " \n", " while True:\n", "\n", " step+=1\n", "\n", " # small random vector added to q-table values when selecting action\n", " Q_eps=1e-6*torch.randn([number_of_actions])\n", " \n", " random_for_egreedy=torch.rand(1).item()\n", " \n", " \n", " if random_for_egreedy>egreedy:\n", " # Exploitation - select largest value from q-table\n", " action=torch.argmax(Q[state]+Q_eps).item()\n", " else:\n", " # Exploration - random action selection\n", " action=env.action_space.sample()\n", " \n", " new_state, reward, done, info = env.step(action)\n", "\n", " current_total_reward+=reward\n", " \n", " if reward>0:\n", " reach_goal = True\n", " \n", " if egreedy>egreedy_final:\n", " egreedy*=egreedy_decay\n", " \n", " # Update the q-table using the Bellman equation\n", " Q[state,action]=(1.0-learning_rate)*Q[state,action]+learning_rate*(reward+gamma *torch.max(Q[new_state]).item())\n", "\n", " state=new_state\n", " clear_output(wait=True)\n", " \n", " # Once the goal has been reached, display animation of current episode every 50 episodes\n", " if reach_goal and (i_episode%50 == 0):\n", " time.sleep(0.3)\n", " print(\"------------------------\")\n", " env.render() \n", " print(\"++++++++++++++++++++++++\")\n", " print('new state: ',new_state)\n", " print('Current reward',current_total_reward)\n", " plt.figure(figsize=(5,5))\n", " #print(Q.t())\n", " plt.imshow(Q, cmap='gray', aspect='auto')\n", " #plt.colorbar()\n", " plt.show()\n", "\n", " if done:\n", " steps_total[i_episode]=step\n", " rewards_total[i_episode]=current_total_reward\n", " print(\"Episode finished after: {}\".format(step))\n", " time.sleep(0.1)\n", " break\n", " \n", "x_e.append(torch.arange(len(rewards_total)))\n", "y_e.append(rewards_total)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Results\n", "Let's take a look at the results.\n", "\n", "First, let's look at the average reward value and number of steps from our training run." ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Average number of steps: 6.437\n" ] } ], "source": [ "print(\"Average number of steps: {}\". format(np.average(steps_total)))" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Average number of steps in last 100 episodes: 6.12\n" ] } ], "source": [ "print(\"Average number of steps in last 100 episodes: {}\". format(np.average(steps_total[-100:])))" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Average total undiscounted reward 0.8130000233650208\n" ] } ], "source": [ "print(\"Average total undiscounted reward {}\".format(np.average(rewards_total)))" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Average total undiscounted reward in the last 100 episodes 1.0\n" ] } ], "source": [ "print(\"Average total undiscounted reward in the last 100 episodes {}\".format(np.average(rewards_total[-100:])))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can take a look at the q-table now too. (Remember how it started with values of 0?)" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "tensor([[0.7351, 0.7738, 0.6983, 0.7351],\n", " [0.7351, 0.0000, 0.0000, 0.0000],\n", " [0.0000, 0.0000, 0.0000, 0.0000],\n", " [0.0000, 0.0000, 0.0000, 0.0000],\n", " [0.7738, 0.8145, 0.0000, 0.7351],\n", " [0.0000, 0.0000, 0.0000, 0.0000],\n", " [0.0000, 0.0000, 0.0000, 0.0000],\n", " [0.0000, 0.0000, 0.0000, 0.0000],\n", " [0.8145, 0.0000, 0.8574, 0.7738],\n", " [0.8145, 0.9025, 0.8145, 0.0000],\n", " [0.8574, 0.8550, 0.0000, 0.0000],\n", " [0.0000, 0.0000, 0.0000, 0.0000],\n", " [0.0000, 0.0000, 0.0000, 0.0000],\n", " [0.0000, 0.9025, 0.9500, 0.8574],\n", " [0.9025, 0.9500, 1.0000, 0.8145],\n", " [0.0000, 0.0000, 0.0000, 0.0000]])\n" ] } ], "source": [ "print(Q)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It looks like its action-taking has become much clearer." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Next we're going to look at how the total reward varied by episode." ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.figure(1,figsize=[12,5])\n", "plt.title(\"Total undiscounted reward per episode\")\n", "plt.plot(torch.arange(len(rewards_total)), rewards_total,alpha=0.6, color='green')\n", "#plt.plot(rewards_total)\n", "plt.show()\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It looks like after about 200 episodes it was on its way to learning to maximize its reward." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now let's take a look at how the number of steps it took to finish varied by episode." ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.figure(3,figsize=[12,5])\n", "plt.title(\"Steps to finish episode\")\n", "plt.plot(steps_total)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "After about 200 episodes, it looks like it found an optimal way to cross the frozen lake in 6 steps." ] }, { "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.7.7" } }, "nbformat": 4, "nbformat_minor": 2 }