├── .devcontainer ├── Dockerfile └── devcontainer.json ├── .gitignore ├── README.md ├── docs ├── 0 - Reinforcement Learning Intro.ipynb ├── 1 - Bellman Equation and the State Value.ipynb ├── 2 - Bellman Equation and the Action-State Value.ipynb ├── 3 - Q-Learning.ipynb └── 4 - Intro to Neural Networks.ipynb └── requirements.txt /.devcontainer/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM jupyter/minimal-notebook:notebook-6.4.3 2 | 3 | # Needed dependencies to run gym rendering 4 | USER root 5 | RUN apt-get update && apt-get install -y python-opengl graphviz xvfb 6 | USER ${NB_USER} 7 | 8 | # Install python dependencies 9 | COPY requirements.txt requirements.txt 10 | RUN conda install --file requirements.txt 11 | -------------------------------------------------------------------------------- /.devcontainer/devcontainer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "OpenAI", 3 | "dockerFile": "Dockerfile", 4 | "context": "../", 5 | "extensions": [ 6 | "dbaeumer.vscode-eslint", 7 | "ms-python.python", 8 | "njpwerner.autodocstring", 9 | "eamodio.gitlens", 10 | "mhutchie.git-graph", 11 | "zhuangtongfa.material-theme", 12 | "pkief.material-icon-theme", 13 | "ms-azuretools.vscode-docker", 14 | "yzhang.markdown-all-in-one", 15 | "ms-vsliveshare.vsliveshare", 16 | "Vtrois.gitmoji-vscode", 17 | "GitHub.vscode-pull-request-github" 18 | ], 19 | "settings": { 20 | "python.pythonPath": "/opt/conda/bin/python", 21 | "python.languageServer": "Pylance", 22 | "python.linting.pylintEnabled": false, 23 | "python.linting.flake8Enabled": true, 24 | "python.linting.enabled": true, 25 | "python.formatting.blackPath": "/usr/local/bin/black", 26 | "python.linting.flake8Path": "/usr/local/bin/flake8", 27 | "python.linting.mypyPath": "/usr/local/bin/mypy" 28 | }, 29 | "postAttachCommand": ["xvfb-run", "-s", "-screen 0 1400x900x24", "jupyter", "notebook"], 30 | "forwardPorts": [8888] 31 | } 32 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.ipynb_checkpoints 2 | logs -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 👋 Curso sobre Reinforcement Learning 2 | 3 | ## 🙂 Descripción 4 | 5 | En este curso se incluye **todo lo básico relacionado con el Aprendizaje por Refuerzo**. Desde los conceptos más básicos, como qué es una cadena de Markov, hasta conceptos más interesantes como la **inclusión de Redes Neuronales** en algoritmos de RL. Para ello, cada una de las clases cuenta con un Jupyter Notebook ejecutable con toda la teoría y con imágenes de esquemas que ayudan a una mejor comprensión. Esta pensado para que sea un **curso desde 0**, por ello, tanto si eres principiante, como si quieres refrescar conocimientos, este curso es para ti. 6 | 7 | ## 🔖 Tabla de Contenidos 8 | 9 | - [👋 Curso sobre Reinforcement Learning](#-curso-sobre-reinforcement-learning) 10 | - [🙂 Descripción](#-descripción) 11 | - [🔖 Tabla de Contenidos](#-tabla-de-contenidos) 12 | - [📜 Temas](#-temas) 13 | - [0️⃣ Introducción a Reinforcement Learning](#0️⃣-introducción-a-reinforcement-learning) 14 | - [1️⃣ Ecuación de Bellman: El valor de los estados](#1️⃣-ecuación-de-bellman-el-valor-de-los-estados) 15 | - [2️⃣ Ecuación de Bellman: El valor de las acciones](#2️⃣-ecuación-de-bellman-el-valor-de-las-acciones) 16 | - [3️⃣ Q Learning](#3️⃣-q-learning) 17 | - [⚡ Quick-Start: usando remote containers](#-quick-start-usando-remote-containers) 18 | 19 | Este curso está dividido en varias partes: 20 | 21 | # 📜 Temas 22 | 23 | Para ejecutar los notebooks la mejor forma es [usar docker](#-quick-start-usando-remote-containers). En apenas **unos minutos y sin instalar nada** tendrás acceso a todos los notebooks. 🤯 24 | 25 | ## 0️⃣ Introducción a Reinforcement Learning 26 | - Agente y Entorno 27 | - Recompensas, Observaciones y Acciones 28 | - Equilibrio Exploración Explotación 29 | - Maximizar la Recompensa a largo plazo 30 | - Descubriendo Gym: Creando mi primer entorno 31 | - Descubriendo Gym: Creando mi primer agente 32 | 33 | ![Reinforcement Learning Intro](https://user-images.githubusercontent.com/44867923/139915800-8224bede-c52b-47d1-bb22-2e9624687831.jpg) 34 | 35 | ## 1️⃣ Ecuación de Bellman: El valor de los estados 36 | - V-table: asignando un valor a cada estado 37 | - Ecuación de Bellman: calculando V para cada estado 38 | - Cálculo de la Política usando la V-table 39 | 40 | 41 | ![Bellman_equation State_Value](https://user-images.githubusercontent.com/44867923/140994794-51d739af-eb70-4e6a-9036-b925f23ab7fd.jpg) 42 | 43 | ## 2️⃣ Ecuación de Bellman: El valor de las acciones 44 | - Las acciones en los Procesos de decisión de Markov 45 | - Q: El valor de las acciones 46 | - Programación Dinámica: Iteración de Valores 47 | 48 | ![Q-value](https://user-images.githubusercontent.com/44867923/141012134-09ff0d88-4ce9-43af-8b04-d535cf24d897.jpg) 49 | 50 | ## 3️⃣ Q Learning 51 | - Diferencias Temporales: Q-learning 52 | - Alpha: aprender más de lo nuevo o de lo viejo 53 | - Gamma: cuanto más lejos en el futuro menos confianza 54 | - La política Óptima 55 | 56 | ![Q-learning](https://user-images.githubusercontent.com/44867923/141012234-257d26af-bf05-4dad-b402-96b54c735f41.jpg) 57 | 58 | 59 | # ⚡ Quick-Start: usando remote containers 60 | 61 | **1. Instala el Plugin de VSCode de [Remote Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers)** 62 | 63 | ``` 64 | # Presiona Ctrl + shift + p 65 | # Pega ext install ms-vscode-remote.remote-containers 66 | # Presiona Enter 67 | ``` 68 | 69 | **2. Abre el entorno de desarrollo** 70 | 71 | ``` 72 | # Presiona Ctrl + shift + p 73 | # Busca: Remote-Containers: Rebuild and Reopen in container 74 | # Presiona Enter (y espera, la primera vez tarda unos minutos) 75 | ``` 76 | 77 | **3. Abre los Notebooks** 78 | 79 | Abre el buscador y ve a [http://127.0.0.1:8888/](http://127.0.0.1:8888/) 80 | -------------------------------------------------------------------------------- /docs/0 - Reinforcement Learning Intro.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "id": "d7425342", 6 | "metadata": {}, 7 | "source": [ 8 | "# 1. Introducción al Reinforcement Learning" 9 | ] 10 | }, 11 | { 12 | "cell_type": "markdown", 13 | "id": "d99f640b", 14 | "metadata": {}, 15 | "source": [ 16 | "### 1.1 Los campos del Machine Learning" 17 | ] 18 | }, 19 | { 20 | "cell_type": "markdown", 21 | "id": "24522b87", 22 | "metadata": {}, 23 | "source": [ 24 | "Existen 3 grandes campos:\n", 25 | "\n", 26 | "- **Aprendizaje no Supervisado**: tenemos datos pero **NO** sabemos a qué grupo pertenece cada dato.\n", 27 | "- **Aprendizaje Supervisado**: tenemos datos y **SÍ** sabemos a qué grupo pertenece cada dato (etiquetas).\n", 28 | "- **Aprendizaje por Refuerzo**: no tenemos datos, los datos se obtienen explorando un entorno.\n" 29 | ] 30 | }, 31 | { 32 | "cell_type": "markdown", 33 | "id": "54c3048d", 34 | "metadata": {}, 35 | "source": [ 36 | "![esquema_ML](https://la.mathworks.com/discovery/reinforcement-learning/_jcr_content/mainParsys3/discoverysubsection/mainParsys/image.adapt.full.medium.png/1630398182247.png)" 37 | ] 38 | }, 39 | { 40 | "cell_type": "markdown", 41 | "id": "f4b822ee", 42 | "metadata": {}, 43 | "source": [ 44 | "### 1.2 Reinforcement Learning" 45 | ] 46 | }, 47 | { 48 | "cell_type": "markdown", 49 | "id": "7e46eff1", 50 | "metadata": {}, 51 | "source": [ 52 | "![Reinforcement Learning simple schema](https://la.mathworks.com/discovery/reinforcement-learning/_jcr_content/mainParsys3/discoverysubsection_603098216/mainParsys3/image.adapt.full.medium.png/1630398182451.png)" 53 | ] 54 | }, 55 | { 56 | "cell_type": "markdown", 57 | "id": "f3f3b0fb", 58 | "metadata": {}, 59 | "source": [ 60 | "1. El **agente** obtiene unas **observaciones** del entorno\n", 61 | "2. En función a esas **observaciones** decide realizar una **acción**\n", 62 | "3. Esa **acción** le lleva a obtener una **recompensa** y nuevas **observaciones**\n", 63 | "4. Vuelve al paso 2." 64 | ] 65 | }, 66 | { 67 | "cell_type": "markdown", 68 | "id": "7c8cd723", 69 | "metadata": {}, 70 | "source": [ 71 | "#### ¿Cual sería el Agente, el entorno, las acciones, la recompensa y las observaciones en este clásico ejemplo?" 72 | ] 73 | }, 74 | { 75 | "cell_type": "markdown", 76 | "id": "a1ba0272", 77 | "metadata": {}, 78 | "source": [ 79 | "![mice in a maze](https://user-images.githubusercontent.com/44867923/139915800-8224bede-c52b-47d1-bb22-2e9624687831.jpg)" 80 | ] 81 | }, 82 | { 83 | "cell_type": "markdown", 84 | "id": "a802dc34", 85 | "metadata": {}, 86 | "source": [ 87 | "### 1.3 Obtener datos: Equilibrio entre exploración y explotación" 88 | ] 89 | }, 90 | { 91 | "cell_type": "markdown", 92 | "id": "5f74ecea", 93 | "metadata": {}, 94 | "source": [ 95 | "1. Te acabas de mudar. No conoces nada de tu barrio.\n", 96 | "2. Tienes hambre (**recompensa** negativa) y quieres comer.\n", 97 | "3. Observas que existen varios restaurantes en tu calle (**observaciones**)\n", 98 | "4. Eliges un restaurante (tomas una **acción**), no conoces ninguno asi que cómo lo haces? **De forma aleatoria**\n", 99 | "5. Te gusta (**recompensa positiva**) y repites porque vas a lo seguro (**Explotación**).\n", 100 | "6. Cierto día decides arriesgar con un nuevo sitio (**Exploración**).\n", 101 | "7. Puede ser que te guste más y vuelvas (**Explotación**) o puede ser que no te guste y pruebes nuevos sitios (**Exploración**) o vuelvas al anterior (**Explotación**)." 102 | ] 103 | }, 104 | { 105 | "cell_type": "markdown", 106 | "id": "5a025ca0", 107 | "metadata": {}, 108 | "source": [ 109 | "![explotationvsexploration](https://steemitimages.com/640x0/https://steemitimages.com/DQmXH5tjBiS41iNtcyvh7s7Rj5z3SqGkcwoaV2otRJNx3FT/Exploration_vs._Exploitation.png)" 110 | ] 111 | }, 112 | { 113 | "cell_type": "markdown", 114 | "id": "0fbb7185", 115 | "metadata": {}, 116 | "source": [ 117 | "### 1.4 Objetivo del RL: Maximizar la recompensa a largo plazo" 118 | ] 119 | }, 120 | { 121 | "cell_type": "markdown", 122 | "id": "5ae07579", 123 | "metadata": {}, 124 | "source": [ 125 | "1. Madrugas (recompensa negativa)\n", 126 | "2. Vas a clase, *con un profesor aburrido* (recompensa negativa)\n", 127 | "3. Te fuerzas a estudiar cientos de diapositivas con 30 KG de tinta en texto (recompensa negativa).\n", 128 | "4. ¿Por qué? -> **Para maximizar la recompensa a largo plazo**.\n", 129 | "4. Si estudio trabajaré sentado y bajo un techo (recompensa positiva).\n", 130 | "6. Puedo aspirar a trabajos mejor remunerados (recompensa positiva).\n", 131 | "7. Con ese dinero puedo comprar comida a mi gato flurfils que es lo que más quiero en este mundo (recompensa positiva)." 132 | ] 133 | }, 134 | { 135 | "cell_type": "markdown", 136 | "id": "9136f538", 137 | "metadata": {}, 138 | "source": [ 139 | "![Maximizar_recompensa](https://user-images.githubusercontent.com/44867923/139920150-ed9884b2-1340-4753-97b8-e3e1b91845b0.jpg)" 140 | ] 141 | }, 142 | { 143 | "cell_type": "markdown", 144 | "id": "6527ebfa", 145 | "metadata": {}, 146 | "source": [ 147 | "### 1.5 Reinforcement Learning en la pŕactica" 148 | ] 149 | }, 150 | { 151 | "cell_type": "code", 152 | "execution_count": 1, 153 | "id": "2d5dd3c4", 154 | "metadata": {}, 155 | "outputs": [ 156 | { 157 | "data": { 158 | "image/jpeg": "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eouoszUHV8y9rmQFUBVERASC3CusBFJ2G523Ow39pmaH1rqeFT8vjZRrpBYqhrptCcju3A2oxQEknYbDckyPRAzcfMymyUvrsvOYb1trtrd/mTk8wyWVup597nsQR5322lwepHXfqDmaW+Nq+bkWaaUQXpWmnIzop8DKbCQXum4G4ckHYcvMrL071SnC1PEycjcU1u3Nti3APU9Ys4jyeJcN48/T4l8dU9T6fThXWvk49q2UWLXXXbXa15dCoRVQndTuAT7Ab7wKP9OfT/WOoch8XR8GzNtrTuW8WqqqqQnYNbfe61V7kHYFgTsdgdp59R/T3WenchMbWMGzDttQ2UlmqtquQHZjVfQ7VWEEjcBt15LuBuJ0v/R8eoOj4FOp6VnZGPhZmTk15ePdkulNeVUtQqOOLnIQWVsCwQkE99uIOzbe3+kH9Q9GzsbTdIwcmjNzcfLbMvtxnS6vFq7FlIoe5CU7tjWBiikkDHBYDku4cdREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREDY9MaLkajm4mBipzyc3IpxqF87G251rTkQDxQFtyfsAT9paHqt8OnUPTWnNqmf8AI2YtdtVNhxMiy16zcSqO6vSu1fPiu+/u6+JN/wCj46I+f1+/V7V3p0WjeonfY5uatlNX5NxpGS35E1n8J0/h9Q4PXWF1joG9YXDzL9JVhuzBewny2cyt9xnUZRUjwRiqYHzIiZOp4VuNfdjXoa78e2yi6ttuVdtTmuxDsdtwykfymNARE23RtSvqOno6q6Pm4iOjAMrK19YZWU+CpBI2MDUxOyv6QTo/SdM03R307TNPwHtzshbHw8PHxmsUY4IV2pQFl387GcawEREBE6Y/o/em9O1LVtWr1HBw8+uvTq3rTMxqclEc5KKWRblIVtvG4l4dZ9a+lmlahk6XqGk6XVlYtgqyFHTyW1oWRX/bqxzyXi49t4Hz3idg/Ff6E6Imif8ACrpha6sdVovycfGZrMPIxMlq0ry8VST2SpsQlV2XiWOylTy4+gIidbf0eXSml6mvUX6S07Bz+w2k9n5zFoye13BqXc7feQ8OXBN9vfgv4QOS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\n", 159 | "text/html": [ 160 | "\n", 161 | " \n", 168 | " " 169 | ], 170 | "text/plain": [ 171 | "" 172 | ] 173 | }, 174 | "execution_count": 1, 175 | "metadata": {}, 176 | "output_type": "execute_result" 177 | } 178 | ], 179 | "source": [ 180 | "from IPython.display import YouTubeVideo\n", 181 | "YouTubeVideo('WXuK6gekU1Y', width=720, height=480)" 182 | ] 183 | }, 184 | { 185 | "cell_type": "markdown", 186 | "id": "6baf2144", 187 | "metadata": {}, 188 | "source": [ 189 | "#### Import Dependencies" 190 | ] 191 | }, 192 | { 193 | "cell_type": "code", 194 | "execution_count": 2, 195 | "id": "eef65dcf", 196 | "metadata": {}, 197 | "outputs": [], 198 | "source": [ 199 | "import gym" 200 | ] 201 | }, 202 | { 203 | "cell_type": "markdown", 204 | "id": "bd9fe062", 205 | "metadata": {}, 206 | "source": [ 207 | "#### Useful functions to show the environment " 208 | ] 209 | }, 210 | { 211 | "cell_type": "code", 212 | "execution_count": 3, 213 | "id": "9fb0f43c", 214 | "metadata": {}, 215 | "outputs": [], 216 | "source": [ 217 | "import matplotlib.pyplot as plt\n", 218 | "from IPython import display\n", 219 | "import numpy as np\n", 220 | "%matplotlib inline\n", 221 | "\n", 222 | "def get_env_image(env: gym.Env) -> np.ndarray:\n", 223 | " return env.render(mode='rgb_array')\n", 224 | "\n", 225 | "def start_render(env: gym.Env) -> None:\n", 226 | " global render\n", 227 | " img = get_env_image(env)\n", 228 | " render = plt.imshow(img) # only call this once\n", 229 | "\n", 230 | "def update_render(env: gym.Env) -> None:\n", 231 | " global render\n", 232 | " img = get_env_image(env)\n", 233 | " render.set_data(img) # just update the data\n", 234 | " display.display(plt.gcf())\n", 235 | " display.clear_output(wait=True)" 236 | ] 237 | }, 238 | { 239 | "cell_type": "markdown", 240 | "id": "8fe58e4f", 241 | "metadata": {}, 242 | "source": [ 243 | "#### Create an Environment and play randomly" 244 | ] 245 | }, 246 | { 247 | "cell_type": "code", 248 | "execution_count": 4, 249 | "id": "a3b7a57d", 250 | "metadata": {}, 251 | "outputs": [], 252 | "source": [ 253 | "ENV_NAME = \"MountainCar-v0\"\n", 254 | "ENV_NAME = \"LunarLander-v2\"\n", 255 | "ENV_NAME = \"CarRacing-v0\"\n", 256 | "ENV_NAME = \"BipedalWalker-v3\"\n", 257 | "ENV_NAME = \"CartPole-v1\"" 258 | ] 259 | } 260 | ], 261 | "metadata": { 262 | "kernelspec": { 263 | "display_name": "Python 3 (ipykernel)", 264 | "language": "python", 265 | "name": "python3" 266 | }, 267 | "language_info": { 268 | "codemirror_mode": { 269 | "name": "ipython", 270 | "version": 3 271 | }, 272 | "file_extension": ".py", 273 | "mimetype": "text/x-python", 274 | "name": "python", 275 | "nbconvert_exporter": "python", 276 | "pygments_lexer": "ipython3", 277 | "version": "3.9.6" 278 | } 279 | }, 280 | "nbformat": 4, 281 | "nbformat_minor": 5 282 | } 283 | -------------------------------------------------------------------------------- /docs/1 - Bellman Equation and the State Value.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "id": "018813cb", 6 | "metadata": {}, 7 | "source": [ 8 | "# Bellman Equation: the State Value" 9 | ] 10 | }, 11 | { 12 | "cell_type": "markdown", 13 | "id": "6d170d38", 14 | "metadata": {}, 15 | "source": [ 16 | "![Bellman_1](https://user-images.githubusercontent.com/44867923/140994838-db45e51e-d92b-4b37-9df6-99e1a7e2def3.jpg)\n", 17 | "![Bellman_2](https://user-images.githubusercontent.com/44867923/140994794-51d739af-eb70-4e6a-9036-b925f23ab7fd.jpg)" 18 | ] 19 | }, 20 | { 21 | "cell_type": "code", 22 | "execution_count": 1, 23 | "id": "dc907e39", 24 | "metadata": {}, 25 | "outputs": [], 26 | "source": [ 27 | "import gym\n", 28 | "import numpy as np\n", 29 | "import seaborn as sns" 30 | ] 31 | }, 32 | { 33 | "cell_type": "markdown", 34 | "id": "df1bb9d0", 35 | "metadata": {}, 36 | "source": [ 37 | "### Create the env: Deterministic Frozen-Lake" 38 | ] 39 | }, 40 | { 41 | "cell_type": "code", 42 | "execution_count": 2, 43 | "id": "aa1ca95b", 44 | "metadata": {}, 45 | "outputs": [], 46 | "source": [ 47 | "env = gym.make(\"FrozenLake-v1\", is_slippery=True)" 48 | ] 49 | }, 50 | { 51 | "cell_type": "markdown", 52 | "id": "36d386e2", 53 | "metadata": {}, 54 | "source": [ 55 | "### Create V Table: A value for every state" 56 | ] 57 | }, 58 | { 59 | "cell_type": "code", 60 | "execution_count": 3, 61 | "id": "18eb737d", 62 | "metadata": {}, 63 | "outputs": [ 64 | { 65 | "data": { 66 | "text/plain": [ 67 | "array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])" 68 | ] 69 | }, 70 | "execution_count": 3, 71 | "metadata": {}, 72 | "output_type": "execute_result" 73 | } 74 | ], 75 | "source": [ 76 | "V = np.zeros(env.observation_space.n)\n", 77 | "V" 78 | ] 79 | }, 80 | { 81 | "cell_type": "markdown", 82 | "id": "c9849f3e", 83 | "metadata": {}, 84 | "source": [ 85 | "### Agent: play the environment and update the V table" 86 | ] 87 | }, 88 | { 89 | "cell_type": "code", 90 | "execution_count": 4, 91 | "id": "4652f224", 92 | "metadata": {}, 93 | "outputs": [], 94 | "source": [ 95 | "gamma = 0.9\n", 96 | "for ep in range(1000):\n", 97 | " obs = env.reset()\n", 98 | " done = False\n", 99 | "\n", 100 | " while not done:\n", 101 | "\n", 102 | " action = env.action_space.sample()\n", 103 | " next_obs, reward, done, _ = env.step(action)\n", 104 | "\n", 105 | " previous_obs_value = V[obs]\n", 106 | " actual_obs_value = reward + gamma*V[next_obs]\n", 107 | "\n", 108 | " if actual_obs_value > previous_obs_value:\n", 109 | " V[obs] = actual_obs_value\n", 110 | "\n", 111 | " obs = next_obs" 112 | ] 113 | }, 114 | { 115 | "cell_type": "markdown", 116 | "id": "95161d3c", 117 | "metadata": {}, 118 | "source": [ 119 | "### Plot V Table: The value of every State" 120 | ] 121 | }, 122 | { 123 | "cell_type": "code", 124 | "execution_count": 5, 125 | "id": "df3b34ea", 126 | "metadata": {}, 127 | "outputs": [ 128 | { 129 | "data": { 130 | "text/plain": [ 131 | "" 132 | ] 133 | }, 134 | "execution_count": 5, 135 | "metadata": {}, 136 | "output_type": "execute_result" 137 | }, 138 | { 139 | "data": { 140 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAV0AAAD8CAYAAADUv3dIAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAAsTAAALEwEAmpwYAAAi1ElEQVR4nO3deXwV9b3/8dfnnAQIS4SUPQFBQJCquCBatWq1FkQteK/Xaqu2brj+LvbeWrmtt/681r3XW+21UmqtXV1a25+gqVvdwQWwgrKobGogmECAsIQk55zP74/EkISscjJzMnk/fczDzJnvmfnMMOeTbz7znTnm7oiISDBiYQcgItKVKOmKiARISVdEJEBKuiIiAVLSFREJkJKuiEiAlHRFRJphZg+aWYmZvdfMcjOze81slZktNbMjWlunkq6ISPMeAqa0sPw0YEztNAO4v7UVKumKiDTD3V8BylpoMg34rdd4A+hrZkNaWmdWOgNsSvHxX9Etb7Vy9rewQ8gY2aMGhh1CxqheXRJ2CBmj7x9e2OcPSfWmNW3OOd0GjLqcmh7qZ+a4+5x2bC4f+KTefFHta8XNvaHDk66ISKBSyTY3rU2w7UmyjTX1S6LFpK+kKyLR4qkgt1YEDKs3XwBsaOkNqumKSLSkUm2f9t1c4MLaUQzHANvcvdnSAqinKyIR42ns6ZrZw8BJQH8zKwJuBLJrtuOzgUJgKrAK2AVc1No6lXRFJFqSibStyt3Pa2W5A1e3Z51KuiISLe24kBYGJV0RiZZgL6S1m5KuiERLei6QdRglXRGJlHReSOsISroiEi3q6YqIBChZHXYELVLSFZFoUXlBRCRAKi+IiARIPV0RkQCppysiEhxP6UKaiEhw1NMVEQmQaroiIgHSA29ERAKknq6ISIBU0xURCVAaH2LeETp90u1+9FHkzrwGYnF2PfkUO3//cIPl3Q6fQL/bfkyyeCMAu19+lR0P/RaAnv/yz/Q883QwY9fcJ9n1p8cDjz+dsg49ipwLroFYjKqXCqmc9/DebQ6aQM4FV0M8C9++jR0//i4A1rMXOZd9j3jBSHBn15y7SK5aHvQupE189AS6Tf02WIzE2y9Q/ercBsuzjzuD+KHHA2CxODYgn113XAbVVfS4+EbIysZiMRLL3qT6xT+HsQtp0+XOC/V0O1AsRu6/zaTsu9eRLCml/wOzqXxtAYl1HzVoVrXkXbZc/4MGr2WNHEHPM09n02VXQqKavP++k8rX3yBZtD7IPUgfi5HznZnsvO06UmWl9Ln5fqrfXkBq/Z5jYT17kXPRTHbcMQvfXILl9q1blnPBNSSWLGTXPTdBPAvr3j2EnUgTM7qdcTG7f3MLXr6ZHpffSmLlYrx0z79t9fwnqZ7/JADxsUeQ/aWpULETgN0P3QxVlRCL0+PSm0h++A6polWh7Mo+64LnhXtmX0jr1N8GnH3QOJJFG0huKIZEgornX6D78ce16b1ZI/anetlyqKyEZIqqfyyhxwlf7uCIO0581DhSn64nVVoMyQRVb7xA9pHHNmiTfewpVC98Dd9cAoCXb61ZkNOT+LhDqXqpsGY+mcB37Qww+vSKFYwmVbYR31ICySTJdxeQNW5is+2zDjmOxLsL9rxQVVnz/3gcYvEOjrZjdcnzIthvA263Tt3TjQ/oT7KkpG4+VVpK9viD9mrX7eDx9H/oAZKbNrH9vtkk1q4jsWYtfWZcguXm4pWVdP/S0VSvfD/I8NMqltef1OZ6x6JsE1mjGh6L+OBhkBWn9w/vhpyeVD79ONWvPUd84BB8+zZ6Xv59YsNHkVz7ARW/uw8qdwe9G2lhffLwbZvr5r28jFjB6KYbZ3cjPnoClU89WG8FRo8rbiOWN5jqt57tvL1cuuh50dlHL5jZOGAakA84sAGY6+4rOji21pnt/Zp7g9nq9z+k5Oxz8YrddD/maPrdejOl511A4qOP2fH7R/jC/9xFqqKC6lWr8WRm/1nSstaPBfE48ZEHsuPW72HZ3eh90/+SXLUCYnHiI8ZQ8Zt7Sa5eSc4FV9PjzPPY/edfBxN6ujVxKPY6FrXiY48k+cn7daWFz9ruvn8W9OhJj/P+ncTAArykqGNi7XBd8LzI8Jpui+UFM7seeISaf7m3gIW1Pz9sZrNaeN8MM1tkZot+v3FDOuNtIFlSSnzgwLr52IABJDdtbtDGd+3CK2p+M1e+8SZkZWH75QJQ8VQhmy65nLJrrsXLt3feei6QKisl9oV6xyKvP6mtm/Zqk1iyECp34zvKSaxcSnz4KFJlpXhZKcnVKwGoeusV4iPGBBp/Onl5GbbfF+rmLTcP376lybZZB3+JxNIFTS5j9y6Sa5cTH3NYB0QZjC55XiQTbZ9C0FpN9xLgKHe/3d1/XzvdDkyqXdYkd5/j7hPdfeL5g4emM94GqleuJD4sn/iQwZCVRc5XT6ZyfsMPUCyvX93P2QeNw2KGbyuvWda3b83/Bw2kx4lfpuL5v3dYrB0tuWYlscH5xAYMhngW3Y45merFrzdoU714PvGxh0AsBt26kzXqIJIbPsK3bSG1uYTYkGEAZH/xCJLrP2pqM51Cav1qYnmDsb4DanpxhxxLYuXivRt2zyE+YjzJlYv2vNazD/ToWfNzVjbxUYfgpR3XcehoXfK88FTbpxC0Vl5IAUOBxkd6SO2ycCVTlN99L3l33wmxGBVP/Y3E2nX0nHYmALuemEePk06k51nTIJnEKyvZcuPNdW/vd8tNWG4uJJNsu/sefPuOsPZk36VSVDz0M3pdfwfE4lS9/DdS69fR7ZSaY1H193mkNnxMYulC+tz+AKScqpcKSRWtA6Ditz+j51U/wLKySJUUs+sXd4a4M/solaLqqV/T48IfQCxG4u0X8dIisiZ+FYDEoucByDpoEsnVS6G6su6t1qcf3f/pSsxiNcPNlr1O8oO3Q9mNtOiK50WGlxfMm6l1AZjZFOB/gQ+BT2pfHg6MBq5x96db20Dx8V9pfgNdTM7+TRUbu6bsUQNbb9RFVK8uab1RF9H3Dy/s84ek4qmftjnn5Jx+beAfyhZ7uu7+tJkdSE05IZ+aem4RsNAzfTCciHRNnX30gtd8ifwbAcQiIrLvdBuwiEiAMrymq6QrItHS2csLIiKdinq6IiIBUtIVEQlQC8NgM4GSrohES0KjF0REgpPhF9I69fN0RUT2ksbn6ZrZFDN738xWNfWQLzPbz8zmmdkSM1tmZhe1tk4lXRGJFve2Ty0wszhwH3AaMB44z8zGN2p2NbDc3ScAJwH/bWbdWlqvygsiEi3pG70wCVjl7msAzOwRap4tXv9L4hzoY2YG9AbKgBaLyurpiki0tKO8UP/Z37XTjHprymfPg76g5rkz+Y229r/AQdR8ucO7wMzaRyc0Sz1dEYmU9nwDjLvPAeY0s7jJ7yBpND8ZeAc4GRgFPGdmr7p7eXPbVE9XRKIlfRfSioBh9eYLqOnR1ncR8BevsQpYC4xraaVKuiISLen75oiFwBgzG1l7cexcYG6jNh8DpwCY2SBgLLCmpZWqvCAi0ZJKzx1p7p4ws2uAZ4A48KC7LzOzK2qXzwZuBh4ys3epKUdc7+6bml0pSroiEjVpfPaCuxcChY1em13v5w3A19qzTiVdEYmWdlxIC4OSrohEi54yJiISoDTVdDuKkq6IREuGP/BGSVdEoqWr93Rz9g/8a+UzVv8/vR92CBlj+wNHhx1Cxuh/+6thh5AxEn/Y93W4aroiIgHS6AURkQB19fKCiEigVF4QEQmQeroiIgHSkDERkQCppysiEhxPaPSCiEhw1NMVEQmQaroiIgFST1dEJDiupCsiEiBdSBMRCZB6uiIiAVLSFREJjruSrohIcNTTFREJkJKuiEhwPKGbI0REgpPZOVdJV0SiRTdHiIgESUlXRCRAKi90rKxDjyLngmsgFqPqpUIq5z28d5uDJpBzwdUQz8K3b2PHj78LgPXsRc5l3yNeMBLc2TXnLpKrlge9C4GZ/LWTuPvu/yIei/Hgrx/mzrvuCzukDjN/9UbufHYpKXfOOmwEFx87tsHy7bur+eETC9lYXkEileLCY8YwfcIIAG6ct5hXVm0kr1d3Hp/x1RCiD1bUzguVFzqSxcj5zkx23nYdqbJS+tx8P9VvLyC1/qM9TXr2Iueimey4Yxa+uQTL7Vu3LOeCa0gsWciue26CeBbWvXsIOxGMWCzGvffcwpSp51FUVMwbrxcy78lnWbHiw7BDS7tkyrnt6SXM/ubxDMrN4VsPvsiJY4YwakBuXZtHF6/mgAG53PuNYynbWcn02c9y+sHDyY7H+PqE/Tl34gHcMG9xiHsRjCieF57I7KQbCzuAfREfNY7Up+tJlRZDMkHVGy+QfeSxDdpkH3sK1QtfwzeXAODlW2sW5PQkPu5Qql4qrJlPJvBdOwOMPliTjjqc1avXsXbtx1RXV/PYY0/w9TMnhx1Wh3hvQxnD8npR0K8X2fEYk8cX8NIHxQ3aGMbOymrcnYrqBPvldCMeMwCOHN6f3JxuYYQeuEieF6l2TCHo1Ek3ltefVG0yBUiVbSLWb0CDNvHBw7Beven9w7vp/ePZZB9/as3rA4fg27fR8/Lv0/uWX5Bz6b9D9x6Bxh+kofmD+aRoQ9180fpihg4dHGJEHadk+24G98mpmx+Um0PJ9ooGbc6deABrN2/n1HsKOXvO81x36qHEzIIONXRRPC881fYpDJ876ZrZRS0sm2Fmi8xs0UOrNjTXLA2a+JA0vu86Hic+8kB2/OQH7Lz9+/Q46wJigwsgFic+YgyVz89lxw8vh8rd9DjzvA6MNVzWRELJ9HvUPy9n7/1qvPsL1pQwdlBfnps5lUcvPYXbn1nCjsrqgCLMHJE8LyLc072puQXuPsfdJ7r7xO+MHroPm2hZqqyU2BcG1s3H8vqT2rpprzaJJQuhcje+o5zEyqXEh48iVVaKl5WSXL0SgKq3XiE+YkyHxRq29UXFDCvY829RkD+E4uJPQ4yo4wzqk8PGej3bT8srGNA7p0GbJ5as45SxQzEzhuf1Jr9vL9Zu2h50qKGL4nnRqXu6Zra0meldYFBAMTYruWYlscH5xAYMhngW3Y45merFrzdoU714PvGxh0AsBt26kzXqIJIbPsK3bSG1uYTYkGEAZH/xCJL1LsBFzcJF7zB69EhGjBhGdnY255wzjXlPPht2WB3ii0P78XHZDtZv3Ul1MsUzy4s48cAhDdoM2a8nb66rKU1t3rGbdZu3U9CvVxjhhiqK54Un2j61xsymmNn7ZrbKzGY10+YkM3vHzJaZ2cutrbO10QuDgMnAlsbbARa0HnIHS6WoeOhn9Lr+DojFqXr5b6TWr6PbKWcCUPX3eaQ2fExi6UL63P4ApJyqlwpJFa0DoOK3P6PnVT/AsrJIlRSz6xd3hrgzHSuZTDLz2hsofOqPxGMxHvrNoyxf/kHYYXWIrFiMWZMP48qH55NKOdMm7M/oAbn8afEaAP7lyAO47Phx/GjeYs6e8zwOXHvywfTrWTN6ZdZf32LRR6Vsrajia/cWcuUJ4znrsBHh7VAHiuJ5ka4erJnFgfuAU4EiYKGZzXX35fXa9AV+Dkxx94/NbGCTK6u/3pbqN2b2K+DX7v5aE8v+6O7fbG0DW791cicvEKVP/z+9H3YIGWP7AxeGHULG6HPpb8MOIWMkqtbv89XMT79yYptzzqAXX252e2b2JeD/uvvk2vn/AHD32+q1uQoY6u43tHWbLZYX3P2SphJu7bJWE66ISODc2jzVv+hfO82ot6Z84JN680W1r9V3INDPzF4ys8Vm1mpvonPfHCEi0kh7ygvuPgeY08zipnrBjXvRWcCRwClADvC6mb3h7s3WaJR0RSRSPJW28dZFwLB68wVA4zGwRcAmd98J7DSzV4AJQLNJt1PfHCEi0lgqaW2eWrEQGGNmI82sG3AuMLdRmyeAL5tZlpn1BI4GVrS0UvV0RSRS0jV6wd0TZnYN8AwQBx5092VmdkXt8tnuvsLMngaWUnO7xQPu/l5L61XSFZFISWN5AXcvBAobvTa70fxdwF1tXaeSrohESqbfxaykKyKRks6ebkdQ0hWRSGnDBbJQKemKSKSopysiEiB3JV0RkcCE9cjGtlLSFZFISamnKyISHJUXREQCpNELIiIB0ugFEZEAqaYrIhIg1XRFRAKkZy+IiARI5QURkQCldCFNRCQ4Xb6nmz2q1a+B7zK2P3B02CFkDBtzaNghSETpQpqISIC6fE9XRCRIGT54QUlXRKIlmcrsLzlX0hWRSMnwJzsq6YpItDiq6YqIBCaV4UVdJV0RiZSUeroiIsFReUFEJEBJJV0RkeBo9IKISICUdEVEAqSarohIgDL8yY5KuiISLRoyJiISoGTYAbRCSVdEIiVl6umKiAQmw+8CVtIVkWjJ9CFjmf3gSRGRdkpZ26fWmNkUM3vfzFaZ2awW2h1lZkkzO7u1daqnKyKRkq7bgM0sDtwHnAoUAQvNbK67L2+i3R3AM21Zr3q6IhIpaezpTgJWufsad68CHgGmNdHu/wCPAyVtiU9JV0QiJdWOycxmmNmietOMeqvKBz6pN19U+1odM8sHzgJmtzW+Tl9eiI+eQLep3waLkXj7BapfndtgefZxZxA/9HgALBbHBuSz647LoLqKHhffCFnZWCxGYtmbVL/45zB2IW3mr97Inc8uJeXOWYeN4OJjxzZYvn13NT98YiEbyytIpFJceMwYpk8YAcCN8xbzyqqN5PXqzuMzvhpC9B1n/tIPueOPT5NKpTjrhCO45IwvN1hevrOCH/3qCYpKyuiWncVNl0xjTMGgkKIN3uSvncTdd/8X8ViMB3/9MHfedV/YIe2T9oxecPc5wJxmFjfVF268+p8C17t70to4VK1zJ10zup1xMbt/cwtevpkel99KYuVivHR9XZPq+U9SPf9JAOJjjyD7S1OhYicAux+6GaoqIRanx6U3kfzwHVJFq0LZlX2VTDm3Pb2E2d88nkG5OXzrwRc5ccwQRg3IrWvz6OLVHDAgl3u/cSxlOyuZPvtZTj94ONnxGF+fsD/nTjyAG+YtDnEv0i+ZSnHr7wr5xXUXMCgvl2/e9EtOOnwso/IH1rV5YN6rjBs+mJ/+67ms3VDKrb8r5JfXfzvEqIMTi8W4955bmDL1PIqKinnj9ULmPfksK1Z8GHZon1sabwMuAobVmy8ANjRqMxF4pDbh9gemmlnC3f9fcyvt1OWFWMFoUmUb8S0lkEySfHcBWeMmNts+65DjSLy7YM8LVZU1/4/HIRbv4Gg71nsbyhiW14uCfr3IjseYPL6Alz4obtDGMHZWVuPuVFQn2C+nG/FYzRl65PD+5OZ0CyP0DvXemvUMG5RHwcA8srOymHL0wbz0j/cbtFmzoZRJ40cCMHLoADZs2srmbTvCCDdwk446nNWr17F27cdUV1fz2GNP8PUzJ4cd1j5pT3mhFQuBMWY20sy6AecCDf6UdveR7j7C3UcAfwauainhQhuSrpmNM7NTzKx3o9entB5zx7I+efi2zXXzXl6G5eY13Ti7G/HRE0gsf7PeCoweV95Oz+/PIbn63U7bywUo2b6bwX1y6uYH5eZQsr2iQZtzJx7A2s3bOfWeQs6e8zzXnXoosQy/e2dflWwpZ3Dent7+wH65fLqlvEGbA4cP4u+LVwDw7poiijdv3atNVA3NH8wnRXs6b0Xrixk6dHCIEe27pLV9aom7J4BrqBmVsAJ4zN2XmdkVZnbF542vxaRrZv8KPEHN1bn3zKz+lbtbW3hfXXH6wbdXf97YWtdkxaXpik587JEkP3m/rrTwWdvd989i139fRbxgFDawoGPiDIA3UclqnE8XrClh7KC+PDdzKo9eegq3P7OEHZXVAUUYjqZOB2t04lx8+vGU79zNOf95Pw8/9xbj9h9CPNap/whss6bqkN7MZ6izSGNPF3cvdPcD3X2Uu99S+9psd9/rwpm7f8fdW70w1FpN9zLgSHffYWYjgD+b2Qh3v4emU95nG68rTu/80bkd9i/o5WXYfl+om7fcPHz7libbZh38JRJLFzS5jN27SK5dTnzMYSRKijoi1A43qE8OG+v1bD8tr2BA75wGbZ5Yso6Ljx2LmTE8rzf5fXuxdtN2Dslv5q+DCBiUl8vGsj291pIt5Qzs16dBm945Pbj50ulATcKZ+r2fkj+gb4BRhmd9UTHDCobWzRfkD6G4+NMQI9p3nf2OtLi77wBw93XAScBpZnY3LSTdoKTWryaWNxjrOwDiceKHHEtiZRMXgrrnEB8xnuTKRXte69kHevSs+Tkrm/ioQ/DSxjXyzuOLQ/vxcdkO1m/dSXUyxTPLizjxwCEN2gzZrydvrqsZSrh5x27Wbd5OQb9eYYQbmC+OHMrHn26mqHQL1YkET7/5Hice3nBUR/nOCqoTCQD+8vLbHDF2f3rn9Agj3MAtXPQOo0ePZMSIYWRnZ3POOdOY9+SzYYe1T7wdUxha6+luNLPD3P0dgNoe7xnAg8AhHR1cq1Ipqp76NT0u/AHEYiTefhEvLSJrYs2Qp8Si5wHIOmgSydVLobqy7q3Wpx/d/+lKzGI1w82WvU7yg7dD2Y10yIrFmDX5MK58eD6plDNtwv6MHpDLnxavAeBfjjyAy44fx4/mLebsOc/jwLUnH0y/nt0BmPXXt1j0USlbK6r42r2FXHnCeM46bER4O5QmWfE4/3H+VK78ye9IpZzpXz6c0fkDeeyFhQCcc/JRrC3exA2//CsxMw7IH8BNFzc1/j2akskkM6+9gcKn/kg8FuOh3zzK8uUfhB3WPsn0h5hbS/UbMysAEu6+sYllx7n7/NY20JHlhc4mNnpk2CFkDBtzaNghZIzeJ34v7BAyRqJq/T6nzP8Zfn6bc853P/594Cm6xZ6uuzdb4GxLwhURCZoeYi4iEqBMLy8o6YpIpGT66AUlXRGJlEy/iKSkKyKRksrwtKukKyKRogtpIiIBUk1XRCRAGr0gIhIg1XRFRAKU2SlXSVdEIkY1XRGRACUzvK+rpCsikaKerohIgHQhTUQkQJmdcpV0RSRiVF4QEQmQLqSJiARINV0RkQBldspV0hWRiFFPV0QkQLqQJiISIO/qPd39bn+1ozfRaex4eVrYIWSM+Jijww5BIkqjF0REAqTygohIgFKunq6ISGAyO+Uq6YpIxGjImIhIgLr86AURkSAllHRFRIKT6T3dWNgBiIikU6odU2vMbIqZvW9mq8xsVhPLv2VmS2unBWY2obV1qqcrIpHiaRoyZmZx4D7gVKAIWGhmc919eb1ma4ET3X2LmZ0GzAFavPNHSVdEIiWNoxcmAavcfQ2AmT0CTAPqkq67L6jX/g2goLWVqrwgIpGSxNs8mdkMM1tUb5pRb1X5wCf15otqX2vOJcDfWotPPV0RiZT29HTdfQ41JYGmWFNvabKh2VeoSbrHt7ZNJV0RiZR01XSp6dkOqzdfAGxo3MjMDgUeAE5z982trVTlBRGJlDSOXlgIjDGzkWbWDTgXmFu/gZkNB/4CXODuH7QlPvV0RSRS0jVO190TZnYN8AwQBx5092VmdkXt8tnAj4AvAD83M4CEu09sab1KuiISKel89oK7FwKFjV6bXe/nS4FL27NOJV0RiZSkZ/YTdZV0RSRSMv02YCVdEYkUPcRcRCRAmZ1ylXRFJGL0EHMRkQBletKN/M0Rk792Esvee4WVy1/j+9ddHXY4gZm/9EO+PutnnPH9e/jVk6/utbx8ZwXX3vsIZ9/wc7550xw+LPo0hCjDc8Otd3PC6ecy/fwrwg4ldFH7jCQ91eYpDJFOurFYjHvvuYUzzjyfQyZ8hW98YzoHHTQm7LA6XDKV4tbfFfLzf/sWf731ap5+8z1Wry9p0OaBea8ybvhg/vzjq7jlsrO48w9PhxRtOKZPPZXZd/847DBCF8XPiLfjvzBEOulOOupwVq9ex9q1H1NdXc1jjz3B18+cHHZYHe69NesZNiiPgoF5ZGdlMeXog3npH+83aLNmQymTxo8EYOTQAWzYtJXN23aEEW4oJh52CPvl9gk7jNBF8TPi7m2ewhDppDs0fzCfFO15PkXR+mKGDh0cYkTBKNlSzuC83Lr5gf1y+XRLeYM2Bw4fxN8XrwDg3TVFFG/eulcbib4ofkZSeJunMLSadM1skpkdVfvzeDP7NzOb2vGh7bvae6EbCOu3W5Ca2kVr9JS6i08/nvKduznnP+/n4efeYtz+Q4jHIv07WJoQxc9Ipvd0Wxy9YGY3AqcBWWb2HDVfQ/ESMMvMDnf3W5p53wxgBoDF9yMW65XWoNtqfVExwwqG1s0X5A+huDj6F4wG5eWysWxPr7VkSzkD+zX8U7p3Tg9uvnQ6UHOSTv3eT8kf0DfAKCUTRPEzkmzTt5+Fp7WuzdnAccAJwNXAdHf/L2Ay8I3m3uTuc9x9ortPDCvhAixc9A6jR49kxIhhZGdnc84505j35LOhxROUL44cysefbqaodAvViQRPv/keJx4+tkGb8p0VVCcSAPzl5bc5Yuz+9M7pEUa4EqIofkZS7m2ewtDaON2EuyeBXWa22t3LAdy9wswy+9cJkEwmmXntDRQ+9UfisRgP/eZRli9v0yMvO7WseJz/OH8qV/7kd6RSzvQvH87o/IE89sJCAM45+SjWFm/ihl/+lZgZB+QP4KaLp4UcdbCuu/F2Fv5jKVu3lnPK9PO56pIL+OdOfgHp84jiZyTTn71gLdU1zOxN4CvuvsvMYu41A9vMbD/gRXc/orUNZHXLz+wjEKAdL/8k7BAyRnxMi1+Y2qXkDP1y2CFkjETV+qa+IqddDho4qc05Z0XJW/u8vfZqrad7grtXAnyWcGtlA9/usKhERD6nTO/ptph0P0u4Tby+CdjUIRGJiOwDPWVMRCRAeoi5iEiAOnV5QUSks3H1dEVEgpPpj3ZU0hWRSMn025iVdEUkUtTTFREJUDKlmq6ISGA0ekFEJECq6YqIBEg1XRGRAKmnKyISIF1IExEJkMoLIiIBUnlBRCRAerSjiEiANE5XRCRA6umKiAQoleGPdmztK9hFRDoVd2/z1Bozm2Jm75vZKjOb1cRyM7N7a5cvNbNWv6xXSVdEIiVdSdfM4sB9wGnAeOA8MxvfqNlpwJjaaQZwf2vxKemKSKR4O6ZWTAJWufsad68CHgGmNWozDfit13gD6GtmQ1paaYfXdNPxPfbpYGYz3H1O2HFkAh2LPTLhWCSq1oe5+TqZcCzSoT05x8xmUNND/cycescgH/ik3rIi4OhGq2iqTT5Q3Nw2u1JPd0brTboMHYs9dCz26HLHwt3nuPvEelP9XzpNJe/GHeS2tGmgKyVdEZH2KAKG1ZsvADZ8jjYNKOmKiDRtITDGzEaaWTfgXGBuozZzgQtrRzEcA2xz92ZLC9C1xul2+lpVGulY7KFjsYeORT3unjCza4BngDjwoLsvM7MrapfPBgqBqcAqYBdwUWvrtUx/OISISJSovCAiEiAlXRGRAEU+6bZ2G19XYmYPmlmJmb0XdixhMrNhZvaima0ws2VmNjPsmMJiZj3M7C0zW1J7LG4KO6aoi3RNt/Y2vg+AU6kZ2rEQOM/dl4caWEjM7ARgBzV30Bwcdjxhqb1jaIi7v21mfYDFwPSueF6YmQG93H2HmWUDrwEza++ukg4Q9Z5uW27j6zLc/RWgLOw4wubuxe7+du3P24EV1NxF1OXU3r66o3Y2u3aKbk8sA0Q96TZ3i54IAGY2AjgceDPkUEJjZnEzewcoAZ5z9y57LIIQ9aTb7lv0pOsws97A48C17l4edjxhcfekux9Gzd1Uk8ysy5aeghD1pNvuW/Ska6itXz4O/MHd/xJ2PJnA3bcCLwFTwo0k2qKedNtyG590MbUXj34FrHD3u8OOJ0xmNsDM+tb+nAN8FVgZalARF+mk6+4J4LPb+FYAj7n7snCjCo+ZPQy8Dow1syIzuyTsmEJyHHABcLKZvVM7TQ07qJAMAV40s6XUdFKec/cnQ44p0iI9ZExEJNNEuqcrIpJplHRFRAKkpCsiEiAlXRGRACnpiogESElXRCRASroiIgH6/+cfpS240wcGAAAAAElFTkSuQmCC\n", 141 | "text/plain": [ 142 | "
" 143 | ] 144 | }, 145 | "metadata": { 146 | "needs_background": "light" 147 | }, 148 | "output_type": "display_data" 149 | } 150 | ], 151 | "source": [ 152 | "sns.heatmap(\n", 153 | " data=V.reshape(4,4),\n", 154 | " annot=True\n", 155 | ")" 156 | ] 157 | }, 158 | { 159 | "cell_type": "code", 160 | "execution_count": null, 161 | "id": "b4b2a99b", 162 | "metadata": {}, 163 | "outputs": [], 164 | "source": [] 165 | } 166 | ], 167 | "metadata": { 168 | "kernelspec": { 169 | "display_name": "Python 3 (ipykernel)", 170 | "language": "python", 171 | "name": "python3" 172 | }, 173 | "language_info": { 174 | "codemirror_mode": { 175 | "name": "ipython", 176 | "version": 3 177 | }, 178 | "file_extension": ".py", 179 | "mimetype": "text/x-python", 180 | "name": "python", 181 | "nbconvert_exporter": "python", 182 | "pygments_lexer": "ipython3", 183 | "version": "3.9.6" 184 | } 185 | }, 186 | "nbformat": 4, 187 | "nbformat_minor": 5 188 | } 189 | -------------------------------------------------------------------------------- /docs/2 - Bellman Equation and the Action-State Value.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "id": "57982c04", 6 | "metadata": {}, 7 | "source": [ 8 | "# 2 - Bellman Equation and the Action-State Value" 9 | ] 10 | }, 11 | { 12 | "attachments": {}, 13 | "cell_type": "markdown", 14 | "id": "44583299", 15 | "metadata": {}, 16 | "source": [ 17 | "![Bellman_1](https://user-images.githubusercontent.com/44867923/141012209-d05f4699-fd8f-48b9-9e9a-a574687e7d75.jpg)\n", 18 | "![Bellman_2](https://user-images.githubusercontent.com/44867923/141012134-09ff0d88-4ce9-43af-8b04-d535cf24d897.jpg)" 19 | ] 20 | }, 21 | { 22 | "cell_type": "code", 23 | "execution_count": 6, 24 | "id": "dc907e39", 25 | "metadata": {}, 26 | "outputs": [], 27 | "source": [ 28 | "import gym\n", 29 | "import numpy as np\n", 30 | "import seaborn as sns\n", 31 | "import matplotlib.pyplot as plt" 32 | ] 33 | }, 34 | { 35 | "cell_type": "markdown", 36 | "id": "ed208f47", 37 | "metadata": {}, 38 | "source": [ 39 | "### Create Environment: Deterministic Frozen-Lake" 40 | ] 41 | }, 42 | { 43 | "cell_type": "code", 44 | "execution_count": 12, 45 | "id": "3739f7df", 46 | "metadata": {}, 47 | "outputs": [], 48 | "source": [ 49 | "env = gym.make(\"FrozenLake-v1\", is_slippery=True)" 50 | ] 51 | }, 52 | { 53 | "cell_type": "markdown", 54 | "id": "eea1b671", 55 | "metadata": {}, 56 | "source": [ 57 | "### Create Q Table: Value of every action in every state" 58 | ] 59 | }, 60 | { 61 | "cell_type": "code", 62 | "execution_count": 13, 63 | "id": "8885f380", 64 | "metadata": { 65 | "scrolled": true 66 | }, 67 | "outputs": [ 68 | { 69 | "data": { 70 | "text/plain": [ 71 | "array([[0., 0., 0., 0.],\n", 72 | " [0., 0., 0., 0.],\n", 73 | " [0., 0., 0., 0.],\n", 74 | " [0., 0., 0., 0.],\n", 75 | " [0., 0., 0., 0.],\n", 76 | " [0., 0., 0., 0.],\n", 77 | " [0., 0., 0., 0.],\n", 78 | " [0., 0., 0., 0.],\n", 79 | " [0., 0., 0., 0.],\n", 80 | " [0., 0., 0., 0.],\n", 81 | " [0., 0., 0., 0.],\n", 82 | " [0., 0., 0., 0.],\n", 83 | " [0., 0., 0., 0.],\n", 84 | " [0., 0., 0., 0.],\n", 85 | " [0., 0., 0., 0.],\n", 86 | " [0., 0., 0., 0.]])" 87 | ] 88 | }, 89 | "execution_count": 13, 90 | "metadata": {}, 91 | "output_type": "execute_result" 92 | } 93 | ], 94 | "source": [ 95 | "Q = np.zeros((env.observation_space.n, env.action_space.n))\n", 96 | "Q" 97 | ] 98 | }, 99 | { 100 | "cell_type": "markdown", 101 | "id": "399cac64", 102 | "metadata": {}, 103 | "source": [ 104 | "### Agent: play the environment and update the Q table" 105 | ] 106 | }, 107 | { 108 | "cell_type": "code", 109 | "execution_count": 14, 110 | "id": "94adb64b", 111 | "metadata": {}, 112 | "outputs": [], 113 | "source": [ 114 | "gamma = 0.9\n", 115 | "for ep in range(1000):\n", 116 | " obs = env.reset()\n", 117 | " done = False\n", 118 | "\n", 119 | " while not done:\n", 120 | "\n", 121 | " action = env.action_space.sample()\n", 122 | " next_obs, reward, done, _ = env.step(action)\n", 123 | "\n", 124 | "\n", 125 | " actual_obs_action_value = reward + gamma*Q[next_obs].max()\n", 126 | " Q[obs, action] = actual_obs_action_value\n", 127 | "\n", 128 | " obs = next_obs\n" 129 | ] 130 | }, 131 | { 132 | "cell_type": "markdown", 133 | "id": "8faa0a8f", 134 | "metadata": {}, 135 | "source": [ 136 | "### Plot Q Table: action value for every state" 137 | ] 138 | }, 139 | { 140 | "cell_type": "code", 141 | "execution_count": 15, 142 | "id": "8adb7b26", 143 | "metadata": {}, 144 | "outputs": [ 145 | { 146 | "data": { 147 | "image/png": "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\n", 148 | "text/plain": [ 149 | "
" 150 | ] 151 | }, 152 | "metadata": { 153 | "needs_background": "light" 154 | }, 155 | "output_type": "display_data" 156 | } 157 | ], 158 | "source": [ 159 | "fig, ax = plt.subplots(2,2, figsize=(15,15))\n", 160 | "\n", 161 | "plot = ax[0,0]\n", 162 | "plot.set_title(\"izquierda\")\n", 163 | "values = Q.T[0].reshape(4,4)\n", 164 | "sns.heatmap(values, cmap=\"RdYlGn\", annot=True, ax=plot, vmax=1)\n", 165 | "\n", 166 | "plot = ax[0,1]\n", 167 | "plot.set_title(\"abajo\")\n", 168 | "values = Q.T[1].reshape(4,4)\n", 169 | "sns.heatmap(values, cmap=\"RdYlGn\", annot=True, ax=plot, vmax=1)\n", 170 | "\n", 171 | "plot = ax[1,0]\n", 172 | "plot.set_title(\"Derecha\")\n", 173 | "values = Q.T[2].reshape(4,4)\n", 174 | "sns.heatmap(values, cmap=\"RdYlGn\", annot=True, ax=plot, vmax=1)\n", 175 | "\n", 176 | "plot = ax[1,1]\n", 177 | "plot.set_title(\"arriba\")\n", 178 | "values = Q.T[3].reshape(4,4)\n", 179 | "sns.heatmap(values, cmap=\"RdYlGn\", annot=True, ax=plot, vmax=1)\n", 180 | "\n", 181 | "_ = plt.plot()" 182 | ] 183 | }, 184 | { 185 | "cell_type": "markdown", 186 | "id": "bcec23a8", 187 | "metadata": {}, 188 | "source": [ 189 | "### Plot Q* Table: action with highest value for every state" 190 | ] 191 | }, 192 | { 193 | "cell_type": "code", 194 | "execution_count": 16, 195 | "id": "15ecc762", 196 | "metadata": {}, 197 | "outputs": [ 198 | { 199 | "data": { 200 | "text/plain": [ 201 | "" 202 | ] 203 | }, 204 | "execution_count": 16, 205 | "metadata": {}, 206 | "output_type": "execute_result" 207 | }, 208 | { 209 | "data": { 210 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAV0AAAD8CAYAAADUv3dIAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAAsTAAALEwEAmpwYAAAhsklEQVR4nO3de3wU9b3/8ddnNwk3QYiESwgICopWBRRoraKitSBaob9aq62HU6ul3vrT9vzacjyeWou32h5P5dRKqfXSWrEebSsCRdR6VxBQQQGRIIoh4Y4SSMhl9/P7IzEkIVfZzGwm72cf83Bn5rszn53OfvLhO9+ZNXdHRESCEQs7ABGRjkRJV0QkQEq6IiIBUtIVEQmQkq6ISICUdEVEAqSkKyLSCDO7z8y2mtk7jaw3M5tpZvlmttLMTmxum0q6IiKNewCY2MT6c4Bh1dM04J7mNqikKyLSCHd/EdjZRJPJwB+9ymKgp5n1b2qbGakMsCFrhk3SLW/V1hb3DDuEtHEY5WGHkDZ6dy8JO4S0ccy6BXaw26jY/n6Lc05WzpHfo6pC/dRsd5/dit0NAD6qNV9QvayosTe0edIVEQlUMtHiptUJtjVJtr6G/kg0mfSVdEUkWjwZ5N4KgIG15vOAwqbeoD5dEYmWZLLl08GbC0ytHsXwBeATd2+0awFU6YpIxHgKK10zmwOcAfQ2swLgRiCzaj8+C1gATALygRLg0ua2qaQrItGSqEzZptz94mbWO3B1a7appCsi0dKKC2lhUNIVkWgJ9kJaqynpiki0pOYCWZtR0hWRSEnlhbS2oKQrItGiSldEJECJirAjaJKSrohEi7oXREQCpO4FEZEAqdIVEQmQKl0RkeB4UhfSRESCo0pXRCRA6tMVEQmQHngjIhIgVboiIgFSn66ISIBS+BDzttDuk263cSfR94bvYfEYHz/6FDtm/2+d9V3HHk/erJ9SUbAZgOJFr7L9N3OwrEwOf/gOLCsTy4ize+HLbJ/55zA+Qsr0GX8Cx8+YisVjfPjn51j3mycbbNdz5BGcPv/nLP3eTArnvU6sUybj/v5TYlkZWEacwnlLePeXjwccfWr1Gj+SI2ZcisVjbP7zsxT85u8Ntjtk5JGMnH8r737vv9k+bzEAudPOo9+3zgJ39q7ZyHvX3Y2XpfcwpKZ0uO+IKt02FIvR72dXsfHb/0HF5u0MefzXFP9zMeX5H9VpVrJsFQXTflZnmZdX8OHUf8dL9kFGnMGP/Io9Ly5j31trA/wAKRQzRtx2Ka9ceBulRTs4Y+HNbF70BsXvbTqg3eduuJgtz6+sWZQsq+Dlr91MoqQMy4gzbu6NbHl2BbveyA/4Q6RILMaRt13OOxf+nLKinYxceDs7Fy2j5L2CA9oNueESdj2/omZRVr9sBlx+DstP+wHJfeUMn/1Dcqacwta/PB/sZ0iVDvgdcU/vC2nt+teAu5xwFOUfFlLx0WaoqGT3/BfpftbJLX6/l+wDwDKqKrymf60+vfUaNZQ9G7ZQsnErXpGg4O+v0W/CSQe0O/KyCRTOf53y7Z/UWZ4oKQMglhknlhEHb78Ho/uooezbsJl9G7fiFZVs+/srZE8Yc0C73MvOYfv8JVTUOxYWjxPrnAXxGLEunSjfvCuo0FOuQ35Hgv014FZr10k3o99hVBZtr5mv2LydjL6HHdCuy8jhDJn7Gwbe+3Oyhg7avyIWY8jc/+GoxQ+z55U32bcivf+CN6VL/16UFu6omd9XtJMu/bPrtOncrxf9J41hw4PPHLiBmDH+mVs5551ZbH3xbXa9ub6tQ24znfpnU1a4/7woL9pBp3rHIqtfNr0njaXowUV1lpdv3knBPXMZu/wevrDy9yR2l/DxCytorzrkd8STLZ9C0GzSNbPhZvYTM5tpZndVvz4miOCaZwcuqleh7VudT/4Z32bD+dew809zGXjPf+5fmUyy4fzvs27cVLqccBSdhh3exvG2IWv+WBw/YyqrZsyBZAPlStJ57kvX89Soa+g16ki6D89ro0AD0IJjccSMS9kw46EDqp2MQ7tx2MQxLB17NUtGTCPWtRM5XxvXltG2sQ74HUnzSrfJPl0z+wlwMfAI8Hr14jxgjpk94u63N/K+acA0gJ/lfI4LDx3UULODVrl5Oxn9e9fMZ/brTeXWnXXaJPeU1rze+8Iy+NnVxHv1ILFr9/42xXspWfI23U47ibJ1H7ZJrG2ttHAnXXL3VzCd+2dTWu+fxT1HDGHM774PQFZ2d/qeNRKvTFK0cFlNm4rdJWx/dQ19x4+g+N16faDtRFnhDjrl7j8vsvofRlm9Y9F9xBEM/90PAMjM7k6vs07EKxNYZgb7Nm6lYkfV+bFjwRJ6jDmabY+/FNwHSKEO+R1J89ELzVW6lwFj3P12d3+oerodGFu9rkHuPtvdR7v76LZKuAClb79H1uBcMvP6QmYGPc49jeJnF9dpE+/dq+Z15xOOwmJGYtdu4tk9iHXvBoB1yqLbF0dS/n77TDIAH7+1nkOO6EfXQTlYZpy8KSezedHyOm2eHnsdi8Zcy6Ix11I4bwkrpt9P0cJlZB3WncweXQGIdc4kZ9xxFOcXhvExUqL4rXw6H9GfToP6YJkZ5Ew5hZ2LltZps3Ts1SwdcxVLx1zF9nmLWT/99+xYuJSygu10P+koYl2yAOg57nhK121qaDftQof8jqR590JzoxeSQC5Q/09b/+p14Uok2XzTPQy87+aq4TCPLaI8fyM9L54EwMdzFtBj4in0+ua5eGUCLytn03W/ACAjJ5vcO/4NYjGIGcX/eIk9z73e1N7SmieSrLz+Ab44Z3rVkLE5z1O8dhODp54FwAd/fLbR93bu05MTZ16JxWNYzNg0dzFbnn4zqNBTL5Fk/fX3ctycG7B4jC1z/knJ2gL6Tf0yAJv/uKjRtxa/uY7t815j1KJf4okEe97eQNGfng4q8tTriN+RNB8yZt7EVWozmwj8BlgHfDrGZBAwFLjG3Rc2t4M1wya1h+udgVhb3DPsENLGYZSHHULa6N29JOwQ0sYx6xY00AndOqXzf93inNPl3OsOen+t1WSl6+4LzewoqroTBlDVK18ALPV0HwwnIh1Te3/2glf9iPzi5tqJiKSFNL+Q1r7vSBMRqS/N+3SVdEUkWtp794KISLuiSldEJEBKuiIiAUrzhzUp6YpItFRq9IKISHDS/EJau360o4jIAVL4lDEzm2hma80s38ymN7D+UDN70sxWmNkqM7u0uW0q6YpItLi3fGqCmcWBu4FzgGOBi83s2HrNrgZWu/sI4Azgv8wsq6ntqntBRKIldaMXxgL57v4+gJk9AkwGVtdq40B3MzPgEGAn0GSnsipdEYmWVnQvmNk0M1tWa5pWa0sD2P+gL6h67syAenv7DXAMUAi8DVxb/eiERqnSFZFI8UTLn8Xl7rOB2Y2sbugJZPX7JCYAbwFnAkcCT5vZS+6+u/4bP6VKV0SiJXUX0gqAgbXm86iqaGu7FPirV8kHNgDDm9qokq6IREvqfjliKTDMzIZUXxy7CJhbr81G4CwAM+sLHA2839RG1b0gItHS0A+vfgbuXmlm1wBPAXHgPndfZWZXVK+fBcwAHjCzt6nqjviJu29vdKMo6YpI1KTw2QvuvgBYUG/ZrFqvC4Evt2abSroiEi2tuJAWBiVdEYkWPWVMRCRAKerTbStKuiISLWn+wBslXRGJlo5e6fbsW9rWu2g3LvhwRdghpI3Hsk8PO4S0Mf7D18IOIW2k4km4rj5dEZEAafSCiEiAOnr3gohIoNS9ICISIFW6IiIB0pAxEZEAqdIVEQmOV2r0gohIcFTpiogESH26IiIBUqUrIhIcV9IVEQmQLqSJiARIla6ISICUdEVEguOupCsiEhxVuiIiAVLSFREJjlfq5ggRkeCkd85V0hWRaNHNESIiQVLSFREJUJp3L8TCDuBgdfr8GHIefpCcRx6i2yUXH7A+a9QI+i58kt73/57e9/+eQ749tWZd169/jd5/vI/ef7qfrl//WpBhh2LCl89g1Tsv8u7ql/nxj64OO5w21Wf8CZz18q/40mt3MuyarzTarufII5i86SFyzxsLQKxTJqf/Ywbjn72NM1+4g+E/0nnR3njSWzyFoX1XurEYPX54LTt/8CMSW7fR+95ZlL38KpUffFinWfmKt9n1k+vrLMsYMpiuXzmX7d+9EioryP6vOyh7bTGJgk1BfoLAxGIxZt51CxMnXUxBQRGLX1vAk/MWsWbNurBDS72YMeK2S3nlwtsoLdrBGQtvZvOiNyh+b9MB7T53w8VseX5lzaJkWQUvf+1mEiVlWEaccXNvZMuzK9j1Rn7AHyIYUTwvvDK9uxfadaWbecxwEgWFJAqLoLKS0mf+SadTT2nRezMGH07FqtVQVgaJJOVvrqDzaePaOOLwjB0zivXrP2DDho1UVFTw6KNPcP5XJoQdVpvoNWooezZsoWTjVrwiQcHfX6PfhJMOaHfkZRMonP865ds/qbM8UVIGQCwzTiwjDml+h9PBiOR5kWzFFIJ2nXTjOb1JbN1aM5/cto14Tu8D2mUddyy9H7iXXr+6nYwhgwGofH8DWSNPwHr0gE6d6HTy54n3yQkq9MDlDujHRwWFNfMFm4rIze0XYkRtp0v/XpQW7qiZ31e0ky79s+u06dyvF/0njWHDg88cuIGYMf6ZWznnnVlsffFtdr25vq1DDk0UzwtPtnwKw2dOumZ2aRPrppnZMjNb9tDmwsaaHTyzA5fVq0oq1q5j6wUXsf3bl1Py2N/odesMACo/3Miehx7hsP/+Jdn/9Qsq8tfjifR+JNzBsAaOVbrfo/6ZteC8OH7GVFbNmNPwle6k89yXruepUdfQa9SRdB+e10aBhi+S50WaV7oH06d7E3B/QyvcfTYwG6Do1PFt9v9gYus24n361MzHcnJIbN9Rp42XlNS8Llu8BP7tOuzQHvgnuymdv4DS+QsA6D7tchLbtrVVqKHbVFDEwLzcmvm8Af0pKtoSYkRtp7RwJ11yD6uZ79w/m9LNu+q06TliCGN+930AsrK70/eskXhlkqKFy2raVOwuYfura+g7fgTF7xYEE3zAonhepPmv9TRd6ZrZykamt4G+AcXYqIp33yU+cADx/v0gI4MuXzqTslderdMmlt2r5nXmMcOxmOGf7K5a17Nn1X/79qHz6eMofebZwGIP2tJlbzF06BAGDx5IZmYmF144mSfnLQo7rDbx8VvrOeSIfnQdlINlxsmbcjKbFy2v0+bpsdexaMy1LBpzLYXzlrBi+v0ULVxG1mHdyezRFYBY50xyxh1HcX4b/mstZFE8L7yy5VNzzGyima01s3wzm95ImzPM7C0zW2VmLzS3zeYq3b7ABGBXveUGvHpg84Alkuy+cybZd94BsRil8/9B5YYP6Dq5aohQyRNP0vmM0+n61cmQSOBlZey6cUbN23vdclNVn24iwSd33oUX7wnrk7S5RCLBtdfdwIL5DxOPxXjgwb+wevV7YYfVJjyRZOX1D/DFOdOxeIwP5zxP8dpNDJ56FgAf/LHxP66d+/TkxJlXYvEYFjM2zV3MlqffDCr0wEXxvEhVpWtmceBu4GygAFhqZnPdfXWtNj2B3wIT3X2jmfVpcGO1t9tU/42Z/QG4391fbmDdw+7+zeZ20JbdC+3NwNfb98mcSo9lnx52CGnjgp3NFkcdRmX5pgY65Ftny/jTW5xz+j73QqP7M7OTgZ+5+4Tq+X8HcPfbarW5Csh19xtaus8muxfc/bKGEm71umYTrohI4NxaPNW+6F89Tau1pQHAR7XmC6qX1XYU0MvMnjez5WY2lWa075sjRETqaU33Qu2L/g1oqAquX0VnACcBZwFdgNfMbLG7N/rPWiVdEYkUTx50D8WnCoCBtebzgPpXVQuA7e6+F9hrZi8CI4BGk267vjlCRKS+ZMJaPDVjKTDMzIaYWRZwETC3XpsngHFmlmFmXYHPA2ua2qgqXRGJlFSNXnD3SjO7BngKiAP3ufsqM7uiev0sd19jZguBlVTdbnGvu7/T1HaVdEUkUlLYvYC7LwAW1Fs2q978L4FftnSbSroiEinpfhezkq6IREoqK922oKQrIpHSggtkoVLSFZFIUaUrIhIgdyVdEZHApPujHZV0RSRSkqp0RUSCo+4FEZEAafSCiEiANHpBRCRA6tMVEQmQ+nRFRAKkZy+IiARI3QsiIgFK6kKaiEhwOnyl2+PMvm29i3ajeNoXwg4hbSTzN4QdQvq4PewAokUX0kREAtThK10RkSCl+eAFJV0RiZZEMr1/5FxJV0QiJc2f7KikKyLR4qhPV0QkMMk079RV0hWRSEmq0hURCY66F0REApRQ0hURCY5GL4iIBEhJV0QkQOrTFREJUJo/2VFJV0SiRUPGREQClAg7gGYo6YpIpCRNla6ISGDS/C5gJV0RiZZ0HzKW3g+eFBFppaS1fGqOmU00s7Vmlm9m05toN8bMEmZ2QXPbVKUrIpGSqtuAzSwO3A2cDRQAS81srruvbqDdL4CnWrJdVboiEikprHTHAvnu/r67lwOPAJMbaPd94HFga0viU9IVkUhJtmIys2lmtqzWNK3WpgYAH9WaL6heVsPMBgBfBWa1NL52370QHzqCrEn/Chaj8o1/UvHS3DrrM085j/gJpwJgsTiWM4CSX3wXKsrp/J0bISMTi8WoXLWEiuceC+MjpMwr6zdzx6KVJN356sjBfOeLR9dZX7yvgv94Yimbd5dSmUwy9QvDmDJiMAA3PrmcF/M3k92tE49P+1II0aeWzouWm/DlM7jzzp8Tj8W47/453PHLu8MO6aC0ZvSCu88GZjeyuqFauP7mfw38xN0T1sKhau076ZqRdd532PfgLfjuHXT+3q1Uvrsc37appknFK/OoeGUeAPGjTyTz5ElQuheAfQ/MgPIyiMXpfPlNJNa9RbIgP5SPcrASSee2hSuY9c1T6dujC9+67zlOH9afI3N61LT5y/L1HJHTg5nf+CI795YxZdYizj1uEJnxGOePOJyLRh/BDU8uD/FTpIjOixaLxWLMvOsWJk66mIKCIha/toAn5y1izZp1YYf2maXwNuACYGCt+TygsF6b0cAj1Qm3NzDJzCrd/e+NbbRddy/E8oaS3LkZ37UVEgkSb79KxvDRjbbPOP4UKt9+df+C8rKq/8bjEIu3cbRt653CnQzM7kZer25kxmNMODaP598rqtPGMPaWVeDulFZUcmiXLOKxqjP0pEG96dElK4zQU07nRcuNHTOK9es/YMOGjVRUVPDoo09w/lcmhB3WQWlN90IzlgLDzGyImWUBFwF1/snk7kPcfbC7DwYeA65qKuFCC5KumQ03s7PM7JB6yyc2H3Pbsu7Z+Cc7auZ9906sR3bDjTOziA8dQeXqJbU2YHS+8na6/ng2ifVvt+tqZmvxPvp171Iz37dHF7YWl9Zpc9HoI9iwo5iz71rABbOf4Udnn0Asze/e+Sx0XrRc7oB+fFSwv3gr2FREbm6/ECM6eAlr+dQUd68ErqFqVMIa4FF3X2VmV5jZFZ81via7F8zs/wJXV+/wD2Z2rbs/Ub36VmBhI++bBkwDmHnuaL5z4pGfNb6mNdjj0nCPTvzok0h8tLbmn5Cftt13z3To3JXOF/8blX3y8K0FbRNrG/MGerLq59NX39/K0X178vtvjeOjXXu54uGXOXFQbw7plBlQlAHRedFiDfVDeiPHqr1I5c0R7r4AWFBvWYMXzdz92y3ZZnOV7neBk9x9CnAG8J9mdm31ukb/Trj7bHcf7e6j2yzhUl3BHHpYzbz1yMaLdzXYNuO4k6lc+WqD69hXQmLDauLDRrZBlMHo270Lm2tVtlt2l5JzSJc6bZ5Y8QFnHZ2LmTEo+xAG9OzGhu3FQYfa5nRetNymgiIG5uXWzOcN6E9R0ZYQIzp4KexeaBPNJd24u+8BcPcPqEq855jZnTSRdIOS3LSeWHY/rGcOxOPEj/8ile82cCGoUxfig48l8e6y/cu6dofOXateZ2QSP/J4fFv9PvL243O5vdi4cw+bPt5LRSLJU6sLOP2o/nXa9D+0K0s+qBpKuGPPPj7YUUxer25hhNumdF603NJlbzF06BAGDx5IZmYmF144mSfnLQo7rIPirZjC0Nzohc1mNtLd3wJw9z1mdh5wH3B8WwfXrGSS8vn303nq9RCLUfnGc/i2AjJGVw15qlz2DAAZx4wlsX4lVJTVvNW696LT/7kSs1jVsKJVr5F4741QPkYqZMRiTJ8wkivnvEIy6UwecThDc3rwv8vfB+DrJx3Bd08dzk+fXM4Fs5/BgevOPI5eXTsBMP1vr7Psw218XFrOl2cu4MrTjuWrIweH94EOhs6LFkskElx73Q0smP8w8ViMBx78C6tXvxd2WAcl3R9ibk3135hZHlDp7psbWHeKu7/S3A72/vSi9t1BlEKxoUPCDiFtJPM3hB1C2jj09pfCDiFtVJZvOuiU+d+DLmlxzvnBxocCT9FNVrru3ujVg5YkXBGRoOkh5iIiAUr37gUlXRGJlHR/nq6SrohESrpfRFLSFZFISaZ52lXSFZFI0YU0EZEAqU9XRCRAGr0gIhIg9emKiAQovVOukq6IRIz6dEVEApRI81pXSVdEIkWVrohIgHQhTUQkQOmdcpV0RSRi1L0gIhIgXUgTEQmQ+nRFRAKU3ilXSVdEIkaVrohIgHQhTUQkQN7RK139vPR+e16YHHYIaSNr0nfDDiF93D4u7AgiRaMXREQCpO4FEZEAJV2VrohIYNI75SrpikjEaMiYiEiAOvzoBRGRIFUq6YqIBCfdK91Y2AGIiKRSshVTc8xsopmtNbN8M5vewPpvmdnK6ulVMxvR3DZV6YpIpHiKhoyZWRy4GzgbKACWmtlcd19dq9kG4HR332Vm5wCzgc83tV0lXRGJlBSOXhgL5Lv7+wBm9ggwGahJuu7+aq32i4G85jaq7gURiZQE3uLJzKaZ2bJa07RamxoAfFRrvqB6WWMuA/7RXHyqdEUkUlpT6br7bKq6BBpiDb2lwYZm46lKuqc2t08lXRGJlFT16VJV2Q6sNZ8HFNZvZGYnAPcC57j7juY2qu4FEYmUFI5eWAoMM7MhZpYFXATMrd3AzAYBfwX+xd3fa0l8qnRFJFJSNU7X3SvN7BrgKSAO3Ofuq8zsiur1s4CfAocBvzUzgEp3H93UdpV0RSRSUvnsBXdfACyot2xWrdeXA5e3ZptKuiISKQlP7yfqKumKSKSk+23ASroiEil6iLmISIDSO+Uq6YpIxOgh5iIiAUr3pBv5myMmfPkMVr3zIu+ufpkf/+jqsMMJzCsr13H+9P/hvB/fxR/mvXTA+t17S7lu5iNccMNv+eZNs1lXsCWEKMNzw613ctq5FzHlkivCDiV0UfuOJDzZ4ikMkU66sViMmXfdwnlfuYTjR4znG9+YwjHHDAs7rDaXSCa59U8L+O0Pv8Xfbr2ahUveYf2mrXXa3PvkSwwf1I/Hbr6KW777Ve7488KQog3HlElnM+vOm8MOI3RR/I54K/4Xhkgn3bFjRrF+/Qds2LCRiooKHn30Cc7/yoSww2pz77y/iYF9s8nrk01mRgYTP38cz7+5tk6b9wu3MfbYIQAMyc2hcPvH7PhkTxjhhmL0yOM5tEf3sMMIXRS/I+7e4ikMkU66uQP68VHB/udTFGwqIje3X4gRBWPrrt30y+5RM9+nVw+27Npdp81Rg/ry7PI1ALz9fgFFOz4+oI1EXxS/I0m8xVMYmk26ZjbWzMZUvz7WzH5oZpPaPrSDV30vdB1h/XULUkMf0eo9pe47557K7r37uPA/72HO068z/PD+xGOR/hssDYjidyTdK90mRy+Y2Y3AOUCGmT1N1c9QPA9MN7NR7n5LI++bBkwDsPihxGLdUhp0S20qKGJgXm7NfN6A/hQVRf+CUd/sHmzeub9q3bprN3161f2n9CFdOjPj8ilA1Uk66f/9mgE5PQOMUtJBFL8jiRb9+ll4mittLgBOAU4DrgamuPvPgQnANxp7k7vPdvfR7j46rIQLsHTZWwwdOoTBgweSmZnJhRdO5sl5i0KLJyifG5LLxi07KNi2i4rKShYueYfTRx1dp83uvaVUVFYC8NcX3uDEow/nkC6dwwhXQhTF70jSvcVTGJobp1vp7gmgxMzWu/tuAHcvNbP0/nMCJBIJrr3uBhbMf5h4LMYDD/6F1atb9MjLdi0jHuffL5nElb/6E8mkM2XcKIYO6MOj/1wKwIVnjmFD0XZu+P3fiJlxxIAcbvrO5JCjDtaPbrydpW+u5OOPd3PWlEu46rJ/4Wvt/ALSZxHF70i6P3vBmurXMLMlwHh3LzGzmHvVwDYzOxR4zt1PbG4HGVkD0vsIBGjPC78KO4S0ER/W5A+mdihdcseFHULaqCzf1NBP5LTKMX3GtjjnrNn6+kHvr7Waq3RPc/cygE8TbrVM4F/bLCoRkc8o3SvdJpPupwm3geXbge1tEpGIyEHQU8ZERAKkh5iLiASoXXcviIi0N65KV0QkOOn+aEclXRGJlHS/jVlJV0QiRZWuiEiAEkn16YqIBEajF0REAqQ+XRGRAKlPV0QkQKp0RUQCpAtpIiIBUveCiEiA1L0gIhIgPdpRRCRAGqcrIhIgVboiIgFKpvmjHZv7CXYRkXbF3Vs8NcfMJprZWjPLN7PpDaw3M5tZvX6lmTX7Y71KuiISKalKumYWB+4GzgGOBS42s2PrNTsHGFY9TQPuaS4+JV0RiRRvxdSMsUC+u7/v7uXAI8Dkem0mA3/0KouBnmbWv6mNtnmfbip+xz4VzGyau88OO450oGOxXzoci8ryTWHuvkY6HItUaE3OMbNpVFWon5pd6xgMAD6qta4A+Hy9TTTUZgBQ1Ng+O1KlO635Jh2GjsV+Ohb7dbhj4e6z3X10ran2H52Gknf9ArklberoSElXRKQ1CoCBtebzgMLP0KYOJV0RkYYtBYaZ2RAzywIuAubWazMXmFo9iuELwCfu3mjXAnSscbrtvq8qhXQs9tOx2E/HohZ3rzSza4CngDhwn7uvMrMrqtfPAhYAk4B8oAS4tLntWro/HEJEJErUvSAiEiAlXRGRAEU+6TZ3G19HYmb3mdlWM3sn7FjCZGYDzew5M1tjZqvM7NqwYwqLmXU2s9fNbEX1sbgp7JiiLtJ9utW38b0HnE3V0I6lwMXuvjrUwEJiZqcBe6i6g+a4sOMJS/UdQ/3d/Q0z6w4sB6Z0xPPCzAzo5u57zCwTeBm4tvruKmkDUa90W3IbX4fh7i8CO8OOI2zuXuTub1S/LgbWUHUXUYdTffvqnurZzOopupVYGoh60m3sFj0RAMxsMDAKWBJyKKExs7iZvQVsBZ529w57LIIQ9aTb6lv0pOMws0OAx4Hr3H132PGExd0T7j6SqrupxppZh+16CkLUk26rb9GTjqG6//Jx4M/u/tew40kH7v4x8DwwMdxIoi3qSbclt/FJB1N98egPwBp3vzPseMJkZjlm1rP6dRfgS8C7oQYVcZFOuu5eCXx6G98a4FF3XxVuVOExsznAa8DRZlZgZpeFHVNITgH+BTjTzN6qniaFHVRI+gPPmdlKqoqUp919XsgxRVqkh4yJiKSbSFe6IiLpRklXRCRASroiIgFS0hURCZCSrohIgJR0RUQCpKQrIhKg/w8XRYQIAtAYUgAAAABJRU5ErkJggg==\n", 211 | "text/plain": [ 212 | "
" 213 | ] 214 | }, 215 | "metadata": { 216 | "needs_background": "light" 217 | }, 218 | "output_type": "display_data" 219 | } 220 | ], 221 | "source": [ 222 | "sns.heatmap(data=Q.max(axis=1).reshape(4,4), annot=True)" 223 | ] 224 | }, 225 | { 226 | "cell_type": "code", 227 | "execution_count": null, 228 | "id": "bd58a002", 229 | "metadata": {}, 230 | "outputs": [], 231 | "source": [] 232 | } 233 | ], 234 | "metadata": { 235 | "kernelspec": { 236 | "display_name": "Python 3 (ipykernel)", 237 | "language": "python", 238 | "name": "python3" 239 | }, 240 | "language_info": { 241 | "codemirror_mode": { 242 | "name": "ipython", 243 | "version": 3 244 | }, 245 | "file_extension": ".py", 246 | "mimetype": "text/x-python", 247 | "name": "python", 248 | "nbconvert_exporter": "python", 249 | "pygments_lexer": "ipython3", 250 | "version": "3.9.6" 251 | } 252 | }, 253 | "nbformat": 4, 254 | "nbformat_minor": 5 255 | } 256 | -------------------------------------------------------------------------------- /docs/3 - Q-Learning.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "id": "f4336a2c", 6 | "metadata": {}, 7 | "source": [ 8 | "# Q-Learning" 9 | ] 10 | }, 11 | { 12 | "cell_type": "markdown", 13 | "id": "3313e760", 14 | "metadata": {}, 15 | "source": [ 16 | "![Bellman_1](https://user-images.githubusercontent.com/44867923/141013004-bde1b971-fcdc-445e-bf08-9bc89311891c.jpg)\n", 17 | "![Bellman_2](https://user-images.githubusercontent.com/44867923/141012134-09ff0d88-4ce9-43af-8b04-d535cf24d897.jpg)" 18 | ] 19 | }, 20 | { 21 | "cell_type": "code", 22 | "execution_count": 13, 23 | "id": "dc907e39", 24 | "metadata": {}, 25 | "outputs": [], 26 | "source": [ 27 | "import gym\n", 28 | "import numpy as np\n", 29 | "import seaborn as sns\n", 30 | "import matplotlib.pyplot as plt" 31 | ] 32 | }, 33 | { 34 | "cell_type": "markdown", 35 | "id": "7e5a2184", 36 | "metadata": {}, 37 | "source": [ 38 | "### Create Environment: Stochastic Frozen-Lake" 39 | ] 40 | }, 41 | { 42 | "cell_type": "code", 43 | "execution_count": 14, 44 | "id": "3739f7df", 45 | "metadata": {}, 46 | "outputs": [], 47 | "source": [ 48 | "env = gym.make(\"FrozenLake-v1\", is_slippery=True)" 49 | ] 50 | }, 51 | { 52 | "cell_type": "code", 53 | "execution_count": 15, 54 | "id": "42bd0ad5", 55 | "metadata": {}, 56 | "outputs": [], 57 | "source": [ 58 | "ALPHA = 0.1\n", 59 | "GAMMA = 0.9\n", 60 | "EPISODES = 10000\n", 61 | "EPSILON = 0.9\n", 62 | "DELTA_EPSILON = EPSILON / EPISODES\n", 63 | "MIN_EPSILON = 0.1" 64 | ] 65 | }, 66 | { 67 | "cell_type": "markdown", 68 | "id": "1c57bcfe", 69 | "metadata": {}, 70 | "source": [ 71 | "### Create Q Table: Value of every action in every state" 72 | ] 73 | }, 74 | { 75 | "cell_type": "code", 76 | "execution_count": 16, 77 | "id": "8885f380", 78 | "metadata": { 79 | "scrolled": true 80 | }, 81 | "outputs": [ 82 | { 83 | "data": { 84 | "text/plain": [ 85 | "array([[0., 0., 0., 0.],\n", 86 | " [0., 0., 0., 0.],\n", 87 | " [0., 0., 0., 0.],\n", 88 | " [0., 0., 0., 0.],\n", 89 | " [0., 0., 0., 0.],\n", 90 | " [0., 0., 0., 0.],\n", 91 | " [0., 0., 0., 0.],\n", 92 | " [0., 0., 0., 0.],\n", 93 | " [0., 0., 0., 0.],\n", 94 | " [0., 0., 0., 0.],\n", 95 | " [0., 0., 0., 0.],\n", 96 | " [0., 0., 0., 0.],\n", 97 | " [0., 0., 0., 0.],\n", 98 | " [0., 0., 0., 0.],\n", 99 | " [0., 0., 0., 0.],\n", 100 | " [0., 0., 0., 0.]])" 101 | ] 102 | }, 103 | "execution_count": 16, 104 | "metadata": {}, 105 | "output_type": "execute_result" 106 | } 107 | ], 108 | "source": [ 109 | "Q = np.zeros((env.observation_space.n, env.action_space.n))\n", 110 | "Q" 111 | ] 112 | }, 113 | { 114 | "cell_type": "markdown", 115 | "id": "c570b4aa", 116 | "metadata": {}, 117 | "source": [ 118 | "### Agent: play the environment and update the Q table" 119 | ] 120 | }, 121 | { 122 | "cell_type": "code", 123 | "execution_count": 17, 124 | "id": "94adb64b", 125 | "metadata": {}, 126 | "outputs": [], 127 | "source": [ 128 | "for ep in range(EPISODES):\n", 129 | " obs = env.reset()\n", 130 | " done = False\n", 131 | " EPSILON = max(EPSILON - DELTA_EPSILON, MIN_EPSILON)\n", 132 | " while not done:\n", 133 | " \n", 134 | " # Select Action\n", 135 | " if EPSILON < np.random.rand():\n", 136 | " action = env.action_space.sample() # Random action: Exploration\n", 137 | " else:\n", 138 | " action = np.argmax(Q[obs]) # Best action: Exploitation\n", 139 | "\n", 140 | " next_obs, reward, done, _ = env.step(action)\n", 141 | " \n", 142 | " # Update Q value for this action in this observation\n", 143 | " actual_obs_action_value = Q[obs, action]\n", 144 | " best_next_obs_action_value = reward + GAMMA * Q[next_obs].max() - actual_obs_action_value\n", 145 | " Q[obs, action] = actual_obs_action_value + ALPHA * best_next_obs_action_value\n", 146 | " \n", 147 | " obs = next_obs" 148 | ] 149 | }, 150 | { 151 | "cell_type": "markdown", 152 | "id": "847c484d", 153 | "metadata": {}, 154 | "source": [ 155 | "### Plot Q* Table: highest action value for every state" 156 | ] 157 | }, 158 | { 159 | "cell_type": "code", 160 | "execution_count": 18, 161 | "id": "15ecc762", 162 | "metadata": {}, 163 | "outputs": [ 164 | { 165 | "data": { 166 | "text/plain": [ 167 | "" 168 | ] 169 | }, 170 | "execution_count": 18, 171 | "metadata": {}, 172 | "output_type": "execute_result" 173 | }, 174 | { 175 | "data": { 176 | "image/png": "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\n", 177 | "text/plain": [ 178 | "
" 179 | ] 180 | }, 181 | "metadata": { 182 | "needs_background": "light" 183 | }, 184 | "output_type": "display_data" 185 | } 186 | ], 187 | "source": [ 188 | "sns.heatmap(data=Q.max(axis=1).reshape(4,4), annot=True, vmax=1)" 189 | ] 190 | }, 191 | { 192 | "cell_type": "markdown", 193 | "id": "75f94a24", 194 | "metadata": {}, 195 | "source": [ 196 | "### Plot Q* Table: action with highest value for every state" 197 | ] 198 | }, 199 | { 200 | "cell_type": "code", 201 | "execution_count": 19, 202 | "id": "29bf608f", 203 | "metadata": {}, 204 | "outputs": [ 205 | { 206 | "data": { 207 | "text/plain": [ 208 | "" 209 | ] 210 | }, 211 | "execution_count": 19, 212 | "metadata": {}, 213 | "output_type": "execute_result" 214 | }, 215 | { 216 | "data": { 217 | "image/png": "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\n", 218 | "text/plain": [ 219 | "
" 220 | ] 221 | }, 222 | "metadata": { 223 | "needs_background": "light" 224 | }, 225 | "output_type": "display_data" 226 | } 227 | ], 228 | "source": [ 229 | "sns.heatmap(data=np.argmax(Q, axis=1).reshape(4,4), annot=True)" 230 | ] 231 | }, 232 | { 233 | "cell_type": "markdown", 234 | "id": "394df416", 235 | "metadata": {}, 236 | "source": [ 237 | "### Plot Q Table: state value for every action" 238 | ] 239 | }, 240 | { 241 | "cell_type": "code", 242 | "execution_count": 7, 243 | "id": "8adb7b26", 244 | "metadata": {}, 245 | "outputs": [ 246 | { 247 | "data": { 248 | "image/png": "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c8FCZQ0cqP3vu7e2TVbfvir4w30qfPQf6nvj9ep86ii5ykqVrVql5b+4WbFt28JcrNCkHzZc7S77sRSJqPytF1X20uP1no/07KcO37lJ0f4HqHTK31T2yqTa5zLP+JoyTz5bck6xguXa8fCvpcqKsBchVG9/tEZ3PjRb1TGnC8/YX9dceFi952e+v0p/fPwTRSKmaDSim686WkcNyZMkPfr8Qj09Y4nMTIP7d9Kvf3yiMjOiqViMFqPnmJN01B/j399lDz2lhb9p/P0FkBzpQ49V+2/8RBaJqOyNF1T6wmP1no/27KcO3x2vtAEHaOeTD6p02hO1j3f84W217SI9emnn0w+p7JUnQ+1/GDqcOEK9bhwvRSPaPOVprX+48T6p503j1fGkkaouK1PB+JtUtij+EzZdv/4NdbngIslMm55+Shsf+4ckKeeMMcr7wbXKHLSfll36NZUumB/qMgUp56QR6jt+vBSJaMNTT6vob43XV9/x45Vzcnx9fX7jTSpduFCZAwdq0O93/Q2W2bev1t53n4r/3z+UfeCB6verXynarp3K16zRiuuuU/WOHWEuVotBRvrB/9+hikQ04NYJWvztqzV3zNnqes44Ze+/X70muaeMVNaA/ppz6hitGD9BA2+bKEkqW7FC8885P3479wLFykq1acZrkqSt77ynuWedo3njzlXZis/V6/vXNProVsEiaveNn2nbvdep5OZvKOPY0xTpNaBeE7d9q3Y8/sd6hZQkWaduyjr9Am299Spt/eU3pUhEGceODrHz4YvFqnXb/32gv00crRfv/4peeutzLV21pV6b44b11PP3naPn/niO7vrhCfrln/4tSSrauFP/fOFTPX3vOL3w56+outrppbdXpGApWg6LRHT0/RP0+llX6aUh49T/0rOVc/B+e3+hr6pdcm5AIiyiDt/6ubb+78+1+ReXK/P40xTtPaBek+odW7XjH79X6UtP1Hs8tm6Vttz8rfht/Lel8jJVfPhmiJ0PSSSiXr+coBXfv1pLvnK2cseOU+ag+vukjieNVGa//vps7BituXWCet8S/5sic//B6nLBRVp66de05ILzlHPyKcro11+SVL50iVb+5Efa8dGHoS9SoCIR9ZswQUuuuloLx52tLmePU9Z+9ddXzsiRyhzQXwvOGKNVt0xQ/1vj66t8xQotOu/8+O2rF6i6tFRb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\n", 249 | "text/plain": [ 250 | "
" 251 | ] 252 | }, 253 | "metadata": { 254 | "needs_background": "light" 255 | }, 256 | "output_type": "display_data" 257 | } 258 | ], 259 | "source": [ 260 | "fig, ax = plt.subplots(2,2, figsize=(15,15))\n", 261 | "\n", 262 | "plot = ax[0,0]\n", 263 | "plot.set_title(\"izquierda\")\n", 264 | "values = Q.T[0].reshape(4,4)\n", 265 | "sns.heatmap(values, cmap=\"RdYlGn\", annot=True, ax=plot, vmax=1)\n", 266 | "\n", 267 | "plot = ax[0,1]\n", 268 | "plot.set_title(\"abajo\")\n", 269 | "values = Q.T[1].reshape(4,4)\n", 270 | "sns.heatmap(values, cmap=\"RdYlGn\", annot=True, ax=plot, vmax=1)\n", 271 | "\n", 272 | "plot = ax[1,0]\n", 273 | "plot.set_title(\"Derecha\")\n", 274 | "values = Q.T[2].reshape(4,4)\n", 275 | "sns.heatmap(values, cmap=\"RdYlGn\", annot=True, ax=plot, vmax=1)\n", 276 | "\n", 277 | "plot = ax[1,1]\n", 278 | "plot.set_title(\"arriba\")\n", 279 | "values = Q.T[3].reshape(4,4)\n", 280 | "sns.heatmap(values, cmap=\"RdYlGn\", annot=True, ax=plot, vmax=1)\n", 281 | "\n", 282 | "_ = plt.plot()" 283 | ] 284 | } 285 | ], 286 | "metadata": { 287 | "kernelspec": { 288 | "display_name": "Python 3 (ipykernel)", 289 | "language": "python", 290 | "name": "python3" 291 | }, 292 | "language_info": { 293 | "codemirror_mode": { 294 | "name": "ipython", 295 | "version": 3 296 | }, 297 | "file_extension": ".py", 298 | "mimetype": "text/x-python", 299 | "name": "python", 300 | "nbconvert_exporter": "python", 301 | "pygments_lexer": "ipython3", 302 | "version": "3.9.6" 303 | } 304 | }, 305 | "nbformat": 4, 306 | "nbformat_minor": 5 307 | } 308 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | gym[Box_2D] 2 | matplotlib 3 | box2d-py 4 | pyglet 5 | seaborn 6 | tensorflow 7 | pydot 8 | graphviz --------------------------------------------------------------------------------