{ "metadata": { "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.4" }, "orig_nbformat": 2, "kernelspec": { "name": "python3", "display_name": "Python 3.7.4 64-bit ('base': conda)" }, "interpreter": { "hash": "c77bccf6af5544921fca6eddbefe5e7c44ddf71c61b63c74bd828ca1d0e389a0" } }, "nbformat": 4, "nbformat_minor": 2, "cells": [ { "source": [ "# Peter and the Wolf: Reinforcement Learning Primer\n", "\n", "In this tutorial, we will learn how to apply Reinforcement learning to a problem of path finding. The setting is inspired by [Peter and the Wolf](https://en.wikipedia.org/wiki/Peter_and_the_Wolf) musical fairy tale by Russian composer [Sergei Prokofiev](https://en.wikipedia.org/wiki/Sergei_Prokofiev). It is a story about young pioneer Peter, who bravely goes out of his house to the forest clearing to chase a wolf. We will train machine learning algorithms that will help Peter to explore the surrounding area and build an optimal navigation map.\n", "\n", "First, let's import a bunch of useful libraries:" ], "cell_type": "markdown", "metadata": {} }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "import numpy as np\n", "import random\n", "import math" ] }, { "source": [ "## Overview of Reinforcement Learning\n", "\n", "**Reinforcement Learning** (RL) is a learning technique that allows us to learn an optimal behaviour of an **agent** in some **environment** by running many experiments. An agent in this environment should have some **goal**, defined by a **reward function**.\n", "\n", "## The Environment\n", "\n", "For simplicity, let's consider Peter's world to be a square board of size `width` x `height`. Each cell in this board can either be:\n", "* **ground**, on which Peter and other creatures can walk\n", "* **water**, on which you obviously cannot walk\n", "* **a tree** or **grass** - a place where you can rest\n", "* **an apple**, which represents something Peter would be glad to find in order to feed himself\n", "* **a wolf**, which is dangerous and should be avoided\n", "\n", "To work with the environment, we will define a class called `Board`. In order not to clutter this notebook too much, we have moved all code to work with the board into separate `rlboard` module, which we will now import. You may look inside this module to get more details about the internals of the implementation." ], "cell_type": "code", "metadata": {}, "execution_count": null, "outputs": [] }, { "source": [ "Let's now create a random board and see how it looks:" ], "cell_type": "markdown", "metadata": {} }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "output_type": "display_data", "data": { "text/plain": "
", "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", "image/png": "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\n" }, "metadata": { "needs_background": "light" } } ], "source": [ "# code block 1" ] }, { "source": [ "## Actions and Policy\n", "\n", "In our example, Peter's goal would be to find an apple, while avoiding the wolf and other obstacles. To do this, he can essentially walk around until he finds and apple. Therefore, at any position he can chose between one of the following actions: up, down, left and right. We will define those actions as a dictionary, and map them to pairs of corresponding coordinate changes. For example, moving right (`R`) would correspond to a pair `(1,0)`." ], "cell_type": "markdown", "metadata": {} }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "# code block 2" ] }, { "source": [ "The strategy of our agent (Peter) is defined by a so-called **policy**. A policy is a function that returns the action at any given state. In our case, the state of the problem is represented by the board, including the current position of the player. \n", "\n", "The goal of reinforcement learning is to eventually learn a good policy that will allow us to solve the problem efficiently. However, as a baseline, let's consider the simplest policy called **random walk**.\n", "\n", "## Random walk\n", "\n", "Let's first solve our problem by implementing a random walk strategy. With random walk, we will randomly chose the next action from allowed ones, until we reach the apple. " ], "cell_type": "markdown", "metadata": {} }, { "source": [ "# Let's run a random walk experiment several times and see the average number of steps taken: code block 3" ], "cell_type": "code", "metadata": {}, "execution_count": null, "outputs": [] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Average path length = 32.87096774193548, eaten by wolf: 7 times\n" ] } ], "source": [ "# code block 4" ] }, { "source": [ "## Reward Function\n", "\n", "To make our policy more intelligent, we need to understand which moves are \"better\" than others. To do this, we need to define our goal. The goal can be defined in terms of **reward function**, that will return some score value for each state. The higher the number - the better the reward function is.\n", "\n" ], "cell_type": "markdown", "metadata": {} }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "#code block 5" ] }, { "source": [ "An interesting thing about the reward function is that in most of the cases *we are only given substantial reward at the end of the game*. It means that our algorithm should somehow remember \"good\" steps that lead to a positive reward at the end and increase their importance. Similarly, all moves that lead to bad results should be discouraged.\n", "\n", "## Q-Learning\n", "\n", "An algorithm that we will discuss here is called **Q-Learning**. In this algorithm, the policy is defined by a function (or a data structure) called **Q-Table**. It records the \"goodness\" of each of the actions in a given state, i.e. $Q : {S\\times A}\\to\\mathbb{R}$, where $S$ is a set of states, $A$ is the set of actions.\n", "\n", "It is called Q-Table because it is often convenient to represent it as a table, or multi-dimensional array. Since our board has dimentions `width` x `height`, we can represent Q-Table by a numpy array with shape `width` x `height` x `len(actions)`:" ], "cell_type": "markdown", "metadata": {} }, { "cell_type": "code", "execution_count": 55, "metadata": {}, "outputs": [], "source": [ "# code block 6" ] }, { "source": [ "Notice that we initially initialize all values of Q-Table with equal value, in our case - 0.25. That corresponds to the \"random walk\" policy, because all moves in each state are equally good. We can pass the Q-Table to the `plot` function in order to visualize the table on the board:" ], "cell_type": "markdown", "metadata": {} }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "output_type": "display_data", "data": { "text/plain": "
", "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", "image/png": "iVBORw0KGgoAAAANSUhEUgAAAW4AAAFpCAYAAAC8p8I3AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+17YcXAAAgAElEQVR4nOzdeXhU5f3+8fczk8m+BwIYBGQRZIkoiCKbCC6tuwVFZSkiqC1SXHAB259VYhUVqtWKKCIg7igoBa2CK/AFsWVTgQAJSAiBJGSZfeac5/dHJikICSgJZyZ8Xl5zJXMyM+cmydyePGd5lNYaIYQQkcNmdQAhhBC/jBS3EEJEGCluIYSIMFLcQggRYaS4hRAiwkhxCyFEhGmw4lZKXa6U2qqU2q6UerCh1iOEEKca1RDHcSul7MA24BJgD/AtcJPW+od6X5kQQpxiGmqLuxewXWu9U2vtB94CrmmgdQkhxCmloYo7C/jpkPt7QsuEEEKcoKgGel11lGWHjckopcYB4wAcDkeP7OzsBopy4nw+H5WVlTRp0sTqKLUqKyvD4XCQkJBgdZRaFRYWkpmZid1utzpKrXbv3k2rVq2sjlGrYDDIgQMHaNGihdVRauV0OgkGg6SmplodpVYHDhwgOTmZmJgYq6PU6vvvv8fj8RytS0FrXe83oDfwySH3HwIequ3xmZmZOpzl5ubqWbNmWR2jTh988IFetWqV1THq9Nhjj+nS0lKrY9TKNE09fvx4q2PUqaSkROfk5Fgdo07ffPONXrRokdUx6jRz5kydm5trdYw6hXrxqJ3ZUEMl3wIdlFJnKKWigWHAhw20LiGEOKU0yFCJ1jqolBoPfALYgVe11t83xLqEEOJU01Bj3GitlwJLG+r1hRDiVCVnTgohRISR4hZCiAgjxS2EEBFGilsIISKMFLcQQkQYKW4hhIgwUtxCCBFhpLiFECLCSHELIUSEkeIWQogII8UthBARRopbCCEiTKMt7ry8vOprgYclwzDYvXu31THq5HK5OHDggNUx6nTgwAFcLpfVMeq0e/duDMOwOkattNbk5eVZHaNOfr+fvXv3Wh2jTmVlZZSVlZ2UdTXY1QGtsnXrVr7++ms2bdpEt27d6N69Oz179rQ61mG++OILtm7dytatW+ncuTOXX345LVu2tDrWYd5++20KCgqoqKigZcuWjBgxIqxmC/H5fMyfP589e/aQlJREVlYWw4YNszrWYQoKCli2bBk//PADHTt25Mwzz2TgwIFWxzrMunXrWL9+PRs3biQ7O5u+ffvSqVMnq2MdZsmSJeTn51NQUEC7du0YMmRIWM2uo7Vm7ty5FBYWAtCiRQtGjRqFUkefvKY+NLot7q+//po1a9bwl7/8hZ07d/LBBx9YHekIs2fPxu12c//997Ns2TI2b95sdaQjPProo3Tp0oXrrruOv//977jdbqsjHcbj8TBjxgyuvfZaunbtyqOPPmp1pCN8//33LF26lEmTJuH1ennllVesjnSERYsWsXPnTh555BHWrl3L119/bXWkIzz11FNkZGQwZswY5s+fz759+6yOdBjTNJk6dSr9+/enX79+TJ06FdM0G3Sdjaq48/Ly2LRpEzExMVx99dU8+OCDxMbGsnLlSquj1Vi4cCG9e/fm448/5uGHH+aFF15gwYIFlJeXWx2txuTJk/nb3/7Ggw8+yKpVq1i0aBG33Xab1bEOc9tttzF58mRGjx5NamoqL7zwAg899JDVsWpUVFQwb948unbtyhVXXMGIESPo27cv7733ntXRaqxatYro6Gh27tzJqFGjeOKJJ9i8eTM7d+60OlqN5557jjvvvJNnn32WefPmMX/+fCZPnhxWQ0/jxo3j6aefZvz48ZSWlvLee+8xbty4Bl1noxoqadOmDd26dWPHjh0sW7aMefPm4fV6ufDCC62OVuP6669n1KhR3HrrrVx66aXcf//93HzzzSQnJ1sdrcbUqVPp3r07c+fOJS0tjRtvvJGlS8NrToyXX36ZSy+9lPfff5+Kigpuu+02NmzYYHWsGklJSYwcOZK3336bzz77jBUrVrBy5Urmz59vdbQavXv3ZunSpVx44YX8/ve/58knn6Rr166cccYZVkercddddzFw4ECeeOIJOnbsyLhx43jyySex2cJnm/Oll14iOzub999/H6h6j2/cuLFB19moilspRffu3cnLy+PZZ5/F6/Vy0UUXNehY0y+llOKqq65iw4YNbN26lczMTNq1axdWGW02GyNHjuSDDz7AZrMxePBg4uPjrY51mNjYWC699FLmzp2LaZqMHDkyrN7MSinatm1L8+bNef755/H7/Vx99dVh9XNWSjFgwAC++OILnn32WQC6d+8edhlvueUWPvvs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\n" }, "metadata": { "needs_background": "light" } } ], "source": [ "m.plot(Q)" ] }, { "source": [ "In the center of each cell there is an \"arrow\" that indicates the preferred direction of movement. Since all directions are equal, a dot is displayed.\n", "\n", "Now we need to run the simulation, explore our environment, and learn better distribution of Q-Table values, which will allow us to find the path to the apple much faster.\n", "\n", "## Essence of Q-Learning: Bellman Equation\n", "\n", "Once we start moving, each action will have a corresponding reward, i.e. we can theoretically select the next action based on the highest immediate reward. However, in most of the states the move will not achieve our goal or reaching the apple, and thus we cannot immediately decide which direction is better.\n", "\n", "> It is not the immediate result that matters, but rather the final result, which we will obtain at the end of the simulation.\n", "\n", "In order to account for this delayed reward, we need to use the principles of **[dynamic programming](https://en.wikipedia.org/wiki/Dynamic_programming)**, which allows us to think about our problem recursively.\n", "\n", "Suppose we are now at the state $s$, and we want to move to the next state $s'$. By doing so, we will receive the immediate reward $r(s,a)$, defined by reward function, plus some future reward. If we suppose that our Q-Table correctly reflects the \"attractiveness\" of each action, then at state $s'$ we will chose an action $a'$ that corresponds to maximum value of $Q(s',a')$. Thus, the best possible future reward we could get at state $s'$ will be defined as $\\max_{a'}Q(s',a')$ (maximum here is computed over all possible actions $a'$ at state $s'$). \n", "\n", "This gives the **Bellman formula** for calculating the value of Q-Table at state $s$, given action $a$:\n", "\n", "$$Q(s,a) = r(s,a) + \\gamma \\max_{a'} Q(s',a')$$\n", "\n", "Here $\\gamma$ is so-called **discount factor** that determines to which extent you should prefer current reward over the future reward and vice versa.\n", "\n", "## Learning Algorithm\n", "\n", "Given the equation above, we can now write a pseudo-code for our leaning algorithm:\n", "\n", "* Initialize Q-Table Q with equal numbers for all states and actions\n", "* Set learning rate $\\alpha\\leftarrow 1$\n", "* Repeat simulation many times\n", " 1. Start at random position\n", " 1. Repeat\n", " 1. Select an action $a$ at state $s$\n", " 2. Exectute action by moving to a new state $s'$\n", " 3. If we encounter end-of-game condition, or total reward is too small - exit simulation \n", " 4. Compute reward $r$ at the new state\n", " 5. Update Q-Function according to Bellman equation: $Q(s,a)\\leftarrow (1-\\alpha)Q(s,a)+\\alpha(r+\\gamma\\max_{a'}Q(s',a'))$\n", " 6. $s\\leftarrow s'$\n", " 7. Update total reward and decrease $\\alpha$.\n", "\n", "## Exploit vs. Explore\n", "\n", "In the algorithm above, we did not specify how exactly we should chose an action at step 2.1. If we are choosing the action randomly, we will randomly **explore** the environment, and we are quite likely to die often, and also explore such areas where we would not normally go. An alternative approach would be to **exploit** the Q-Table values that we already know, and thus to chose the best action (with highers Q-Table value) at state $s$. This, however, will prevent us from exploring other states, and quite likely we might not find the optimal solution.\n", "\n", "Thus, the best approach is to balance between exploration and exploitation. This can be easily done by choosing the action at state $s$ with probabilities proportional to values in Q-Table. In the beginning, when Q-Table values are all the same, it would correspond to random selection, but as we learn more about our environment, we would be more likely to follow the optimal route, however, choosing the unexplored path once in a while.\n", "\n", "## Python Implementation\n", "\n", "Now we are ready to implement the learning algorithm. Before that, we also need some function that will convert arbitrary numbers in the Q-Table into a vector of probabilities for corresponding actions:" ], "cell_type": "markdown", "metadata": {} }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "# code block 7" ] }, { "source": [ "We add small amount `eps` to the original vector in order to avoid division by 0 in the initial case, when all components of the vector are identical.\n", "\n", "The actual learning algorithm we will run for 5000 experiments, also called **epochs**: " ], "cell_type": "markdown", "metadata": {} }, { "cell_type": "code", "execution_count": 56, "metadata": {}, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "" ] } ], "source": [ "\n", "from IPython.display import clear_output\n", "\n", "lpath = []\n", "\n", "# code block 8" ] }, { "source": [ "After executing this algorithm, the Q-Table should be updated with values that define the attractiveness of different actions at each step. We can try to visualize the Q-Table by plotting a vector at each cell that will point in the desired direction of movement. For simplicity, we draw a small circle instead of arrow head." ], "cell_type": "code", "metadata": {}, "execution_count": null, "outputs": [] }, { "cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [ { "output_type": "display_data", "data": { "text/plain": "
", "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", "image/png": "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Tz9N/fr1mTRpEuecc47RkY4gpWTOnDmcd9553HHHHSxdupS8vLyIt6sKt6KcBCkl2dnZfPjhh8yaNYusrKyoK47BYJD9+/fz6KOPsnz5cnJzc42OdMqZPn069957L02bNmXKlCm8+eabjB8/Hl3XI9quKtyKcpK6dOlCVlYWVquVTp064ff7jY50hOzsbLp160b37t1ZuHAhV1111fG/SflbxowZw4wZM/jss8/YtGkTt956K5MnT474jShU4VaUkzBr1iwef/xxLr74Ylq3bs20adOYMWOG0bHKSSmZPXs2s2fPxuVyMWbMGAYNGsT8+fONjnbKGTVqFEVFRbjdbq699loyMjIi3qYq3LXEU089Rc+ePfH5fDXmRrCBQIDvvvuO9957j0AgEFVDEb1792bRokU0atSIzz//nOnTp9O7d2+jYx3h4osv5scff+Scc87h3nvvZcWKFVG9e2RNdcMNNzB48GDatWvH6NGjq2XjKlW4a4nx48fz2Wef0aNHD5544gl+/fVXgsGg0bEqJKWkZcuWfPfdd2RlZdGgQYOoGopo2bIlubm5TJw4EQCfz8fTTz/N/v37DU4WIoSgbdu2LFq0iIULF6LrOpmZmcyaNYuioiKj4ymVpAp3LVG2peovv/xC9+7dee2113j11Vf55ptvjI52VF9++SW33nord911Fw6HgyFDhvDpp58aHaucEIIff/yR22+/nauvvpoNGzYwbdo0XnvtNXbs2GF0PADq16/PunXrqF+/Pq+88grr16/niiuuYObMmZSWlhodT6kEVbhrocsuu4xXXnmFRo0a8ccffzBo0CB27txpdKwjxMfH43Q6sdlspKSk4HQ6mTp1qtGx/uLss8+mZ8+eADRu3JjBgwczc+ZM8vPzjQ12mAEDBtC4cehWsD179uTCCy/koYceiqqhJ+XvUQtwaikhBNdffz0ul4vrr7+ecePGsWPHDq655hruu+8+EhIS/nLT3urUo0cP7rzzTnRdp27duvznP//hnXfeoWPHjkyYMIHevXuTmJgYdYsxWrduzfjx4xk4cCDNmjXj5ZdfJjY21uhYR+jevTupqal06tSJ2267jREjRmCxqFJQGdX9c6h63LWcw+GgWbNmfPzxx6xfv55zzz2X/v37s3DhQtatW2dYLiEEW7dupX///rRt25asrCx69+7N+vXr2bJlCzff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\n" }, "metadata": { "needs_background": "light" } } ], "source": [ "m.plot(Q)" ] }, { "source": [ "## Checking the Policy\n", "\n", "Since Q-Table lists the \"attractiveness\" of each action at each state, it is quite easy to use it to define the efficient navigation in our world. In the simplest case, we can just select the action corresponding to the highest Q-Table value:" ], "cell_type": "markdown", "metadata": {} }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "2" ] }, "metadata": {}, "execution_count": 13 } ], "source": [ "# code block 9" ] }, { "source": [ "If you try the code above several times, you may notice that sometimes it just \"hangs\", and you need to press the STOP button in the notebook to interrupt it. This happens because there could be situations when two states \"point\" to each other in terms of optimal Q-Value, in which case the agents ends up moving between those states indefinitely.\n", "\n", "> **Task 1:** Modify the `walk` function to limit the maximum length of path by a certain number of steps (say, 100), and watch the code above return this value from time to time.\n", "\n", "> **Task 2:** Modify the `walk` function so that it does not go back to the places where is has already been previously. This will prevent `walk` from looping, however, the agent can still end up being \"trapped\" in a location from which it is unable to escape.\n", "\n", "Better navigation policy would be the one that we have used during training, which combines exploitation and exploration. In this policy, we will select each action with a certain probability, proportional to the values in Q-Table. This strategy may still result in the agent returning back to the position it has already explored, but, as you can see from the code below, it results in very short average path to the desired location (remember that `print_statistics` runs the simulation 100 times): " ], "cell_type": "code", "metadata": {}, "execution_count": null, "outputs": [] }, { "cell_type": "code", "execution_count": 58, "metadata": {}, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Average path length = 5.31, eaten by wolf: 0 times\n" ] } ], "source": [ "\n", "# code block 10" ] }, { "source": [ "## Investigating Learning Process\n", "\n", "As we have mentioned, the learning process is a balance between exploration and exploration of gained knowledge about the structure of problem space. We have seen that the result of learning (the ability to help an agent to find short path to the goal) has improved, but it is also interesting to observe how the average path length behaves during the learning process: " ], "cell_type": "markdown", "metadata": {} }, { "cell_type": "code", "execution_count": 57, "metadata": {}, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "[]" ] }, "metadata": {}, "execution_count": 57 }, { "output_type": "display_data", "data": { "text/plain": "
", "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", "image/png": "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\n" }, "metadata": { "needs_background": "light" } } ], "source": [ "plt.plot(lpath)" ] }, { "source": [ "What we see here is that at first the average path length increased. This is probably due to the fact that when we know nothing about the environment - we are likely to get trapped into bad states, water or wolf. As we learn more and start using this knowledge, we can explore the environment for longer, but we still do not know well where apples are.\n", "\n", "Once we learn enough, it becomes easier for the agent to achieve the goal, and the path length starts to decrease. However, we are still open to exploration, so we often diverge away from the best path, and explore new options, making the path longer than optimal.\n", "\n", "What we also observe on this graph, is that at some point the length increased abruptly. This indicates stochastic nature of the process, and that we can at some point \"sploil\" the Q-Table coefficients, by overwriting them with new values. This ideally should be minimized by decreasing learning rate (i.e. towards the end of training we only adjust Q-Table values by a small value).\n", "\n", "Overall, it is important to remember that the success and quality of the learning process significantly depends on parameters, such as leaning rate, learning rate decay and discount factor. Those are often called **hyperparameters**, to distinguish them from **parameters** which we optimize during training (eg. Q-Table coefficients). The process of finding best hyperparameter values is called **hyperparameter optimization**, and it deserves a separate topic." ], "cell_type": "markdown", "metadata": {} }, { "source": [ "## Exercise\n", "#### More Realistic Peter and the Wolf World\n", "\n", "In our situation, Peter was able to move around almost without getting tired or hungry. In more realistic world, we has to sit down and rest from time to time, and also to feed himself. Let's make our world more realistic, by implementing the following rules:\n", "\n", "1. By moving from one place to another, Peter loses **energy** and gains some **fatigue**.\n", "2. Peter can gain more energy by eating apples.\n", "3. Peter can get rid of fatigue by resting under the tree or on the grass (i.e. walking into a board location with a tree or grass - green field)\n", "4. Peter needs to find and kill the wolf\n", "5. In order to kill the wolf, Peter needs to have certain levels of energy and fatigue, otherwise he loses the battle.\n", "\n", "Modify the reward function above according to the rules of the game, run the reinforcement learning algorithm to learn the best strategy for winning the game, and compare the results of random walk with your algorithm in terms of number of games won and lost.\n", "\n", "\n", "> **Note**: You may need to adjust hyperparameters to make it work, especially the number of epochs. Because the success of the game (fighting the wolf) is a rare event, you can expect much longer training time.\n", "\n" ], "cell_type": "markdown", "metadata": {} }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ] }