Created
March 7, 2019 09:54
-
-
Save mvwestendorp/dda14a62882383c1565394a10aebeff4 to your computer and use it in GitHub Desktop.
playing_openAI.ipynb
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "nbformat": 4, | |
| "nbformat_minor": 0, | |
| "metadata": { | |
| "colab": { | |
| "name": "playing_openAI.ipynb", | |
| "version": "0.3.2", | |
| "provenance": [], | |
| "include_colab_link": true | |
| }, | |
| "kernelspec": { | |
| "name": "python3", | |
| "display_name": "Python 3" | |
| }, | |
| "accelerator": "GPU" | |
| }, | |
| "cells": [ | |
| { | |
| "cell_type": "markdown", | |
| "metadata": { | |
| "id": "view-in-github", | |
| "colab_type": "text" | |
| }, | |
| "source": [ | |
| "<a href=\"https://colab.research.google.com/gist/mvwestendorp/dda14a62882383c1565394a10aebeff4/playing_openai.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>" | |
| ] | |
| }, | |
| { | |
| "metadata": { | |
| "id": "aZegbQJTOadj", | |
| "colab_type": "text" | |
| }, | |
| "cell_type": "markdown", | |
| "source": [ | |
| "# Reinforcement Learning with OpenAI's Gym " | |
| ] | |
| }, | |
| { | |
| "metadata": { | |
| "id": "GsF7UghbOadk", | |
| "colab_type": "text" | |
| }, | |
| "cell_type": "markdown", | |
| "source": [ | |
| "In this lab we are going to use some Reinforcemeent learning tecqniques to play the Taxi game and later the famous Breakout. We have divided this in two parts. WE will start implementing the Taxi game which is the simplest from the librarary of the atari games which OpenAI has put forward. In the second part we are going to first play and then write a small DQN model to allow the computer to play Breakout. " | |
| ] | |
| }, | |
| { | |
| "metadata": { | |
| "id": "bpwWPmfFOadl", | |
| "colab_type": "text" | |
| }, | |
| "cell_type": "markdown", | |
| "source": [ | |
| "## OpenAI's Gym " | |
| ] | |
| }, | |
| { | |
| "metadata": { | |
| "id": "3Q4YAnwPOadm", | |
| "colab_type": "text" | |
| }, | |
| "cell_type": "markdown", | |
| "source": [ | |
| "Gym is released by Open AI in 2016 (http://gym.openai.com/docs/). It is a toolkit for developing and comparing reinforcement learning algorithms. This is the gym open-source library, which gives you access to a standardized set of environments.\n", | |
| "\n", | |
| "<img src=\"images/openai.svg\">\n", | |
| "\n", | |
| "\n", | |
| "gym makes no assumptions about the structure of your agent, and is compatible with any numerical computation library, such as TensorFlow or Theano. You can use it from Python code, and soon from other languages.\n", | |
| "\n", | |
| "If you're not sure where to start, we recommend beginning with the docs on the openAI site. See also the FAQ.\n", | |
| "\n", | |
| "A whitepaper for OpenAI Gym is available at http://arxiv.org/abs/1606.01540." | |
| ] | |
| }, | |
| { | |
| "metadata": { | |
| "id": "SYZFnOADPGpn", | |
| "colab_type": "code", | |
| "colab": { | |
| "base_uri": "https://localhost:8080/", | |
| "height": 204 | |
| }, | |
| "outputId": "0e4fb9e4-b7d3-4a65-f3a2-25aef31b7e83" | |
| }, | |
| "cell_type": "code", | |
| "source": [ | |
| "# install dependencies\n", | |
| "!python --version\n", | |
| "!pip install keras-rl pygame" | |
| ], | |
| "execution_count": 1, | |
| "outputs": [ | |
| { | |
| "output_type": "stream", | |
| "text": [ | |
| "Python 3.6.7\n", | |
| "Requirement already satisfied: keras-rl in /usr/local/lib/python3.6/dist-packages (0.4.2)\n", | |
| "Requirement already satisfied: pygame in /usr/local/lib/python3.6/dist-packages (1.9.4)\n", | |
| "Requirement already satisfied: keras>=2.0.7 in /usr/local/lib/python3.6/dist-packages (from keras-rl) (2.2.4)\n", | |
| "Requirement already satisfied: pyyaml in /usr/local/lib/python3.6/dist-packages (from keras>=2.0.7->keras-rl) (3.13)\n", | |
| "Requirement already satisfied: six>=1.9.0 in /usr/local/lib/python3.6/dist-packages (from keras>=2.0.7->keras-rl) (1.11.0)\n", | |
| "Requirement already satisfied: h5py in /usr/local/lib/python3.6/dist-packages (from keras>=2.0.7->keras-rl) (2.8.0)\n", | |
| "Requirement already satisfied: keras-applications>=1.0.6 in /usr/local/lib/python3.6/dist-packages (from keras>=2.0.7->keras-rl) (1.0.7)\n", | |
| "Requirement already satisfied: keras-preprocessing>=1.0.5 in /usr/local/lib/python3.6/dist-packages (from keras>=2.0.7->keras-rl) (1.0.9)\n", | |
| "Requirement already satisfied: numpy>=1.9.1 in /usr/local/lib/python3.6/dist-packages (from keras>=2.0.7->keras-rl) (1.14.6)\n", | |
| "Requirement already satisfied: scipy>=0.14 in /usr/local/lib/python3.6/dist-packages (from keras>=2.0.7->keras-rl) (1.1.0)\n" | |
| ], | |
| "name": "stdout" | |
| } | |
| ] | |
| }, | |
| { | |
| "metadata": { | |
| "id": "3oT4sv4gYRMf", | |
| "colab_type": "code", | |
| "colab": {} | |
| }, | |
| "cell_type": "code", | |
| "source": [ | |
| "# Code to read csv file into Colaboratory:\n", | |
| "!pip install -U -q PyDrive\n", | |
| "from pydrive.auth import GoogleAuth\n", | |
| "from pydrive.drive import GoogleDrive\n", | |
| "from google.colab import auth\n", | |
| "from oauth2client.client import GoogleCredentials\n", | |
| "# Authenticate and create the PyDrive client.\n", | |
| "auth.authenticate_user()\n", | |
| "gauth = GoogleAuth()\n", | |
| "gauth.credentials = GoogleCredentials.get_application_default()\n", | |
| "drive = GoogleDrive(gauth)" | |
| ], | |
| "execution_count": 0, | |
| "outputs": [] | |
| }, | |
| { | |
| "metadata": { | |
| "id": "qv9hsfA6Oadm", | |
| "colab_type": "text" | |
| }, | |
| "cell_type": "markdown", | |
| "source": [ | |
| "## Running the lab \n", | |
| "\n", | |
| "We first import the libraries needed to run the lab. We are importing the keras needed libraries but also the mathematical one needed. " | |
| ] | |
| }, | |
| { | |
| "metadata": { | |
| "id": "XDlIMsxyOadn", | |
| "colab_type": "code", | |
| "colab": { | |
| "base_uri": "https://localhost:8080/", | |
| "height": 51 | |
| }, | |
| "outputId": "0ab8b13c-c93d-401d-c069-23e0b7de34bf" | |
| }, | |
| "cell_type": "code", | |
| "source": [ | |
| "import gym # openAi gym\n", | |
| "from gym import envs\n", | |
| "import numpy as np \n", | |
| "import datetime\n", | |
| "import keras \n", | |
| "import tensorflow as tf\n", | |
| "import matplotlib.pyplot as plt\n", | |
| "%matplotlib inline\n", | |
| "import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n", | |
| "from time import sleep\n", | |
| "\n", | |
| "from rl.agents.dqn import DQNAgent\n", | |
| "from rl.policy import LinearAnnealedPolicy, BoltzmannQPolicy, EpsGreedyQPolicy\n", | |
| "from rl.memory import SequentialMemory\n", | |
| "from rl.core import Processor\n", | |
| "from rl.callbacks import FileLogger, ModelIntervalCheckpoint\n", | |
| "print(\"OK\")" | |
| ], | |
| "execution_count": 3, | |
| "outputs": [ | |
| { | |
| "output_type": "stream", | |
| "text": [ | |
| "Using TensorFlow backend.\n" | |
| ], | |
| "name": "stderr" | |
| }, | |
| { | |
| "output_type": "stream", | |
| "text": [ | |
| "OK\n" | |
| ], | |
| "name": "stdout" | |
| } | |
| ] | |
| }, | |
| { | |
| "metadata": { | |
| "id": "AsaqibNHcnX4", | |
| "colab_type": "text" | |
| }, | |
| "cell_type": "markdown", | |
| "source": [ | |
| "Create possibility for video output on headless server" | |
| ] | |
| }, | |
| { | |
| "metadata": { | |
| "id": "zpJVeutOcmTo", | |
| "colab_type": "code", | |
| "colab": {} | |
| }, | |
| "cell_type": "code", | |
| "source": [ | |
| "import os\n", | |
| "import io\n", | |
| "import base64\n", | |
| "from IPython.display import display, HTML\n", | |
| "\n", | |
| "def ipython_show_video(path):\n", | |
| " \"\"\"Show a video at `path` within IPython Notebook\n", | |
| " \"\"\"\n", | |
| " if not os.path.isfile(path):\n", | |
| " raise NameError(\"Cannot access: {}\".format(path))\n", | |
| "\n", | |
| " video = io.open(path, 'r+b').read()\n", | |
| " encoded = base64.b64encode(video)\n", | |
| "\n", | |
| " display(HTML(\n", | |
| " data=\"\"\"\n", | |
| " <video alt=\"test\" controls>\n", | |
| " <source src=\"data:video/mp4;base64,{0}\" type=\"video/mp4\" />\n", | |
| " </video>\n", | |
| " \"\"\".format(encoded.decode('ascii'))\n", | |
| " ))\n" | |
| ], | |
| "execution_count": 0, | |
| "outputs": [] | |
| }, | |
| { | |
| "metadata": { | |
| "id": "j6X0rooROadt", | |
| "colab_type": "text" | |
| }, | |
| "cell_type": "markdown", | |
| "source": [ | |
| "## So what is available \n", | |
| "\n", | |
| "\n", | |
| "\n", | |
| "There are many many games made available. Let's review all the possible game environments in gym. We can get started learning using some build-in games in Gym that do not require additonal installs." | |
| ] | |
| }, | |
| { | |
| "metadata": { | |
| "id": "jJ7Seq95Oadu", | |
| "colab_type": "code", | |
| "colab": { | |
| "base_uri": "https://localhost:8080/", | |
| "height": 54 | |
| }, | |
| "outputId": "44e9becc-1411-4ca1-be9a-6a1d9607daed" | |
| }, | |
| "cell_type": "code", | |
| "source": [ | |
| "print(envs.registry.all())" | |
| ], | |
| "execution_count": 5, | |
| "outputs": [ | |
| { | |
| "output_type": "stream", | |
| "text": [ | |
| "dict_values([EnvSpec(Copy-v0), EnvSpec(RepeatCopy-v0), EnvSpec(ReversedAddition-v0), EnvSpec(ReversedAddition3-v0), EnvSpec(DuplicatedInput-v0), EnvSpec(Reverse-v0), EnvSpec(CartPole-v0), EnvSpec(CartPole-v1), EnvSpec(MountainCar-v0), EnvSpec(MountainCarContinuous-v0), EnvSpec(Pendulum-v0), EnvSpec(Acrobot-v1), EnvSpec(LunarLander-v2), EnvSpec(LunarLanderContinuous-v2), EnvSpec(BipedalWalker-v2), EnvSpec(BipedalWalkerHardcore-v2), EnvSpec(CarRacing-v0), EnvSpec(Blackjack-v0), EnvSpec(KellyCoinflip-v0), EnvSpec(KellyCoinflipGeneralized-v0), EnvSpec(FrozenLake-v0), EnvSpec(FrozenLake8x8-v0), EnvSpec(CliffWalking-v0), EnvSpec(NChain-v0), EnvSpec(Roulette-v0), EnvSpec(Taxi-v2), EnvSpec(GuessingGame-v0), EnvSpec(HotterColder-v0), EnvSpec(Reacher-v2), EnvSpec(Pusher-v2), EnvSpec(Thrower-v2), EnvSpec(Striker-v2), EnvSpec(InvertedPendulum-v2), EnvSpec(InvertedDoublePendulum-v2), EnvSpec(HalfCheetah-v2), EnvSpec(Hopper-v2), EnvSpec(Swimmer-v2), EnvSpec(Walker2d-v2), EnvSpec(Ant-v2), EnvSpec(Humanoid-v2), EnvSpec(HumanoidStandup-v2), EnvSpec(FetchSlide-v1), EnvSpec(FetchPickAndPlace-v1), EnvSpec(FetchReach-v1), EnvSpec(FetchPush-v1), EnvSpec(HandReach-v0), EnvSpec(HandManipulateBlockRotateZ-v0), EnvSpec(HandManipulateBlockRotateParallel-v0), EnvSpec(HandManipulateBlockRotateXYZ-v0), EnvSpec(HandManipulateBlockFull-v0), EnvSpec(HandManipulateBlock-v0), EnvSpec(HandManipulateEggRotate-v0), EnvSpec(HandManipulateEggFull-v0), EnvSpec(HandManipulateEgg-v0), EnvSpec(HandManipulatePenRotate-v0), EnvSpec(HandManipulatePenFull-v0), EnvSpec(HandManipulatePen-v0), EnvSpec(FetchSlideDense-v1), EnvSpec(FetchPickAndPlaceDense-v1), EnvSpec(FetchReachDense-v1), EnvSpec(FetchPushDense-v1), EnvSpec(HandReachDense-v0), EnvSpec(HandManipulateBlockRotateZDense-v0), EnvSpec(HandManipulateBlockRotateParallelDense-v0), EnvSpec(HandManipulateBlockRotateXYZDense-v0), EnvSpec(HandManipulateBlockFullDense-v0), EnvSpec(HandManipulateBlockDense-v0), EnvSpec(HandManipulateEggRotateDense-v0), EnvSpec(HandManipulateEggFullDense-v0), EnvSpec(HandManipulateEggDense-v0), EnvSpec(HandManipulatePenRotateDense-v0), EnvSpec(HandManipulatePenFullDense-v0), EnvSpec(HandManipulatePenDense-v0), EnvSpec(AirRaid-v0), EnvSpec(AirRaid-v4), EnvSpec(AirRaidDeterministic-v0), EnvSpec(AirRaidDeterministic-v4), EnvSpec(AirRaidNoFrameskip-v0), EnvSpec(AirRaidNoFrameskip-v4), EnvSpec(AirRaid-ram-v0), EnvSpec(AirRaid-ram-v4), EnvSpec(AirRaid-ramDeterministic-v0), EnvSpec(AirRaid-ramDeterministic-v4), EnvSpec(AirRaid-ramNoFrameskip-v0), EnvSpec(AirRaid-ramNoFrameskip-v4), EnvSpec(Alien-v0), EnvSpec(Alien-v4), EnvSpec(AlienDeterministic-v0), EnvSpec(AlienDeterministic-v4), EnvSpec(AlienNoFrameskip-v0), EnvSpec(AlienNoFrameskip-v4), EnvSpec(Alien-ram-v0), EnvSpec(Alien-ram-v4), EnvSpec(Alien-ramDeterministic-v0), EnvSpec(Alien-ramDeterministic-v4), EnvSpec(Alien-ramNoFrameskip-v0), EnvSpec(Alien-ramNoFrameskip-v4), EnvSpec(Amidar-v0), EnvSpec(Amidar-v4), EnvSpec(AmidarDeterministic-v0), EnvSpec(AmidarDeterministic-v4), EnvSpec(AmidarNoFrameskip-v0), EnvSpec(AmidarNoFrameskip-v4), EnvSpec(Amidar-ram-v0), EnvSpec(Amidar-ram-v4), EnvSpec(Amidar-ramDeterministic-v0), EnvSpec(Amidar-ramDeterministic-v4), EnvSpec(Amidar-ramNoFrameskip-v0), EnvSpec(Amidar-ramNoFrameskip-v4), EnvSpec(Assault-v0), EnvSpec(Assault-v4), EnvSpec(AssaultDeterministic-v0), EnvSpec(AssaultDeterministic-v4), EnvSpec(AssaultNoFrameskip-v0), EnvSpec(AssaultNoFrameskip-v4), EnvSpec(Assault-ram-v0), EnvSpec(Assault-ram-v4), EnvSpec(Assault-ramDeterministic-v0), EnvSpec(Assault-ramDeterministic-v4), EnvSpec(Assault-ramNoFrameskip-v0), EnvSpec(Assault-ramNoFrameskip-v4), EnvSpec(Asterix-v0), EnvSpec(Asterix-v4), EnvSpec(AsterixDeterministic-v0), EnvSpec(AsterixDeterministic-v4), EnvSpec(AsterixNoFrameskip-v0), EnvSpec(AsterixNoFrameskip-v4), EnvSpec(Asterix-ram-v0), EnvSpec(Asterix-ram-v4), EnvSpec(Asterix-ramDeterministic-v0), EnvSpec(Asterix-ramDeterministic-v4), EnvSpec(Asterix-ramNoFrameskip-v0), EnvSpec(Asterix-ramNoFrameskip-v4), EnvSpec(Asteroids-v0), EnvSpec(Asteroids-v4), EnvSpec(AsteroidsDeterministic-v0), EnvSpec(AsteroidsDeterministic-v4), EnvSpec(AsteroidsNoFrameskip-v0), EnvSpec(AsteroidsNoFrameskip-v4), EnvSpec(Asteroids-ram-v0), EnvSpec(Asteroids-ram-v4), EnvSpec(Asteroids-ramDeterministic-v0), EnvSpec(Asteroids-ramDeterministic-v4), EnvSpec(Asteroids-ramNoFrameskip-v0), EnvSpec(Asteroids-ramNoFrameskip-v4), EnvSpec(Atlantis-v0), EnvSpec(Atlantis-v4), EnvSpec(AtlantisDeterministic-v0), EnvSpec(AtlantisDeterministic-v4), EnvSpec(AtlantisNoFrameskip-v0), EnvSpec(AtlantisNoFrameskip-v4), EnvSpec(Atlantis-ram-v0), EnvSpec(Atlantis-ram-v4), EnvSpec(Atlantis-ramDeterministic-v0), EnvSpec(Atlantis-ramDeterministic-v4), EnvSpec(Atlantis-ramNoFrameskip-v0), EnvSpec(Atlantis-ramNoFrameskip-v4), EnvSpec(BankHeist-v0), EnvSpec(BankHeist-v4), EnvSpec(BankHeistDeterministic-v0), EnvSpec(BankHeistDeterministic-v4), EnvSpec(BankHeistNoFrameskip-v0), EnvSpec(BankHeistNoFrameskip-v4), EnvSpec(BankHeist-ram-v0), EnvSpec(BankHeist-ram-v4), EnvSpec(BankHeist-ramDeterministic-v0), EnvSpec(BankHeist-ramDeterministic-v4), EnvSpec(BankHeist-ramNoFrameskip-v0), EnvSpec(BankHeist-ramNoFrameskip-v4), EnvSpec(BattleZone-v0), EnvSpec(BattleZone-v4), EnvSpec(BattleZoneDeterministic-v0), EnvSpec(BattleZoneDeterministic-v4), EnvSpec(BattleZoneNoFrameskip-v0), EnvSpec(BattleZoneNoFrameskip-v4), EnvSpec(BattleZone-ram-v0), EnvSpec(BattleZone-ram-v4), EnvSpec(BattleZone-ramDeterministic-v0), EnvSpec(BattleZone-ramDeterministic-v4), EnvSpec(BattleZone-ramNoFrameskip-v0), EnvSpec(BattleZone-ramNoFrameskip-v4), EnvSpec(BeamRider-v0), EnvSpec(BeamRider-v4), EnvSpec(BeamRiderDeterministic-v0), EnvSpec(BeamRiderDeterministic-v4), EnvSpec(BeamRiderNoFrameskip-v0), EnvSpec(BeamRiderNoFrameskip-v4), EnvSpec(BeamRider-ram-v0), EnvSpec(BeamRider-ram-v4), EnvSpec(BeamRider-ramDeterministic-v0), EnvSpec(BeamRider-ramDeterministic-v4), EnvSpec(BeamRider-ramNoFrameskip-v0), EnvSpec(BeamRider-ramNoFrameskip-v4), EnvSpec(Berzerk-v0), EnvSpec(Berzerk-v4), EnvSpec(BerzerkDeterministic-v0), EnvSpec(BerzerkDeterministic-v4), EnvSpec(BerzerkNoFrameskip-v0), EnvSpec(BerzerkNoFrameskip-v4), EnvSpec(Berzerk-ram-v0), EnvSpec(Berzerk-ram-v4), EnvSpec(Berzerk-ramDeterministic-v0), EnvSpec(Berzerk-ramDeterministic-v4), EnvSpec(Berzerk-ramNoFrameskip-v0), EnvSpec(Berzerk-ramNoFrameskip-v4), EnvSpec(Bowling-v0), EnvSpec(Bowling-v4), EnvSpec(BowlingDeterministic-v0), EnvSpec(BowlingDeterministic-v4), EnvSpec(BowlingNoFrameskip-v0), EnvSpec(BowlingNoFrameskip-v4), EnvSpec(Bowling-ram-v0), EnvSpec(Bowling-ram-v4), EnvSpec(Bowling-ramDeterministic-v0), EnvSpec(Bowling-ramDeterministic-v4), EnvSpec(Bowling-ramNoFrameskip-v0), EnvSpec(Bowling-ramNoFrameskip-v4), EnvSpec(Boxing-v0), EnvSpec(Boxing-v4), EnvSpec(BoxingDeterministic-v0), EnvSpec(BoxingDeterministic-v4), EnvSpec(BoxingNoFrameskip-v0), EnvSpec(BoxingNoFrameskip-v4), EnvSpec(Boxing-ram-v0), EnvSpec(Boxing-ram-v4), EnvSpec(Boxing-ramDeterministic-v0), EnvSpec(Boxing-ramDeterministic-v4), EnvSpec(Boxing-ramNoFrameskip-v0), EnvSpec(Boxing-ramNoFrameskip-v4), EnvSpec(Breakout-v0), EnvSpec(Breakout-v4), EnvSpec(BreakoutDeterministic-v0), EnvSpec(BreakoutDeterministic-v4), EnvSpec(BreakoutNoFrameskip-v0), EnvSpec(BreakoutNoFrameskip-v4), EnvSpec(Breakout-ram-v0), EnvSpec(Breakout-ram-v4), EnvSpec(Breakout-ramDeterministic-v0), EnvSpec(Breakout-ramDeterministic-v4), EnvSpec(Breakout-ramNoFrameskip-v0), EnvSpec(Breakout-ramNoFrameskip-v4), EnvSpec(Carnival-v0), EnvSpec(Carnival-v4), EnvSpec(CarnivalDeterministic-v0), EnvSpec(CarnivalDeterministic-v4), EnvSpec(CarnivalNoFrameskip-v0), EnvSpec(CarnivalNoFrameskip-v4), EnvSpec(Carnival-ram-v0), EnvSpec(Carnival-ram-v4), EnvSpec(Carnival-ramDeterministic-v0), EnvSpec(Carnival-ramDeterministic-v4), EnvSpec(Carnival-ramNoFrameskip-v0), EnvSpec(Carnival-ramNoFrameskip-v4), EnvSpec(Centipede-v0), EnvSpec(Centipede-v4), EnvSpec(CentipedeDeterministic-v0), EnvSpec(CentipedeDeterministic-v4), EnvSpec(CentipedeNoFrameskip-v0), EnvSpec(CentipedeNoFrameskip-v4), EnvSpec(Centipede-ram-v0), EnvSpec(Centipede-ram-v4), EnvSpec(Centipede-ramDeterministic-v0), EnvSpec(Centipede-ramDeterministic-v4), EnvSpec(Centipede-ramNoFrameskip-v0), EnvSpec(Centipede-ramNoFrameskip-v4), EnvSpec(ChopperCommand-v0), EnvSpec(ChopperCommand-v4), EnvSpec(ChopperCommandDeterministic-v0), EnvSpec(ChopperCommandDeterministic-v4), EnvSpec(ChopperCommandNoFrameskip-v0), EnvSpec(ChopperCommandNoFrameskip-v4), EnvSpec(ChopperCommand-ram-v0), EnvSpec(ChopperCommand-ram-v4), EnvSpec(ChopperCommand-ramDeterministic-v0), EnvSpec(ChopperCommand-ramDeterministic-v4), EnvSpec(ChopperCommand-ramNoFrameskip-v0), EnvSpec(ChopperCommand-ramNoFrameskip-v4), EnvSpec(CrazyClimber-v0), EnvSpec(CrazyClimber-v4), EnvSpec(CrazyClimberDeterministic-v0), EnvSpec(CrazyClimberDeterministic-v4), EnvSpec(CrazyClimberNoFrameskip-v0), EnvSpec(CrazyClimberNoFrameskip-v4), EnvSpec(CrazyClimber-ram-v0), EnvSpec(CrazyClimber-ram-v4), EnvSpec(CrazyClimber-ramDeterministic-v0), EnvSpec(CrazyClimber-ramDeterministic-v4), EnvSpec(CrazyClimber-ramNoFrameskip-v0), EnvSpec(CrazyClimber-ramNoFrameskip-v4), EnvSpec(DemonAttack-v0), EnvSpec(DemonAttack-v4), EnvSpec(DemonAttackDeterministic-v0), EnvSpec(DemonAttackDeterministic-v4), EnvSpec(DemonAttackNoFrameskip-v0), EnvSpec(DemonAttackNoFrameskip-v4), EnvSpec(DemonAttack-ram-v0), EnvSpec(DemonAttack-ram-v4), EnvSpec(DemonAttack-ramDeterministic-v0), EnvSpec(DemonAttack-ramDeterministic-v4), EnvSpec(DemonAttack-ramNoFrameskip-v0), EnvSpec(DemonAttack-ramNoFrameskip-v4), EnvSpec(DoubleDunk-v0), EnvSpec(DoubleDunk-v4), EnvSpec(DoubleDunkDeterministic-v0), EnvSpec(DoubleDunkDeterministic-v4), EnvSpec(DoubleDunkNoFrameskip-v0), EnvSpec(DoubleDunkNoFrameskip-v4), EnvSpec(DoubleDunk-ram-v0), EnvSpec(DoubleDunk-ram-v4), EnvSpec(DoubleDunk-ramDeterministic-v0), EnvSpec(DoubleDunk-ramDeterministic-v4), EnvSpec(DoubleDunk-ramNoFrameskip-v0), EnvSpec(DoubleDunk-ramNoFrameskip-v4), EnvSpec(ElevatorAction-v0), EnvSpec(ElevatorAction-v4), EnvSpec(ElevatorActionDeterministic-v0), EnvSpec(ElevatorActionDeterministic-v4), EnvSpec(ElevatorActionNoFrameskip-v0), EnvSpec(ElevatorActionNoFrameskip-v4), EnvSpec(ElevatorAction-ram-v0), EnvSpec(ElevatorAction-ram-v4), EnvSpec(ElevatorAction-ramDeterministic-v0), EnvSpec(ElevatorAction-ramDeterministic-v4), EnvSpec(ElevatorAction-ramNoFrameskip-v0), EnvSpec(ElevatorAction-ramNoFrameskip-v4), EnvSpec(Enduro-v0), EnvSpec(Enduro-v4), EnvSpec(EnduroDeterministic-v0), EnvSpec(EnduroDeterministic-v4), EnvSpec(EnduroNoFrameskip-v0), EnvSpec(EnduroNoFrameskip-v4), EnvSpec(Enduro-ram-v0), EnvSpec(Enduro-ram-v4), EnvSpec(Enduro-ramDeterministic-v0), EnvSpec(Enduro-ramDeterministic-v4), EnvSpec(Enduro-ramNoFrameskip-v0), EnvSpec(Enduro-ramNoFrameskip-v4), EnvSpec(FishingDerby-v0), EnvSpec(FishingDerby-v4), EnvSpec(FishingDerbyDeterministic-v0), EnvSpec(FishingDerbyDeterministic-v4), EnvSpec(FishingDerbyNoFrameskip-v0), EnvSpec(FishingDerbyNoFrameskip-v4), EnvSpec(FishingDerby-ram-v0), EnvSpec(FishingDerby-ram-v4), EnvSpec(FishingDerby-ramDeterministic-v0), EnvSpec(FishingDerby-ramDeterministic-v4), EnvSpec(FishingDerby-ramNoFrameskip-v0), EnvSpec(FishingDerby-ramNoFrameskip-v4), EnvSpec(Freeway-v0), EnvSpec(Freeway-v4), EnvSpec(FreewayDeterministic-v0), EnvSpec(FreewayDeterministic-v4), EnvSpec(FreewayNoFrameskip-v0), EnvSpec(FreewayNoFrameskip-v4), EnvSpec(Freeway-ram-v0), EnvSpec(Freeway-ram-v4), EnvSpec(Freeway-ramDeterministic-v0), EnvSpec(Freeway-ramDeterministic-v4), EnvSpec(Freeway-ramNoFrameskip-v0), EnvSpec(Freeway-ramNoFrameskip-v4), EnvSpec(Frostbite-v0), EnvSpec(Frostbite-v4), EnvSpec(FrostbiteDeterministic-v0), EnvSpec(FrostbiteDeterministic-v4), EnvSpec(FrostbiteNoFrameskip-v0), EnvSpec(FrostbiteNoFrameskip-v4), EnvSpec(Frostbite-ram-v0), EnvSpec(Frostbite-ram-v4), EnvSpec(Frostbite-ramDeterministic-v0), EnvSpec(Frostbite-ramDeterministic-v4), EnvSpec(Frostbite-ramNoFrameskip-v0), EnvSpec(Frostbite-ramNoFrameskip-v4), EnvSpec(Gopher-v0), EnvSpec(Gopher-v4), EnvSpec(GopherDeterministic-v0), EnvSpec(GopherDeterministic-v4), EnvSpec(GopherNoFrameskip-v0), EnvSpec(GopherNoFrameskip-v4), EnvSpec(Gopher-ram-v0), EnvSpec(Gopher-ram-v4), EnvSpec(Gopher-ramDeterministic-v0), EnvSpec(Gopher-ramDeterministic-v4), EnvSpec(Gopher-ramNoFrameskip-v0), EnvSpec(Gopher-ramNoFrameskip-v4), EnvSpec(Gravitar-v0), EnvSpec(Gravitar-v4), EnvSpec(GravitarDeterministic-v0), EnvSpec(GravitarDeterministic-v4), EnvSpec(GravitarNoFrameskip-v0), EnvSpec(GravitarNoFrameskip-v4), EnvSpec(Gravitar-ram-v0), EnvSpec(Gravitar-ram-v4), EnvSpec(Gravitar-ramDeterministic-v0), EnvSpec(Gravitar-ramDeterministic-v4), EnvSpec(Gravitar-ramNoFrameskip-v0), EnvSpec(Gravitar-ramNoFrameskip-v4), EnvSpec(Hero-v0), EnvSpec(Hero-v4), EnvSpec(HeroDeterministic-v0), EnvSpec(HeroDeterministic-v4), EnvSpec(HeroNoFrameskip-v0), EnvSpec(HeroNoFrameskip-v4), EnvSpec(Hero-ram-v0), EnvSpec(Hero-ram-v4), EnvSpec(Hero-ramDeterministic-v0), EnvSpec(Hero-ramDeterministic-v4), EnvSpec(Hero-ramNoFrameskip-v0), EnvSpec(Hero-ramNoFrameskip-v4), EnvSpec(IceHockey-v0), EnvSpec(IceHockey-v4), EnvSpec(IceHockeyDeterministic-v0), EnvSpec(IceHockeyDeterministic-v4), EnvSpec(IceHockeyNoFrameskip-v0), EnvSpec(IceHockeyNoFrameskip-v4), EnvSpec(IceHockey-ram-v0), EnvSpec(IceHockey-ram-v4), EnvSpec(IceHockey-ramDeterministic-v0), EnvSpec(IceHockey-ramDeterministic-v4), EnvSpec(IceHockey-ramNoFrameskip-v0), EnvSpec(IceHockey-ramNoFrameskip-v4), EnvSpec(Jamesbond-v0), EnvSpec(Jamesbond-v4), EnvSpec(JamesbondDeterministic-v0), EnvSpec(JamesbondDeterministic-v4), EnvSpec(JamesbondNoFrameskip-v0), EnvSpec(JamesbondNoFrameskip-v4), EnvSpec(Jamesbond-ram-v0), EnvSpec(Jamesbond-ram-v4), EnvSpec(Jamesbond-ramDeterministic-v0), EnvSpec(Jamesbond-ramDeterministic-v4), EnvSpec(Jamesbond-ramNoFrameskip-v0), EnvSpec(Jamesbond-ramNoFrameskip-v4), EnvSpec(JourneyEscape-v0), EnvSpec(JourneyEscape-v4), EnvSpec(JourneyEscapeDeterministic-v0), EnvSpec(JourneyEscapeDeterministic-v4), EnvSpec(JourneyEscapeNoFrameskip-v0), EnvSpec(JourneyEscapeNoFrameskip-v4), EnvSpec(JourneyEscape-ram-v0), EnvSpec(JourneyEscape-ram-v4), EnvSpec(JourneyEscape-ramDeterministic-v0), EnvSpec(JourneyEscape-ramDeterministic-v4), EnvSpec(JourneyEscape-ramNoFrameskip-v0), EnvSpec(JourneyEscape-ramNoFrameskip-v4), EnvSpec(Kangaroo-v0), EnvSpec(Kangaroo-v4), EnvSpec(KangarooDeterministic-v0), EnvSpec(KangarooDeterministic-v4), EnvSpec(KangarooNoFrameskip-v0), EnvSpec(KangarooNoFrameskip-v4), EnvSpec(Kangaroo-ram-v0), EnvSpec(Kangaroo-ram-v4), EnvSpec(Kangaroo-ramDeterministic-v0), EnvSpec(Kangaroo-ramDeterministic-v4), EnvSpec(Kangaroo-ramNoFrameskip-v0), EnvSpec(Kangaroo-ramNoFrameskip-v4), EnvSpec(Krull-v0), EnvSpec(Krull-v4), EnvSpec(KrullDeterministic-v0), EnvSpec(KrullDeterministic-v4), EnvSpec(KrullNoFrameskip-v0), EnvSpec(KrullNoFrameskip-v4), EnvSpec(Krull-ram-v0), EnvSpec(Krull-ram-v4), EnvSpec(Krull-ramDeterministic-v0), EnvSpec(Krull-ramDeterministic-v4), EnvSpec(Krull-ramNoFrameskip-v0), EnvSpec(Krull-ramNoFrameskip-v4), EnvSpec(KungFuMaster-v0), EnvSpec(KungFuMaster-v4), EnvSpec(KungFuMasterDeterministic-v0), EnvSpec(KungFuMasterDeterministic-v4), EnvSpec(KungFuMasterNoFrameskip-v0), EnvSpec(KungFuMasterNoFrameskip-v4), EnvSpec(KungFuMaster-ram-v0), EnvSpec(KungFuMaster-ram-v4), EnvSpec(KungFuMaster-ramDeterministic-v0), EnvSpec(KungFuMaster-ramDeterministic-v4), EnvSpec(KungFuMaster-ramNoFrameskip-v0), EnvSpec(KungFuMaster-ramNoFrameskip-v4), EnvSpec(MontezumaRevenge-v0), EnvSpec(MontezumaRevenge-v4), EnvSpec(MontezumaRevengeDeterministic-v0), EnvSpec(MontezumaRevengeDeterministic-v4), EnvSpec(MontezumaRevengeNoFrameskip-v0), EnvSpec(MontezumaRevengeNoFrameskip-v4), EnvSpec(MontezumaRevenge-ram-v0), EnvSpec(MontezumaRevenge-ram-v4), EnvSpec(MontezumaRevenge-ramDeterministic-v0), EnvSpec(MontezumaRevenge-ramDeterministic-v4), EnvSpec(MontezumaRevenge-ramNoFrameskip-v0), EnvSpec(MontezumaRevenge-ramNoFrameskip-v4), EnvSpec(MsPacman-v0), EnvSpec(MsPacman-v4), EnvSpec(MsPacmanDeterministic-v0), EnvSpec(MsPacmanDeterministic-v4), EnvSpec(MsPacmanNoFrameskip-v0), EnvSpec(MsPacmanNoFrameskip-v4), EnvSpec(MsPacman-ram-v0), EnvSpec(MsPacman-ram-v4), EnvSpec(MsPacman-ramDeterministic-v0), EnvSpec(MsPacman-ramDeterministic-v4), EnvSpec(MsPacman-ramNoFrameskip-v0), EnvSpec(MsPacman-ramNoFrameskip-v4), EnvSpec(NameThisGame-v0), EnvSpec(NameThisGame-v4), EnvSpec(NameThisGameDeterministic-v0), EnvSpec(NameThisGameDeterministic-v4), EnvSpec(NameThisGameNoFrameskip-v0), EnvSpec(NameThisGameNoFrameskip-v4), EnvSpec(NameThisGame-ram-v0), EnvSpec(NameThisGame-ram-v4), EnvSpec(NameThisGame-ramDeterministic-v0), EnvSpec(NameThisGame-ramDeterministic-v4), EnvSpec(NameThisGame-ramNoFrameskip-v0), EnvSpec(NameThisGame-ramNoFrameskip-v4), EnvSpec(Phoenix-v0), EnvSpec(Phoenix-v4), EnvSpec(PhoenixDeterministic-v0), EnvSpec(PhoenixDeterministic-v4), EnvSpec(PhoenixNoFrameskip-v0), EnvSpec(PhoenixNoFrameskip-v4), EnvSpec(Phoenix-ram-v0), EnvSpec(Phoenix-ram-v4), EnvSpec(Phoenix-ramDeterministic-v0), EnvSpec(Phoenix-ramDeterministic-v4), EnvSpec(Phoenix-ramNoFrameskip-v0), EnvSpec(Phoenix-ramNoFrameskip-v4), EnvSpec(Pitfall-v0), EnvSpec(Pitfall-v4), EnvSpec(PitfallDeterministic-v0), EnvSpec(PitfallDeterministic-v4), EnvSpec(PitfallNoFrameskip-v0), EnvSpec(PitfallNoFrameskip-v4), EnvSpec(Pitfall-ram-v0), EnvSpec(Pitfall-ram-v4), EnvSpec(Pitfall-ramDeterministic-v0), EnvSpec(Pitfall-ramDeterministic-v4), EnvSpec(Pitfall-ramNoFrameskip-v0), EnvSpec(Pitfall-ramNoFrameskip-v4), EnvSpec(Pong-v0), EnvSpec(Pong-v4), EnvSpec(PongDeterministic-v0), EnvSpec(PongDeterministic-v4), EnvSpec(PongNoFrameskip-v0), EnvSpec(PongNoFrameskip-v4), EnvSpec(Pong-ram-v0), EnvSpec(Pong-ram-v4), EnvSpec(Pong-ramDeterministic-v0), EnvSpec(Pong-ramDeterministic-v4), EnvSpec(Pong-ramNoFrameskip-v0), EnvSpec(Pong-ramNoFrameskip-v4), EnvSpec(Pooyan-v0), EnvSpec(Pooyan-v4), EnvSpec(PooyanDeterministic-v0), EnvSpec(PooyanDeterministic-v4), EnvSpec(PooyanNoFrameskip-v0), EnvSpec(PooyanNoFrameskip-v4), EnvSpec(Pooyan-ram-v0), EnvSpec(Pooyan-ram-v4), EnvSpec(Pooyan-ramDeterministic-v0), EnvSpec(Pooyan-ramDeterministic-v4), EnvSpec(Pooyan-ramNoFrameskip-v0), EnvSpec(Pooyan-ramNoFrameskip-v4), EnvSpec(PrivateEye-v0), EnvSpec(PrivateEye-v4), EnvSpec(PrivateEyeDeterministic-v0), EnvSpec(PrivateEyeDeterministic-v4), EnvSpec(PrivateEyeNoFrameskip-v0), EnvSpec(PrivateEyeNoFrameskip-v4), EnvSpec(PrivateEye-ram-v0), EnvSpec(PrivateEye-ram-v4), EnvSpec(PrivateEye-ramDeterministic-v0), EnvSpec(PrivateEye-ramDeterministic-v4), EnvSpec(PrivateEye-ramNoFrameskip-v0), EnvSpec(PrivateEye-ramNoFrameskip-v4), EnvSpec(Qbert-v0), EnvSpec(Qbert-v4), EnvSpec(QbertDeterministic-v0), EnvSpec(QbertDeterministic-v4), EnvSpec(QbertNoFrameskip-v0), EnvSpec(QbertNoFrameskip-v4), EnvSpec(Qbert-ram-v0), EnvSpec(Qbert-ram-v4), EnvSpec(Qbert-ramDeterministic-v0), EnvSpec(Qbert-ramDeterministic-v4), EnvSpec(Qbert-ramNoFrameskip-v0), EnvSpec(Qbert-ramNoFrameskip-v4), EnvSpec(Riverraid-v0), EnvSpec(Riverraid-v4), EnvSpec(RiverraidDeterministic-v0), EnvSpec(RiverraidDeterministic-v4), EnvSpec(RiverraidNoFrameskip-v0), EnvSpec(RiverraidNoFrameskip-v4), EnvSpec(Riverraid-ram-v0), EnvSpec(Riverraid-ram-v4), EnvSpec(Riverraid-ramDeterministic-v0), EnvSpec(Riverraid-ramDeterministic-v4), EnvSpec(Riverraid-ramNoFrameskip-v0), EnvSpec(Riverraid-ramNoFrameskip-v4), EnvSpec(RoadRunner-v0), EnvSpec(RoadRunner-v4), EnvSpec(RoadRunnerDeterministic-v0), EnvSpec(RoadRunnerDeterministic-v4), EnvSpec(RoadRunnerNoFrameskip-v0), EnvSpec(RoadRunnerNoFrameskip-v4), EnvSpec(RoadRunner-ram-v0), EnvSpec(RoadRunner-ram-v4), EnvSpec(RoadRunner-ramDeterministic-v0), EnvSpec(RoadRunner-ramDeterministic-v4), EnvSpec(RoadRunner-ramNoFrameskip-v0), EnvSpec(RoadRunner-ramNoFrameskip-v4), EnvSpec(Robotank-v0), EnvSpec(Robotank-v4), EnvSpec(RobotankDeterministic-v0), EnvSpec(RobotankDeterministic-v4), EnvSpec(RobotankNoFrameskip-v0), EnvSpec(RobotankNoFrameskip-v4), EnvSpec(Robotank-ram-v0), EnvSpec(Robotank-ram-v4), EnvSpec(Robotank-ramDeterministic-v0), EnvSpec(Robotank-ramDeterministic-v4), EnvSpec(Robotank-ramNoFrameskip-v0), EnvSpec(Robotank-ramNoFrameskip-v4), EnvSpec(Seaquest-v0), EnvSpec(Seaquest-v4), EnvSpec(SeaquestDeterministic-v0), EnvSpec(SeaquestDeterministic-v4), EnvSpec(SeaquestNoFrameskip-v0), EnvSpec(SeaquestNoFrameskip-v4), EnvSpec(Seaquest-ram-v0), EnvSpec(Seaquest-ram-v4), EnvSpec(Seaquest-ramDeterministic-v0), EnvSpec(Seaquest-ramDeterministic-v4), EnvSpec(Seaquest-ramNoFrameskip-v0), EnvSpec(Seaquest-ramNoFrameskip-v4), EnvSpec(Skiing-v0), EnvSpec(Skiing-v4), EnvSpec(SkiingDeterministic-v0), EnvSpec(SkiingDeterministic-v4), EnvSpec(SkiingNoFrameskip-v0), EnvSpec(SkiingNoFrameskip-v4), EnvSpec(Skiing-ram-v0), EnvSpec(Skiing-ram-v4), EnvSpec(Skiing-ramDeterministic-v0), EnvSpec(Skiing-ramDeterministic-v4), EnvSpec(Skiing-ramNoFrameskip-v0), EnvSpec(Skiing-ramNoFrameskip-v4), EnvSpec(Solaris-v0), EnvSpec(Solaris-v4), EnvSpec(SolarisDeterministic-v0), EnvSpec(SolarisDeterministic-v4), EnvSpec(SolarisNoFrameskip-v0), EnvSpec(SolarisNoFrameskip-v4), EnvSpec(Solaris-ram-v0), EnvSpec(Solaris-ram-v4), EnvSpec(Solaris-ramDeterministic-v0), EnvSpec(Solaris-ramDeterministic-v4), EnvSpec(Solaris-ramNoFrameskip-v0), EnvSpec(Solaris-ramNoFrameskip-v4), EnvSpec(SpaceInvaders-v0), EnvSpec(SpaceInvaders-v4), EnvSpec(SpaceInvadersDeterministic-v0), EnvSpec(SpaceInvadersDeterministic-v4), EnvSpec(SpaceInvadersNoFrameskip-v0), EnvSpec(SpaceInvadersNoFrameskip-v4), EnvSpec(SpaceInvaders-ram-v0), EnvSpec(SpaceInvaders-ram-v4), EnvSpec(SpaceInvaders-ramDeterministic-v0), EnvSpec(SpaceInvaders-ramDeterministic-v4), EnvSpec(SpaceInvaders-ramNoFrameskip-v0), EnvSpec(SpaceInvaders-ramNoFrameskip-v4), EnvSpec(StarGunner-v0), EnvSpec(StarGunner-v4), EnvSpec(StarGunnerDeterministic-v0), EnvSpec(StarGunnerDeterministic-v4), EnvSpec(StarGunnerNoFrameskip-v0), EnvSpec(StarGunnerNoFrameskip-v4), EnvSpec(StarGunner-ram-v0), EnvSpec(StarGunner-ram-v4), EnvSpec(StarGunner-ramDeterministic-v0), EnvSpec(StarGunner-ramDeterministic-v4), EnvSpec(StarGunner-ramNoFrameskip-v0), EnvSpec(StarGunner-ramNoFrameskip-v4), EnvSpec(Tennis-v0), EnvSpec(Tennis-v4), EnvSpec(TennisDeterministic-v0), EnvSpec(TennisDeterministic-v4), EnvSpec(TennisNoFrameskip-v0), EnvSpec(TennisNoFrameskip-v4), EnvSpec(Tennis-ram-v0), EnvSpec(Tennis-ram-v4), EnvSpec(Tennis-ramDeterministic-v0), EnvSpec(Tennis-ramDeterministic-v4), EnvSpec(Tennis-ramNoFrameskip-v0), EnvSpec(Tennis-ramNoFrameskip-v4), EnvSpec(TimePilot-v0), EnvSpec(TimePilot-v4), EnvSpec(TimePilotDeterministic-v0), EnvSpec(TimePilotDeterministic-v4), EnvSpec(TimePilotNoFrameskip-v0), EnvSpec(TimePilotNoFrameskip-v4), EnvSpec(TimePilot-ram-v0), EnvSpec(TimePilot-ram-v4), EnvSpec(TimePilot-ramDeterministic-v0), EnvSpec(TimePilot-ramDeterministic-v4), EnvSpec(TimePilot-ramNoFrameskip-v0), EnvSpec(TimePilot-ramNoFrameskip-v4), EnvSpec(Tutankham-v0), EnvSpec(Tutankham-v4), EnvSpec(TutankhamDeterministic-v0), EnvSpec(TutankhamDeterministic-v4), EnvSpec(TutankhamNoFrameskip-v0), EnvSpec(TutankhamNoFrameskip-v4), EnvSpec(Tutankham-ram-v0), EnvSpec(Tutankham-ram-v4), EnvSpec(Tutankham-ramDeterministic-v0), EnvSpec(Tutankham-ramDeterministic-v4), EnvSpec(Tutankham-ramNoFrameskip-v0), EnvSpec(Tutankham-ramNoFrameskip-v4), EnvSpec(UpNDown-v0), EnvSpec(UpNDown-v4), EnvSpec(UpNDownDeterministic-v0), EnvSpec(UpNDownDeterministic-v4), EnvSpec(UpNDownNoFrameskip-v0), EnvSpec(UpNDownNoFrameskip-v4), EnvSpec(UpNDown-ram-v0), EnvSpec(UpNDown-ram-v4), EnvSpec(UpNDown-ramDeterministic-v0), EnvSpec(UpNDown-ramDeterministic-v4), EnvSpec(UpNDown-ramNoFrameskip-v0), EnvSpec(UpNDown-ramNoFrameskip-v4), EnvSpec(Venture-v0), EnvSpec(Venture-v4), EnvSpec(VentureDeterministic-v0), EnvSpec(VentureDeterministic-v4), EnvSpec(VentureNoFrameskip-v0), EnvSpec(VentureNoFrameskip-v4), EnvSpec(Venture-ram-v0), EnvSpec(Venture-ram-v4), EnvSpec(Venture-ramDeterministic-v0), EnvSpec(Venture-ramDeterministic-v4), EnvSpec(Venture-ramNoFrameskip-v0), EnvSpec(Venture-ramNoFrameskip-v4), EnvSpec(VideoPinball-v0), EnvSpec(VideoPinball-v4), EnvSpec(VideoPinballDeterministic-v0), EnvSpec(VideoPinballDeterministic-v4), EnvSpec(VideoPinballNoFrameskip-v0), EnvSpec(VideoPinballNoFrameskip-v4), EnvSpec(VideoPinball-ram-v0), EnvSpec(VideoPinball-ram-v4), EnvSpec(VideoPinball-ramDeterministic-v0), EnvSpec(VideoPinball-ramDeterministic-v4), EnvSpec(VideoPinball-ramNoFrameskip-v0), EnvSpec(VideoPinball-ramNoFrameskip-v4), EnvSpec(WizardOfWor-v0), EnvSpec(WizardOfWor-v4), EnvSpec(WizardOfWorDeterministic-v0), EnvSpec(WizardOfWorDeterministic-v4), EnvSpec(WizardOfWorNoFrameskip-v0), EnvSpec(WizardOfWorNoFrameskip-v4), EnvSpec(WizardOfWor-ram-v0), EnvSpec(WizardOfWor-ram-v4), EnvSpec(WizardOfWor-ramDeterministic-v0), EnvSpec(WizardOfWor-ramDeterministic-v4), EnvSpec(WizardOfWor-ramNoFrameskip-v0), EnvSpec(WizardOfWor-ramNoFrameskip-v4), EnvSpec(YarsRevenge-v0), EnvSpec(YarsRevenge-v4), EnvSpec(YarsRevengeDeterministic-v0), EnvSpec(YarsRevengeDeterministic-v4), EnvSpec(YarsRevengeNoFrameskip-v0), EnvSpec(YarsRevengeNoFrameskip-v4), EnvSpec(YarsRevenge-ram-v0), EnvSpec(YarsRevenge-ram-v4), EnvSpec(YarsRevenge-ramDeterministic-v0), EnvSpec(YarsRevenge-ramDeterministic-v4), EnvSpec(YarsRevenge-ramNoFrameskip-v0), EnvSpec(YarsRevenge-ramNoFrameskip-v4), EnvSpec(Zaxxon-v0), EnvSpec(Zaxxon-v4), EnvSpec(ZaxxonDeterministic-v0), EnvSpec(ZaxxonDeterministic-v4), EnvSpec(ZaxxonNoFrameskip-v0), EnvSpec(ZaxxonNoFrameskip-v4), EnvSpec(Zaxxon-ram-v0), EnvSpec(Zaxxon-ram-v4), EnvSpec(Zaxxon-ramDeterministic-v0), EnvSpec(Zaxxon-ramDeterministic-v4), EnvSpec(Zaxxon-ramNoFrameskip-v0), EnvSpec(Zaxxon-ramNoFrameskip-v4), EnvSpec(CubeCrash-v0), EnvSpec(CubeCrashSparse-v0), EnvSpec(CubeCrashScreenBecomesBlack-v0), EnvSpec(MemorizeDigits-v0)])\n" | |
| ], | |
| "name": "stdout" | |
| } | |
| ] | |
| }, | |
| { | |
| "metadata": { | |
| "id": "8yL4Ud5tOadw", | |
| "colab_type": "text" | |
| }, | |
| "cell_type": "markdown", | |
| "source": [ | |
| " # 1. Let's Taxi \n", | |
| "\n", | |
| "Let's start learning using some build-in games in Gym that do not require additonal installs. Let's start with a very basic game called Taxi.\n", | |
| "\n", | |
| "There are four designated locations in the grid world indicated by R(ed), B(lue), G(reen), and Y(ellow). When the episode starts, the taxi starts off at a random square and the passenger is at a random location. The taxi drive to the passenger's location, pick up the passenger, drive to the passenger's destination (another one of the four specified locations), and then drop off the passenger. Once the passenger is dropped off, the episode ends. The taxi cannot pass thru a wall.\n", | |
| "\n", | |
| "Actions: There are 6 discrete deterministic actions:\n", | |
| "\n", | |
| "- 0: move south\n", | |
| "- 1: move north\n", | |
| "- 2: move east \n", | |
| "- 3: move west \n", | |
| "- 4: pickup passenger\n", | |
| "- 5: dropoff passenger\n", | |
| "\n", | |
| "Rewards: There is a reward of -1 for each action and an additional reward of +20 for delievering the passenger. There is a reward of -10 for executing actions \"pickup\" and \"dropoff\" illegally.\n", | |
| "\n", | |
| "Rendering:\n", | |
| "\n", | |
| "- blue: passenger\n", | |
| "- magenta: destination\n", | |
| "- yellow: empty taxi\n", | |
| "- green: full taxi\n", | |
| "- other letters: locations" | |
| ] | |
| }, | |
| { | |
| "metadata": { | |
| "id": "MjogcLarOadx", | |
| "colab_type": "code", | |
| "colab": { | |
| "base_uri": "https://localhost:8080/", | |
| "height": 153 | |
| }, | |
| "outputId": "f3b7b60c-e69d-465e-a8bf-82d526e9821b" | |
| }, | |
| "cell_type": "code", | |
| "source": [ | |
| "env = gym.make('Taxi-v2')\n", | |
| "env.reset()\n", | |
| "env.render()" | |
| ], | |
| "execution_count": 6, | |
| "outputs": [ | |
| { | |
| "output_type": "stream", | |
| "text": [ | |
| "+---------+\n", | |
| "|R: | : :\u001b[34;1mG\u001b[0m|\n", | |
| "| : : : : |\n", | |
| "|\u001b[43m \u001b[0m: : : : |\n", | |
| "| | : | : |\n", | |
| "|Y| : |\u001b[35mB\u001b[0m: |\n", | |
| "+---------+\n", | |
| "\n" | |
| ], | |
| "name": "stdout" | |
| } | |
| ] | |
| }, | |
| { | |
| "metadata": { | |
| "id": "uozC0obKOad1", | |
| "colab_type": "text" | |
| }, | |
| "cell_type": "markdown", | |
| "source": [ | |
| "## Interacting with the Gym environment\n", | |
| "\n", | |
| "Source:OpenAI \n", | |
| "\n", | |
| "OPenAI/gym makes it relative straightforward to interact with the game.\n", | |
| "\n", | |
| "\n", | |
| "<img src=\"images/rl.png\">\n", | |
| "\n", | |
| "Each timestep, the agent chooses an action, and the environment returns an observation and a reward.\n", | |
| "\n", | |
| "observation, reward, done, info = env.step(action)\n", | |
| "\n", | |
| "- observation (object): an environment-specific object representing your observation of the environment. For example, pixel data from a camera, joint angles and joint velocities of a robot, or the board state in a board game line Taxi.\n", | |
| "- reward (float): amount of reward achieved by the previous action. The scale varies between environments, but the goal is always to increase your total reward.\n", | |
| "- done (boolean): whether it’s time to reset the environment again. Most (but not all) tasks are divided up into well-defined episodes, and done being True indicates the episode has terminated. (For example, perhaps the pole tipped too far, or you lost your last life.)\n", | |
| "- info (dict): ignore, diagnostic information useful for debugging. Official evaluations of your agent are not allowed to use this for learning.\n", | |
| "\n", | |
| "Let's first do some random steps in the game so you see how the game looks like" | |
| ] | |
| }, | |
| { | |
| "metadata": { | |
| "id": "3YXmX3LwOad1", | |
| "colab_type": "code", | |
| "colab": { | |
| "base_uri": "https://localhost:8080/", | |
| "height": 986 | |
| }, | |
| "outputId": "049e868a-ac79-4a94-89b5-ccb117856fb7" | |
| }, | |
| "cell_type": "code", | |
| "source": [ | |
| "# Let's first do some random steps in the game so you see how the game looks like\n", | |
| "\n", | |
| "rew_tot=0\n", | |
| "obs= env.reset()\n", | |
| "env.render()\n", | |
| "for _ in range(6):\n", | |
| " action = env.action_space.sample() #take step using random action from possible actions (actio_space)\n", | |
| " obs, rew, done, info = env.step(action) \n", | |
| " rew_tot = rew_tot + rew\n", | |
| " env.render()\n", | |
| "#Print the reward of these random action\n", | |
| "print(\"Reward: %r\" % rew_tot) " | |
| ], | |
| "execution_count": 7, | |
| "outputs": [ | |
| { | |
| "output_type": "stream", | |
| "text": [ | |
| "+---------+\n", | |
| "|R: | : :\u001b[34;1mG\u001b[0m|\n", | |
| "| : :\u001b[43m \u001b[0m: : |\n", | |
| "| : : : : |\n", | |
| "| | : | : |\n", | |
| "|\u001b[35mY\u001b[0m| : |B: |\n", | |
| "+---------+\n", | |
| "\n", | |
| "+---------+\n", | |
| "|R: | : :\u001b[34;1mG\u001b[0m|\n", | |
| "| : :\u001b[43m \u001b[0m: : |\n", | |
| "| : : : : |\n", | |
| "| | : | : |\n", | |
| "|\u001b[35mY\u001b[0m| : |B: |\n", | |
| "+---------+\n", | |
| " (Pickup)\n", | |
| "+---------+\n", | |
| "|R: | : :\u001b[34;1mG\u001b[0m|\n", | |
| "| : :\u001b[43m \u001b[0m: : |\n", | |
| "| : : : : |\n", | |
| "| | : | : |\n", | |
| "|\u001b[35mY\u001b[0m| : |B: |\n", | |
| "+---------+\n", | |
| " (Dropoff)\n", | |
| "+---------+\n", | |
| "|R: | : :\u001b[34;1mG\u001b[0m|\n", | |
| "| : : : : |\n", | |
| "| : :\u001b[43m \u001b[0m: : |\n", | |
| "| | : | : |\n", | |
| "|\u001b[35mY\u001b[0m| : |B: |\n", | |
| "+---------+\n", | |
| " (South)\n", | |
| "+---------+\n", | |
| "|R: | : :\u001b[34;1mG\u001b[0m|\n", | |
| "| : : : : |\n", | |
| "| :\u001b[43m \u001b[0m: : : |\n", | |
| "| | : | : |\n", | |
| "|\u001b[35mY\u001b[0m| : |B: |\n", | |
| "+---------+\n", | |
| " (West)\n", | |
| "+---------+\n", | |
| "|R: | : :\u001b[34;1mG\u001b[0m|\n", | |
| "| : : : : |\n", | |
| "|\u001b[43m \u001b[0m: : : : |\n", | |
| "| | : | : |\n", | |
| "|\u001b[35mY\u001b[0m| : |B: |\n", | |
| "+---------+\n", | |
| " (West)\n", | |
| "+---------+\n", | |
| "|R: | : :\u001b[34;1mG\u001b[0m|\n", | |
| "| : : : : |\n", | |
| "|\u001b[43m \u001b[0m: : : : |\n", | |
| "| | : | : |\n", | |
| "|\u001b[35mY\u001b[0m| : |B: |\n", | |
| "+---------+\n", | |
| " (West)\n", | |
| "Reward: -24\n" | |
| ], | |
| "name": "stdout" | |
| } | |
| ] | |
| }, | |
| { | |
| "metadata": { | |
| "id": "GWduIkK9Oad4", | |
| "colab_type": "text" | |
| }, | |
| "cell_type": "markdown", | |
| "source": [ | |
| "## Action\n", | |
| "Action (a): the input the agent provides to the environment. So what are the action commands the agents can give to the enironment? The env.action_space will tell you\n", | |
| "\n", | |
| "What is the meaning of the actions? For the deep learning algorithm it should not matter, it should sort it out independent of the meaning of the action. But for humans it is handy to have the description, so we can understand the actions.\n", | |
| "\n", | |
| "In case of the Taxi game [0..5]:\n", | |
| "\n", | |
| "- 0: move south\n", | |
| "- 1: move north\n", | |
| "- 2: move east\n", | |
| "- 3: move west\n", | |
| "- 4: pickup passenger\n", | |
| "- 5: dropoff passenger" | |
| ] | |
| }, | |
| { | |
| "metadata": { | |
| "id": "k9yE2-9pOad4", | |
| "colab_type": "code", | |
| "colab": { | |
| "base_uri": "https://localhost:8080/", | |
| "height": 51 | |
| }, | |
| "outputId": "44e0c3f8-4a53-4881-d06d-9723e71caac5" | |
| }, | |
| "cell_type": "code", | |
| "source": [ | |
| "# action space has 6 possible actions, the meaning of the actions is nice to know for us humans but the neural network will figure it out\n", | |
| "print(env.action_space)\n", | |
| "NUM_ACTIONS = env.action_space.n\n", | |
| "print(f\"Possible actions: {NUM_ACTIONS-1}\")" | |
| ], | |
| "execution_count": 8, | |
| "outputs": [ | |
| { | |
| "output_type": "stream", | |
| "text": [ | |
| "Discrete(6)\n", | |
| "Possible actions: 5\n" | |
| ], | |
| "name": "stdout" | |
| } | |
| ] | |
| }, | |
| { | |
| "metadata": { | |
| "id": "pRPyZiLHOad6", | |
| "colab_type": "text" | |
| }, | |
| "cell_type": "markdown", | |
| "source": [ | |
| "## State\n", | |
| "\n", | |
| "State (s): This represents the board state of the game and in gym returned it is returned as observation. State: a numeric representation of what the agent is observing at a particular moment of time in the environment.\n", | |
| "In case of Taxi the observation is an integer, 500 different states are possible that translate to a nice graphic visual format with the render function. Note that this is specific for the Taxi game, in case of e.g. an Atari game the observation is the game screen with many coloured pixels." | |
| ] | |
| }, | |
| { | |
| "metadata": { | |
| "id": "nf-AbaI8Oad7", | |
| "colab_type": "code", | |
| "colab": { | |
| "base_uri": "https://localhost:8080/", | |
| "height": 323 | |
| }, | |
| "outputId": "b82cf7fb-1296-4df7-a42a-8034e0bfea62" | |
| }, | |
| "cell_type": "code", | |
| "source": [ | |
| "print(env.observation_space)\n", | |
| "print()\n", | |
| "env.env.s=42 # some random number, you might recognize it\n", | |
| "env.render()\n", | |
| "env.env.s = 222 # and some other\n", | |
| "env.render()" | |
| ], | |
| "execution_count": 9, | |
| "outputs": [ | |
| { | |
| "output_type": "stream", | |
| "text": [ | |
| "Discrete(500)\n", | |
| "\n", | |
| "+---------+\n", | |
| "|\u001b[34;1mR\u001b[0m: |\u001b[43m \u001b[0m: :G|\n", | |
| "| : : : : |\n", | |
| "| : : : : |\n", | |
| "| | : | : |\n", | |
| "|\u001b[35mY\u001b[0m| : |B: |\n", | |
| "+---------+\n", | |
| " (West)\n", | |
| "+---------+\n", | |
| "|\u001b[34;1mR\u001b[0m: | : :G|\n", | |
| "| : : : : |\n", | |
| "| :\u001b[43m \u001b[0m: : : |\n", | |
| "| | : | : |\n", | |
| "|\u001b[35mY\u001b[0m| : |B: |\n", | |
| "+---------+\n", | |
| " (West)\n" | |
| ], | |
| "name": "stdout" | |
| } | |
| ] | |
| }, | |
| { | |
| "metadata": { | |
| "id": "_lZAOxSjOad-", | |
| "colab_type": "text" | |
| }, | |
| "cell_type": "markdown", | |
| "source": [ | |
| "## Solution 1: Markov decision process(MDP)\n", | |
| "\n", | |
| "The Taxi game is an example of an Markov decision process . The game can be described in states, possible actions in a state (leading to a next state with a certain probability) with a reward.\n", | |
| "\n", | |
| "The word Markov refers to Markovian property which means that the state is independent of any previous states history, not on the sequence of events that preceded it. The current state encapsulates all that is needed to decide the future actions, no memory needed.\n", | |
| "\n", | |
| "\n", | |
| "In terms of Reinforcement Learning the Environment is modelled as a markov model and the agent needs to take actions in this environment to maximize the amount of reward. Since the agent sees only the outside of the environment (the effects of it actions) it is often referred to as the hidden markov model which needs to be learned.\n", | |
| "\n", | |
| "\n", | |
| "\n", | |
| "### Policy\n", | |
| "Policy (π): The strategy that the agent employs to determine next action 'a' in state 's'. Note that it does not state if it is a good or bad policy, it is a policy. The policy is normally noted with the greek letter π. Optimal policy (π*), policy which maximizes the expected reward. Among all the policies taken, the optimal policy is the one that optimizes to maximize the amount of reward received or expected to receive over a lifetime.\n", | |
| "\n", | |
| "So how do we find the optimal policy (π*) that is maximize our reward (and win the game) given the Taxi environment with the Markov model .\n", | |
| "\n", | |
| "### Bellman equation\n", | |
| "We will make use of the basic Bellman equation for deterministic environments to solve a problem that is described as a Markov model, see figure below:\n", | |
| "\n", | |
| "<img src=\"images/bellman.svg\">\n", | |
| "\n", | |
| "\n", | |
| "where\n", | |
| "\n", | |
| "- R(s,a) = Reward of action a in state s\n", | |
| "- P(s'|s,a)= Probability of going to state s' given action a in state s. The Taxi game actions are deterministic (no such a thing as if I want to go north there is an 80% chance to go north and 10% chance to go west and 10% chance to go east). so the probability that selected action will lead to expected state is 100%. So ignore it for this game, it is always 1.\n", | |
| "- γ = Discount factor gamma, how much discount is applicable for the future rewards. It must be between 0 and 1. The higher gamma the higher the focus on long term rewards\n", | |
| "\n", | |
| "The value iteration algorithm makes use of the equation in the form of:\n", | |
| "\n", | |
| "- Value V(s): The expected long-term return with discount, as opposed to the short-term reward R. Vπ(s) is defined as the expected long-term return of the current state sunder policy π.\n", | |
| "\n", | |
| "The Q learning algorithm makes use of the equation in the form of:\n", | |
| "\n", | |
| "- Q-matrix or action-value Q(s,a): Q-matrix is similar to Value, except that it takes an extra parameter, the action a. Qπ(s, a) refers to the long-term return of the current state s, taking action a under policy π.\n", | |
| "\n", | |
| "\n", | |
| "### Value iteration algorithm\n", | |
| "So' let's start first in \"memory lane\", the early days of reinforcement learning. Value iteration is the \"hello world\" of reinforcement learning methods to find an optimal policy to maximize reward for e.g. a Markov decision process problem.\n", | |
| "\n", | |
| "The value iteration is centred around the game states. The core of the idea is to calculate the value (expected long-term maximum result) of each state. The algorithm loops over all states (s) and possible actions (a) to explore rewards of a given action and calculates the maximum possible action/reward and stores it in V[s]. The algorithm iterates/repeats until V[s] is not (significantly) improving anymore. The Optimal policy (π*) is then to take every time the action to go state with the highest value. This value iteration algorithm is an example of what is referred to as dynamic programming (DP) in literature. There are other DP techniques to solve this like policy iteration, etc but it can also be solved by a recursive program (a function that calls itself, look at the Bellman equation, it is a recursive definition).\n", | |
| "Anyhow, lets see how this value iteration works." | |
| ] | |
| }, | |
| { | |
| "metadata": { | |
| "id": "XBwBTlMEOad_", | |
| "colab_type": "code", | |
| "colab": { | |
| "base_uri": "https://localhost:8080/", | |
| "height": 34 | |
| }, | |
| "outputId": "cfb5135c-3c22-4694-cacf-ee41e64493f3" | |
| }, | |
| "cell_type": "code", | |
| "source": [ | |
| "# Value iteration algorithem\n", | |
| "NUM_ACTIONS = env.action_space.n\n", | |
| "NUM_STATES = env.observation_space.n\n", | |
| "V = np.zeros([NUM_STATES]) # The Value for each state\n", | |
| "Pi = np.zeros([NUM_STATES], dtype=int) # Our policy with we keep updating to get the optimal policy\n", | |
| "gamma = 0.9 # discount factor\n", | |
| "significant_improvement = 0.01\n", | |
| "\n", | |
| "def best_action_value(s):\n", | |
| " # finds the highest value action (max_a) in state s\n", | |
| " best_a = None\n", | |
| " best_value = float('-inf')\n", | |
| "\n", | |
| " # loop through all possible actions to find the best current action\n", | |
| " for a in range (0, NUM_ACTIONS):\n", | |
| " env.env.s = s\n", | |
| " s_new, rew, done, info = env.step(a) #take the action\n", | |
| " v = rew + gamma * V[s_new]\n", | |
| " if v > best_value:\n", | |
| " best_value = v\n", | |
| " best_a = a\n", | |
| " return best_a\n", | |
| "\n", | |
| "iteration = 0\n", | |
| "while True:\n", | |
| " # biggest_change is referred to by the mathematical symbol delta in equations\n", | |
| " biggest_change = 0\n", | |
| " for s in range (0, NUM_STATES):\n", | |
| " old_v = V[s]\n", | |
| " action = best_action_value(s) #choosing an action with the highest future reward\n", | |
| " env.env.s = s # goto the state\n", | |
| " s_new, rew, done, info = env.step(action) #take the action\n", | |
| " V[s] = rew + gamma * V[s_new] #Update Value for the state using Bellman equation\n", | |
| " Pi[s] = action\n", | |
| " biggest_change = max(biggest_change, np.abs(old_v - V[s]))\n", | |
| " iteration += 1\n", | |
| " if biggest_change < significant_improvement:\n", | |
| " print (iteration,' iterations done')\n", | |
| " break" | |
| ], | |
| "execution_count": 10, | |
| "outputs": [ | |
| { | |
| "output_type": "stream", | |
| "text": [ | |
| "41 iterations done\n" | |
| ], | |
| "name": "stdout" | |
| } | |
| ] | |
| }, | |
| { | |
| "metadata": { | |
| "id": "a4wvJnxJOaeB", | |
| "colab_type": "text" | |
| }, | |
| "cell_type": "markdown", | |
| "source": [ | |
| "## Solution 2: Basic Q-learning algorithm\n", | |
| "\n", | |
| "### Model vs Model-free based methods\n", | |
| "The MDP nicely solves the Taxi game but it feels a bit like cheating in terms of reinforcement learning. We have to know all environment states/transitions upfront so the algorithm works. In RL literature they refer to it as model based methods. What if not all states are known upfront and we need to find out while we are learning. Hence we enter the real of model-free based methods.\n", | |
| "\n", | |
| "\n", | |
| "### The Q-learning algorithm \n", | |
| "\n", | |
| "The Q-learning algorithm is centred around the actor (in this case the Taxi) and starts exploring based on trial-and-error to update its knowledge about the model and hence path to the best reward. The core of the idea is the Q-matrix Q(s, a). It contains the maximum discounted future reward when we perform action a in state s. Or in other words Q(s, a) gives estimates the best course of action a in state s. Q-learning learns by trail and error and updates its policy (Q-matrix) based on reward. to state it simple: the best it can do given a state it is in.\n", | |
| "After every step we update Q(s,a) using the reward, and the max Q value for new state resulting from the action. This update is done using the action value formula (based upon the Bellman equation) and allows state-action pairs to be updated in a recursive fashion (based on future values).\n", | |
| "The Bellman equation is extended with a learning rate (if you put learning rate = 1 it comes back to the basic Bellman equation) :\n", | |
| "\n", | |
| "<img src=\"images/Q-learning.png\">\n", | |
| "\n", | |
| "\n", | |
| "\n", | |
| "\n", | |
| "Note: Temporal difference learning and Sarsa algorithems explored simular value expressions. Q-learning was the basis for Deep Q-learning (Deep referring to Neural Network technology). so, let's see how the Q-learning algorithm works." | |
| ] | |
| }, | |
| { | |
| "metadata": { | |
| "id": "K6nMNJ5UOaeC", | |
| "colab_type": "code", | |
| "colab": { | |
| "base_uri": "https://localhost:8080/", | |
| "height": 1938 | |
| }, | |
| "outputId": "00b1766b-adcd-476e-a935-61651725fc82" | |
| }, | |
| "cell_type": "code", | |
| "source": [ | |
| "# Let's see how the algorithm solves the taxi game\n", | |
| "rew_tot=0\n", | |
| "obs= env.reset()\n", | |
| "env.render()\n", | |
| "done=False\n", | |
| "while done != True: \n", | |
| " action = Pi[obs]\n", | |
| " obs, rew, done, info = env.step(action) #take step using selected action\n", | |
| " rew_tot = rew_tot + rew\n", | |
| " env.render()\n", | |
| "#Print the reward of these actions\n", | |
| "print(\"Reward: %r\" % rew_tot) " | |
| ], | |
| "execution_count": 11, | |
| "outputs": [ | |
| { | |
| "output_type": "stream", | |
| "text": [ | |
| "+---------+\n", | |
| "|R: | : :G|\n", | |
| "| :\u001b[43m \u001b[0m: : : |\n", | |
| "| : : : : |\n", | |
| "| | : | : |\n", | |
| "|\u001b[34;1mY\u001b[0m| : |\u001b[35mB\u001b[0m: |\n", | |
| "+---------+\n", | |
| "\n", | |
| "+---------+\n", | |
| "|R: | : :G|\n", | |
| "| : : : : |\n", | |
| "| :\u001b[43m \u001b[0m: : : |\n", | |
| "| | : | : |\n", | |
| "|\u001b[34;1mY\u001b[0m| : |\u001b[35mB\u001b[0m: |\n", | |
| "+---------+\n", | |
| " (South)\n", | |
| "+---------+\n", | |
| "|R: | : :G|\n", | |
| "| : : : : |\n", | |
| "|\u001b[43m \u001b[0m: : : : |\n", | |
| "| | : | : |\n", | |
| "|\u001b[34;1mY\u001b[0m| : |\u001b[35mB\u001b[0m: |\n", | |
| "+---------+\n", | |
| " (West)\n", | |
| "+---------+\n", | |
| "|R: | : :G|\n", | |
| "| : : : : |\n", | |
| "| : : : : |\n", | |
| "|\u001b[43m \u001b[0m| : | : |\n", | |
| "|\u001b[34;1mY\u001b[0m| : |\u001b[35mB\u001b[0m: |\n", | |
| "+---------+\n", | |
| " (South)\n", | |
| "+---------+\n", | |
| "|R: | : :G|\n", | |
| "| : : : : |\n", | |
| "| : : : : |\n", | |
| "| | : | : |\n", | |
| "|\u001b[34;1m\u001b[43mY\u001b[0m\u001b[0m| : |\u001b[35mB\u001b[0m: |\n", | |
| "+---------+\n", | |
| " (South)\n", | |
| "+---------+\n", | |
| "|R: | : :G|\n", | |
| "| : : : : |\n", | |
| "| : : : : |\n", | |
| "| | : | : |\n", | |
| "|\u001b[42mY\u001b[0m| : |\u001b[35mB\u001b[0m: |\n", | |
| "+---------+\n", | |
| " (Pickup)\n", | |
| "+---------+\n", | |
| "|R: | : :G|\n", | |
| "| : : : : |\n", | |
| "| : : : : |\n", | |
| "|\u001b[42m_\u001b[0m| : | : |\n", | |
| "|Y| : |\u001b[35mB\u001b[0m: |\n", | |
| "+---------+\n", | |
| " (North)\n", | |
| "+---------+\n", | |
| "|R: | : :G|\n", | |
| "| : : : : |\n", | |
| "|\u001b[42m_\u001b[0m: : : : |\n", | |
| "| | : | : |\n", | |
| "|Y| : |\u001b[35mB\u001b[0m: |\n", | |
| "+---------+\n", | |
| " (North)\n", | |
| "+---------+\n", | |
| "|R: | : :G|\n", | |
| "| : : : : |\n", | |
| "| :\u001b[42m_\u001b[0m: : : |\n", | |
| "| | : | : |\n", | |
| "|Y| : |\u001b[35mB\u001b[0m: |\n", | |
| "+---------+\n", | |
| " (East)\n", | |
| "+---------+\n", | |
| "|R: | : :G|\n", | |
| "| : : : : |\n", | |
| "| : :\u001b[42m_\u001b[0m: : |\n", | |
| "| | : | : |\n", | |
| "|Y| : |\u001b[35mB\u001b[0m: |\n", | |
| "+---------+\n", | |
| " (East)\n", | |
| "+---------+\n", | |
| "|R: | : :G|\n", | |
| "| : : : : |\n", | |
| "| : : :\u001b[42m_\u001b[0m: |\n", | |
| "| | : | : |\n", | |
| "|Y| : |\u001b[35mB\u001b[0m: |\n", | |
| "+---------+\n", | |
| " (East)\n", | |
| "+---------+\n", | |
| "|R: | : :G|\n", | |
| "| : : : : |\n", | |
| "| : : : : |\n", | |
| "| | : |\u001b[42m_\u001b[0m: |\n", | |
| "|Y| : |\u001b[35mB\u001b[0m: |\n", | |
| "+---------+\n", | |
| " (South)\n", | |
| "+---------+\n", | |
| "|R: | : :G|\n", | |
| "| : : : : |\n", | |
| "| : : : : |\n", | |
| "| | : | : |\n", | |
| "|Y| : |\u001b[35m\u001b[42mB\u001b[0m\u001b[0m: |\n", | |
| "+---------+\n", | |
| " (South)\n", | |
| "+---------+\n", | |
| "|R: | : :G|\n", | |
| "| : : : : |\n", | |
| "| : : : : |\n", | |
| "| | : | : |\n", | |
| "|Y| : |\u001b[35m\u001b[34;1m\u001b[43mB\u001b[0m\u001b[0m\u001b[0m: |\n", | |
| "+---------+\n", | |
| " (Dropoff)\n", | |
| "Reward: 8\n" | |
| ], | |
| "name": "stdout" | |
| } | |
| ] | |
| }, | |
| { | |
| "metadata": { | |
| "id": "Rkupk_DTOaeE", | |
| "colab_type": "text" | |
| }, | |
| "cell_type": "markdown", | |
| "source": [ | |
| "### So how does it work? \n", | |
| "\n", | |
| "\n", | |
| "The Q-matrix is initialized with zero's. So initially it starts moving randomly until it hits a state/action with rewards or state/actions with a penalty. For understanding, let's simplify the problem that it needs to go to a certain drop-off position to get a reward. So random moves get no rewards but by luck (brute force enough tries) the state/action is found where a reward is given. So next game the immediate actions preceding this state/action will direct toward it by use of the Q-Matrix. The next iteration the actions before that, etc, etc. In other words, it solves \"the puzzle\" backwards from end-result (drop-off passenger) towards steps to be taken to get there in a iterative fashion.\n", | |
| "\n", | |
| "Note that in case of the Taxi game there is a reward of -1 for each action. So if in a state the algorithm explored eg south which let to no value the Q-matrix is updated to -1 so next iteration (because values were initialized on 0) it will try an action that is not yet tried and still on 0. So also by design it encourages systematic exploration of states and actions\n", | |
| "\n", | |
| "If you put the learning rate on 1 the game also solves. Reason is that there is only one reward (dropoff passenger), so the algorithm will find it whatever learning rate. In case a game has more reward places the learning rate determines if it should prioritize longer term or shorter term rewards" | |
| ] | |
| }, | |
| { | |
| "metadata": { | |
| "id": "6c-K8u3xOaeF", | |
| "colab_type": "code", | |
| "colab": { | |
| "base_uri": "https://localhost:8080/", | |
| "height": 357 | |
| }, | |
| "outputId": "4b7e0b62-776d-4a36-bfac-6115a1295564" | |
| }, | |
| "cell_type": "code", | |
| "source": [ | |
| "NUM_ACTIONS = env.action_space.n\n", | |
| "NUM_STATES = env.observation_space.n\n", | |
| "Q = np.zeros([NUM_STATES, NUM_ACTIONS]) #You could also make this dynamic if you don't know all games states upfront\n", | |
| "gamma = 0.9 # discount factor\n", | |
| "alpha = 0.9 # learning rate\n", | |
| "for episode in range(1,1001):\n", | |
| " done = False\n", | |
| " rew_tot = 0\n", | |
| " obs = env.reset()\n", | |
| " while done != True:\n", | |
| " action = np.argmax(Q[obs]) #choosing the action with the highest Q value \n", | |
| " obs2, rew, done, info = env.step(action) #take the action\n", | |
| " Q[obs,action] += alpha * (rew + gamma * np.max(Q[obs2]) - Q[obs,action]) #Update Q-marix using Bellman equation\n", | |
| " #Q[obs,action] = rew + gamma * np.max(Q[obs2]) # same equation but with learning rate = 1 returns the basic Bellman equation\n", | |
| " rew_tot = rew_tot + rew\n", | |
| " obs = obs2 \n", | |
| " if episode % 50 == 0:\n", | |
| " print('Episode {} Total Reward: {}'.format(episode,rew_tot))" | |
| ], | |
| "execution_count": 12, | |
| "outputs": [ | |
| { | |
| "output_type": "stream", | |
| "text": [ | |
| "Episode 50 Total Reward: -200\n", | |
| "Episode 100 Total Reward: 12\n", | |
| "Episode 150 Total Reward: 1\n", | |
| "Episode 200 Total Reward: 8\n", | |
| "Episode 250 Total Reward: -3\n", | |
| "Episode 300 Total Reward: -1\n", | |
| "Episode 350 Total Reward: 7\n", | |
| "Episode 400 Total Reward: 7\n", | |
| "Episode 450 Total Reward: 9\n", | |
| "Episode 500 Total Reward: 0\n", | |
| "Episode 550 Total Reward: 8\n", | |
| "Episode 600 Total Reward: 8\n", | |
| "Episode 650 Total Reward: 10\n", | |
| "Episode 700 Total Reward: 2\n", | |
| "Episode 750 Total Reward: -1\n", | |
| "Episode 800 Total Reward: 3\n", | |
| "Episode 850 Total Reward: 7\n", | |
| "Episode 900 Total Reward: 13\n", | |
| "Episode 950 Total Reward: -4\n", | |
| "Episode 1000 Total Reward: 9\n" | |
| ], | |
| "name": "stdout" | |
| } | |
| ] | |
| }, | |
| { | |
| "metadata": { | |
| "scrolled": true, | |
| "id": "R8pYQjW2OaeH", | |
| "colab_type": "code", | |
| "colab": { | |
| "base_uri": "https://localhost:8080/", | |
| "height": 1802 | |
| }, | |
| "outputId": "e28525b8-5ea4-4a42-9fff-fb385b7836f2" | |
| }, | |
| "cell_type": "code", | |
| "source": [ | |
| "# Let's see how the algorithm solves the taxi game by following the policy to take actions delivering max value\n", | |
| "\n", | |
| "rew_tot=0\n", | |
| "obs= env.reset()\n", | |
| "env.render()\n", | |
| "done=False\n", | |
| "while done != True: \n", | |
| " action = np.argmax(Q[obs])\n", | |
| " obs, rew, done, info = env.step(action) #take step using selected action\n", | |
| " rew_tot = rew_tot + rew\n", | |
| " env.render()\n", | |
| "#Print the reward of these actions\n", | |
| "print(\"Reward: %r\" % rew_tot) " | |
| ], | |
| "execution_count": 13, | |
| "outputs": [ | |
| { | |
| "output_type": "stream", | |
| "text": [ | |
| "+---------+\n", | |
| "|\u001b[35mR\u001b[0m: | : :G|\n", | |
| "| : : : : |\n", | |
| "| : : : : |\n", | |
| "| | : | : |\n", | |
| "|\u001b[34;1mY\u001b[0m| :\u001b[43m \u001b[0m|B: |\n", | |
| "+---------+\n", | |
| "\n", | |
| "+---------+\n", | |
| "|\u001b[35mR\u001b[0m: | : :G|\n", | |
| "| : : : : |\n", | |
| "| : : : : |\n", | |
| "| | : | : |\n", | |
| "|\u001b[34;1mY\u001b[0m|\u001b[43m \u001b[0m: |B: |\n", | |
| "+---------+\n", | |
| " (West)\n", | |
| "+---------+\n", | |
| "|\u001b[35mR\u001b[0m: | : :G|\n", | |
| "| : : : : |\n", | |
| "| : : : : |\n", | |
| "| |\u001b[43m \u001b[0m: | : |\n", | |
| "|\u001b[34;1mY\u001b[0m| : |B: |\n", | |
| "+---------+\n", | |
| " (North)\n", | |
| "+---------+\n", | |
| "|\u001b[35mR\u001b[0m: | : :G|\n", | |
| "| : : : : |\n", | |
| "| :\u001b[43m \u001b[0m: : : |\n", | |
| "| | : | : |\n", | |
| "|\u001b[34;1mY\u001b[0m| : |B: |\n", | |
| "+---------+\n", | |
| " (North)\n", | |
| "+---------+\n", | |
| "|\u001b[35mR\u001b[0m: | : :G|\n", | |
| "| : : : : |\n", | |
| "|\u001b[43m \u001b[0m: : : : |\n", | |
| "| | : | : |\n", | |
| "|\u001b[34;1mY\u001b[0m| : |B: |\n", | |
| "+---------+\n", | |
| " (West)\n", | |
| "+---------+\n", | |
| "|\u001b[35mR\u001b[0m: | : :G|\n", | |
| "| : : : : |\n", | |
| "| : : : : |\n", | |
| "|\u001b[43m \u001b[0m| : | : |\n", | |
| "|\u001b[34;1mY\u001b[0m| : |B: |\n", | |
| "+---------+\n", | |
| " (South)\n", | |
| "+---------+\n", | |
| "|\u001b[35mR\u001b[0m: | : :G|\n", | |
| "| : : : : |\n", | |
| "| : : : : |\n", | |
| "| | : | : |\n", | |
| "|\u001b[34;1m\u001b[43mY\u001b[0m\u001b[0m| : |B: |\n", | |
| "+---------+\n", | |
| " (South)\n", | |
| "+---------+\n", | |
| "|\u001b[35mR\u001b[0m: | : :G|\n", | |
| "| : : : : |\n", | |
| "| : : : : |\n", | |
| "| | : | : |\n", | |
| "|\u001b[42mY\u001b[0m| : |B: |\n", | |
| "+---------+\n", | |
| " (Pickup)\n", | |
| "+---------+\n", | |
| "|\u001b[35mR\u001b[0m: | : :G|\n", | |
| "| : : : : |\n", | |
| "| : : : : |\n", | |
| "|\u001b[42m_\u001b[0m| : | : |\n", | |
| "|Y| : |B: |\n", | |
| "+---------+\n", | |
| " (North)\n", | |
| "+---------+\n", | |
| "|\u001b[35mR\u001b[0m: | : :G|\n", | |
| "| : : : : |\n", | |
| "|\u001b[42m_\u001b[0m: : : : |\n", | |
| "| | : | : |\n", | |
| "|Y| : |B: |\n", | |
| "+---------+\n", | |
| " (North)\n", | |
| "+---------+\n", | |
| "|\u001b[35mR\u001b[0m: | : :G|\n", | |
| "|\u001b[42m_\u001b[0m: : : : |\n", | |
| "| : : : : |\n", | |
| "| | : | : |\n", | |
| "|Y| : |B: |\n", | |
| "+---------+\n", | |
| " (North)\n", | |
| "+---------+\n", | |
| "|\u001b[35m\u001b[42mR\u001b[0m\u001b[0m: | : :G|\n", | |
| "| : : : : |\n", | |
| "| : : : : |\n", | |
| "| | : | : |\n", | |
| "|Y| : |B: |\n", | |
| "+---------+\n", | |
| " (North)\n", | |
| "+---------+\n", | |
| "|\u001b[35m\u001b[34;1m\u001b[43mR\u001b[0m\u001b[0m\u001b[0m: | : :G|\n", | |
| "| : : : : |\n", | |
| "| : : : : |\n", | |
| "| | : | : |\n", | |
| "|Y| : |B: |\n", | |
| "+---------+\n", | |
| " (Dropoff)\n", | |
| "Reward: 9\n" | |
| ], | |
| "name": "stdout" | |
| } | |
| ] | |
| }, | |
| { | |
| "metadata": { | |
| "id": "h9BVt8Q-OaeJ", | |
| "colab_type": "text" | |
| }, | |
| "cell_type": "markdown", | |
| "source": [ | |
| "# 2. Playing Breakout \n", | |
| "\n", | |
| "You might have played breakdown before (depending on age :)). \n", | |
| "\n", | |
| "<img src=\"images/breakout2.gif\">\n", | |
| "\n", | |
| "In this second part of the lab we are going to play the game, show what a random actions can do and fially train a system to learn how to play. \n", | |
| "\n", | |
| "Solving this problem is based on the following paper by DeepMind: Playing Atari with Deep Reinforcement Learning, which introduces the notion of a Deep Q-Network : https://www.cs.toronto.edu/~vmnih/docs/dqn.pdf\n", | |
| "\n", | |
| "### Lets play \n", | |
| "\n", | |
| "Run the code below to play breakout. Use:\n", | |
| "- \"A\" to move the board left,\n", | |
| "- \"D\" to move it right\n", | |
| "- \"SpaceBar\" to launch a new ball \n", | |
| "\n" | |
| ] | |
| }, | |
| { | |
| "metadata": { | |
| "id": "UK6tQEKUOaeK", | |
| "colab_type": "code", | |
| "colab": {} | |
| }, | |
| "cell_type": "code", | |
| "source": [ | |
| "# Code not working on headless server\n", | |
| "\n", | |
| "#import gym \n", | |
| "#from gym.utils.play import play\n", | |
| "\n", | |
| "#GAME = \"Breakout-v4\"\n", | |
| "#GAME = \"MsPacman-v4\"\n", | |
| "#GAME = \"CartPole-v0\"\n", | |
| "\n", | |
| "#env = gym.make(GAME)\n", | |
| "#play(env)" | |
| ], | |
| "execution_count": 0, | |
| "outputs": [] | |
| }, | |
| { | |
| "metadata": { | |
| "id": "AuGRETAtOaeM", | |
| "colab_type": "text" | |
| }, | |
| "cell_type": "markdown", | |
| "source": [ | |
| "### Lets see the computer play \n", | |
| "\n", | |
| "Now we can play the BreakoutDeterministic-v4 environment using random actions:" | |
| ] | |
| }, | |
| { | |
| "metadata": { | |
| "id": "f6osbdGbTXUP", | |
| "colab_type": "code", | |
| "colab": { | |
| "base_uri": "https://localhost:8080/", | |
| "height": 343 | |
| }, | |
| "outputId": "4d1b4006-392a-438c-ff88-450065a28a2d" | |
| }, | |
| "cell_type": "code", | |
| "source": [ | |
| "!apt install python-opengl\n", | |
| "!apt install ffmpeg\n", | |
| "!apt install xvfb\n", | |
| "!pip3 install pyvirtualdisplay\n", | |
| "\n", | |
| "# Virtual display\n", | |
| "from pyvirtualdisplay import Display\n", | |
| "\n", | |
| "virtual_display = Display(visible=0, size=(1400, 900))\n", | |
| "virtual_display.start()" | |
| ], | |
| "execution_count": 15, | |
| "outputs": [ | |
| { | |
| "output_type": "stream", | |
| "text": [ | |
| "Reading package lists... Done\n", | |
| "Building dependency tree \n", | |
| "Reading state information... Done\n", | |
| "python-opengl is already the newest version (3.1.0+dfsg-1).\n", | |
| "0 upgraded, 0 newly installed, 0 to remove and 10 not upgraded.\n", | |
| "Reading package lists... Done\n", | |
| "Building dependency tree \n", | |
| "Reading state information... Done\n", | |
| "ffmpeg is already the newest version (7:3.4.4-0ubuntu0.18.04.1).\n", | |
| "0 upgraded, 0 newly installed, 0 to remove and 10 not upgraded.\n", | |
| "Reading package lists... Done\n", | |
| "Building dependency tree \n", | |
| "Reading state information... Done\n", | |
| "xvfb is already the newest version (2:1.19.6-1ubuntu4.2).\n", | |
| "0 upgraded, 0 newly installed, 0 to remove and 10 not upgraded.\n", | |
| "Requirement already satisfied: pyvirtualdisplay in /usr/local/lib/python3.6/dist-packages (0.2.1)\n", | |
| "Requirement already satisfied: EasyProcess in /usr/local/lib/python3.6/dist-packages (from pyvirtualdisplay) (0.2.5)\n" | |
| ], | |
| "name": "stdout" | |
| }, | |
| { | |
| "output_type": "execute_result", | |
| "data": { | |
| "text/plain": [ | |
| "<Display cmd_param=['Xvfb', '-br', '-nolisten', 'tcp', '-screen', '0', '1400x900x24', ':1005'] cmd=['Xvfb', '-br', '-nolisten', 'tcp', '-screen', '0', '1400x900x24', ':1005'] oserror=None return_code=None stdout=\"None\" stderr=\"None\" timeout_happened=False>" | |
| ] | |
| }, | |
| "metadata": { | |
| "tags": [] | |
| }, | |
| "execution_count": 15 | |
| } | |
| ] | |
| }, | |
| { | |
| "metadata": { | |
| "id": "4i1mbORHT7So", | |
| "colab_type": "code", | |
| "colab": { | |
| "base_uri": "https://localhost:8080/", | |
| "height": 1717 | |
| }, | |
| "outputId": "f04a9fcf-bdc1-4a57-a06f-80d112a286b5" | |
| }, | |
| "cell_type": "code", | |
| "source": [ | |
| "EPISODE_CP = 100\n", | |
| "\n", | |
| "import gym\n", | |
| "from gym import wrappers\n", | |
| "\n", | |
| "GAME = \"Breakout-v4\"\n", | |
| "env = gym.make(GAME)\n", | |
| "env = wrappers.Monitor(env, f\"/tmp/{GAME}\", force=True)\n", | |
| "\n", | |
| "for episode in range(EPISODE_CP):\n", | |
| " observation = env.reset()\n", | |
| " step = 0\n", | |
| " total_reward = 0\n", | |
| "\n", | |
| " while True:\n", | |
| " step += 1\n", | |
| " env.render()\n", | |
| " action = env.action_space.sample()\n", | |
| " observation, reward, done, info = env.step(action)\n", | |
| " total_reward += reward\n", | |
| " if done:\n", | |
| " print(\"Episode: {0},\\tSteps: {1},\\tscore: {2}\"\n", | |
| " .format(episode, step, total_reward)\n", | |
| " )\n", | |
| " break\n", | |
| "env.close()" | |
| ], | |
| "execution_count": 18, | |
| "outputs": [ | |
| { | |
| "output_type": "stream", | |
| "text": [ | |
| "Episode: 0,\tSteps: 176,\tscore: 0.0\n", | |
| "Episode: 1,\tSteps: 168,\tscore: 0.0\n", | |
| "Episode: 2,\tSteps: 274,\tscore: 2.0\n", | |
| "Episode: 3,\tSteps: 281,\tscore: 2.0\n", | |
| "Episode: 4,\tSteps: 174,\tscore: 0.0\n", | |
| "Episode: 5,\tSteps: 310,\tscore: 2.0\n", | |
| "Episode: 6,\tSteps: 274,\tscore: 2.0\n", | |
| "Episode: 7,\tSteps: 279,\tscore: 2.0\n", | |
| "Episode: 8,\tSteps: 169,\tscore: 0.0\n", | |
| "Episode: 9,\tSteps: 183,\tscore: 0.0\n", | |
| "Episode: 10,\tSteps: 313,\tscore: 2.0\n", | |
| "Episode: 11,\tSteps: 205,\tscore: 1.0\n", | |
| "Episode: 12,\tSteps: 160,\tscore: 0.0\n", | |
| "Episode: 13,\tSteps: 229,\tscore: 1.0\n", | |
| "Episode: 14,\tSteps: 174,\tscore: 0.0\n", | |
| "Episode: 15,\tSteps: 178,\tscore: 0.0\n", | |
| "Episode: 16,\tSteps: 238,\tscore: 1.0\n", | |
| "Episode: 17,\tSteps: 314,\tscore: 2.0\n", | |
| "Episode: 18,\tSteps: 194,\tscore: 0.0\n", | |
| "Episode: 19,\tSteps: 276,\tscore: 2.0\n", | |
| "Episode: 20,\tSteps: 336,\tscore: 3.0\n", | |
| "Episode: 21,\tSteps: 275,\tscore: 2.0\n", | |
| "Episode: 22,\tSteps: 299,\tscore: 2.0\n", | |
| "Episode: 23,\tSteps: 208,\tscore: 1.0\n", | |
| "Episode: 24,\tSteps: 354,\tscore: 3.0\n", | |
| "Episode: 25,\tSteps: 177,\tscore: 0.0\n", | |
| "Episode: 26,\tSteps: 171,\tscore: 0.0\n", | |
| "Episode: 27,\tSteps: 238,\tscore: 1.0\n", | |
| "Episode: 28,\tSteps: 240,\tscore: 1.0\n", | |
| "Episode: 29,\tSteps: 211,\tscore: 1.0\n", | |
| "Episode: 30,\tSteps: 216,\tscore: 1.0\n", | |
| "Episode: 31,\tSteps: 383,\tscore: 4.0\n", | |
| "Episode: 32,\tSteps: 169,\tscore: 0.0\n", | |
| "Episode: 33,\tSteps: 216,\tscore: 1.0\n", | |
| "Episode: 34,\tSteps: 176,\tscore: 0.0\n", | |
| "Episode: 35,\tSteps: 214,\tscore: 1.0\n", | |
| "Episode: 36,\tSteps: 270,\tscore: 2.0\n", | |
| "Episode: 37,\tSteps: 162,\tscore: 0.0\n", | |
| "Episode: 38,\tSteps: 249,\tscore: 1.0\n", | |
| "Episode: 39,\tSteps: 319,\tscore: 2.0\n", | |
| "Episode: 40,\tSteps: 283,\tscore: 2.0\n", | |
| "Episode: 41,\tSteps: 172,\tscore: 0.0\n", | |
| "Episode: 42,\tSteps: 300,\tscore: 3.0\n", | |
| "Episode: 43,\tSteps: 182,\tscore: 0.0\n", | |
| "Episode: 44,\tSteps: 306,\tscore: 2.0\n", | |
| "Episode: 45,\tSteps: 162,\tscore: 0.0\n", | |
| "Episode: 46,\tSteps: 176,\tscore: 0.0\n", | |
| "Episode: 47,\tSteps: 184,\tscore: 0.0\n", | |
| "Episode: 48,\tSteps: 222,\tscore: 1.0\n", | |
| "Episode: 49,\tSteps: 237,\tscore: 1.0\n", | |
| "Episode: 50,\tSteps: 287,\tscore: 2.0\n", | |
| "Episode: 51,\tSteps: 292,\tscore: 2.0\n", | |
| "Episode: 52,\tSteps: 372,\tscore: 4.0\n", | |
| "Episode: 53,\tSteps: 186,\tscore: 0.0\n", | |
| "Episode: 54,\tSteps: 351,\tscore: 3.0\n", | |
| "Episode: 55,\tSteps: 178,\tscore: 0.0\n", | |
| "Episode: 56,\tSteps: 177,\tscore: 0.0\n", | |
| "Episode: 57,\tSteps: 206,\tscore: 1.0\n", | |
| "Episode: 58,\tSteps: 276,\tscore: 2.0\n", | |
| "Episode: 59,\tSteps: 179,\tscore: 0.0\n", | |
| "Episode: 60,\tSteps: 167,\tscore: 0.0\n", | |
| "Episode: 61,\tSteps: 233,\tscore: 1.0\n", | |
| "Episode: 62,\tSteps: 226,\tscore: 1.0\n", | |
| "Episode: 63,\tSteps: 171,\tscore: 0.0\n", | |
| "Episode: 64,\tSteps: 221,\tscore: 1.0\n", | |
| "Episode: 65,\tSteps: 244,\tscore: 1.0\n", | |
| "Episode: 66,\tSteps: 307,\tscore: 3.0\n", | |
| "Episode: 67,\tSteps: 203,\tscore: 1.0\n", | |
| "Episode: 68,\tSteps: 163,\tscore: 0.0\n", | |
| "Episode: 69,\tSteps: 164,\tscore: 0.0\n", | |
| "Episode: 70,\tSteps: 162,\tscore: 0.0\n", | |
| "Episode: 71,\tSteps: 258,\tscore: 2.0\n", | |
| "Episode: 72,\tSteps: 177,\tscore: 0.0\n", | |
| "Episode: 73,\tSteps: 204,\tscore: 1.0\n", | |
| "Episode: 74,\tSteps: 266,\tscore: 2.0\n", | |
| "Episode: 75,\tSteps: 174,\tscore: 0.0\n", | |
| "Episode: 76,\tSteps: 182,\tscore: 0.0\n", | |
| "Episode: 77,\tSteps: 178,\tscore: 0.0\n", | |
| "Episode: 78,\tSteps: 282,\tscore: 2.0\n", | |
| "Episode: 79,\tSteps: 172,\tscore: 0.0\n", | |
| "Episode: 80,\tSteps: 211,\tscore: 1.0\n", | |
| "Episode: 81,\tSteps: 264,\tscore: 1.0\n", | |
| "Episode: 82,\tSteps: 209,\tscore: 1.0\n", | |
| "Episode: 83,\tSteps: 168,\tscore: 0.0\n", | |
| "Episode: 84,\tSteps: 235,\tscore: 1.0\n", | |
| "Episode: 85,\tSteps: 280,\tscore: 2.0\n", | |
| "Episode: 86,\tSteps: 306,\tscore: 2.0\n", | |
| "Episode: 87,\tSteps: 194,\tscore: 0.0\n", | |
| "Episode: 88,\tSteps: 234,\tscore: 1.0\n", | |
| "Episode: 89,\tSteps: 175,\tscore: 0.0\n", | |
| "Episode: 90,\tSteps: 359,\tscore: 3.0\n", | |
| "Episode: 91,\tSteps: 246,\tscore: 1.0\n", | |
| "Episode: 92,\tSteps: 172,\tscore: 0.0\n", | |
| "Episode: 93,\tSteps: 348,\tscore: 3.0\n", | |
| "Episode: 94,\tSteps: 263,\tscore: 2.0\n", | |
| "Episode: 95,\tSteps: 239,\tscore: 1.0\n", | |
| "Episode: 96,\tSteps: 414,\tscore: 4.0\n", | |
| "Episode: 97,\tSteps: 174,\tscore: 0.0\n", | |
| "Episode: 98,\tSteps: 232,\tscore: 1.0\n", | |
| "Episode: 99,\tSteps: 242,\tscore: 1.0\n" | |
| ], | |
| "name": "stdout" | |
| } | |
| ] | |
| }, | |
| { | |
| "metadata": { | |
| "id": "PnuVCapMUeng", | |
| "colab_type": "code", | |
| "colab": { | |
| "base_uri": "https://localhost:8080/", | |
| "height": 221 | |
| }, | |
| "outputId": "dd15f6e4-b02f-46dd-e137-94563d8bb40a" | |
| }, | |
| "cell_type": "code", | |
| "source": [ | |
| "!ls /tmp/Breakout-v4/" | |
| ], | |
| "execution_count": 19, | |
| "outputs": [ | |
| { | |
| "output_type": "stream", | |
| "text": [ | |
| "openaigym.episode_batch.2.1288.stats.json\n", | |
| "openaigym.manifest.2.1288.manifest.json\n", | |
| "openaigym.video.2.1288.video000000.meta.json\n", | |
| "openaigym.video.2.1288.video000000.mp4\n", | |
| "openaigym.video.2.1288.video000001.meta.json\n", | |
| "openaigym.video.2.1288.video000001.mp4\n", | |
| "openaigym.video.2.1288.video000008.meta.json\n", | |
| "openaigym.video.2.1288.video000008.mp4\n", | |
| "openaigym.video.2.1288.video000027.meta.json\n", | |
| "openaigym.video.2.1288.video000027.mp4\n", | |
| "openaigym.video.2.1288.video000064.meta.json\n", | |
| "openaigym.video.2.1288.video000064.mp4\n" | |
| ], | |
| "name": "stdout" | |
| } | |
| ] | |
| }, | |
| { | |
| "metadata": { | |
| "id": "ifnTOUGWaCWu", | |
| "colab_type": "text" | |
| }, | |
| "cell_type": "markdown", | |
| "source": [ | |
| "Insert relevant filename below to view video" | |
| ] | |
| }, | |
| { | |
| "metadata": { | |
| "id": "NbNIm06kUJ6I", | |
| "colab_type": "code", | |
| "colab": { | |
| "base_uri": "https://localhost:8080/", | |
| "height": 282 | |
| }, | |
| "outputId": "1405782c-a060-48a3-f942-5753905c0572" | |
| }, | |
| "cell_type": "code", | |
| "source": [ | |
| "ipython_show_video(f\"/tmp/{GAME}/openaigym.video.0.940.video000000.mp4\")" | |
| ], | |
| "execution_count": 20, | |
| "outputs": [ | |
| { | |
| "output_type": "error", | |
| "ename": "NameError", | |
| "evalue": "ignored", | |
| "traceback": [ | |
| "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", | |
| "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", | |
| "\u001b[0;32m<ipython-input-20-fd6bf4bc6428>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mipython_show_video\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34mf\"/tmp/{GAME}/openaigym.video.0.940.video000000.mp4\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", | |
| "\u001b[0;32m<ipython-input-4-84fb0f8199b0>\u001b[0m in \u001b[0;36mipython_show_video\u001b[0;34m(path)\u001b[0m\n\u001b[1;32m 8\u001b[0m \"\"\"\n\u001b[1;32m 9\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mos\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpath\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0misfile\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mpath\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 10\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mNameError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"Cannot access: {}\"\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mpath\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 11\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 12\u001b[0m \u001b[0mvideo\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mio\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mopen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mpath\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'r+b'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mread\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", | |
| "\u001b[0;31mNameError\u001b[0m: Cannot access: /tmp/Breakout-v4/openaigym.video.0.940.video000000.mp4" | |
| ] | |
| } | |
| ] | |
| }, | |
| { | |
| "metadata": { | |
| "id": "V6l0KS-2OaeO", | |
| "colab_type": "code", | |
| "colab": {} | |
| }, | |
| "cell_type": "code", | |
| "source": [ | |
| "# original code not working on headless server\n", | |
| "\n", | |
| "# Import the gym module\n", | |
| "#import gym\n", | |
| "\n", | |
| "\n", | |
| "# Create a breakout environment\n", | |
| "#env = gym.make('BreakoutDeterministic-v4')\n", | |
| "#env.monitor.start('cartpole-experiment-1', force=True)\n", | |
| "\n", | |
| "\n", | |
| "# Reset it, returns the starting frame\n", | |
| "#frame = env.reset()\n", | |
| "# Render\n", | |
| "#env.render()\n", | |
| "\n", | |
| "#is_done = False\n", | |
| "#while not is_done:\n", | |
| " # Perform a random action, returns the new frame, reward and whether the game is over\n", | |
| "# frame, reward, is_done, _ = env.step(env.action_space.sample())\n" | |
| ], | |
| "execution_count": 0, | |
| "outputs": [] | |
| }, | |
| { | |
| "metadata": { | |
| "id": "b3QtdNP4OaeR", | |
| "colab_type": "text" | |
| }, | |
| "cell_type": "markdown", | |
| "source": [ | |
| "### Lets create our model \n", | |
| "\n", | |
| "We start by importing the necessary modules as usual but also Keras as we are going to write our simple Neural Network in Keras. " | |
| ] | |
| }, | |
| { | |
| "metadata": { | |
| "id": "8UopcwQcOaeT", | |
| "colab_type": "code", | |
| "colab": {} | |
| }, | |
| "cell_type": "code", | |
| "source": [ | |
| "import gym\n", | |
| "import random\n", | |
| "import numpy as np\n", | |
| "import tensorflow as tf\n", | |
| "from collections import deque\n", | |
| "from skimage.color import rgb2gray\n", | |
| "from skimage.transform import resize\n", | |
| "from keras.models import Sequential\n", | |
| "from keras.optimizers import RMSprop\n", | |
| "from keras.layers import Dense, Flatten\n", | |
| "from keras.layers.convolutional import Conv2D\n", | |
| "from keras import backend as K" | |
| ], | |
| "execution_count": 0, | |
| "outputs": [] | |
| }, | |
| { | |
| "metadata": { | |
| "id": "r1xxg-8IOaeY", | |
| "colab_type": "text" | |
| }, | |
| "cell_type": "markdown", | |
| "source": [ | |
| "Work on the images. The initial image size is 210x160x3 we need to transform it so we keep less values in memory. We would resize it to a 84x84 grayscale image. " | |
| ] | |
| }, | |
| { | |
| "metadata": { | |
| "id": "3meQQDb9OaeZ", | |
| "colab_type": "code", | |
| "colab": {} | |
| }, | |
| "cell_type": "code", | |
| "source": [ | |
| "# 210*160*3(color) --> 84*84(mono)\n", | |
| "# float --> integer (to reduce the size of replay memory)\n", | |
| "def pre_processing(observe):\n", | |
| " processed_observe = np.uint8(\n", | |
| " resize(rgb2gray(observe), (84, 84), mode='constant') * 255)\n", | |
| " return processed_observe" | |
| ], | |
| "execution_count": 0, | |
| "outputs": [] | |
| }, | |
| { | |
| "metadata": { | |
| "id": "-_K6TqwkOaeb", | |
| "colab_type": "text" | |
| }, | |
| "cell_type": "markdown", | |
| "source": [ | |
| "### Creating the Agent \n", | |
| "\n", | |
| "In the Taxi exmaple we have loaded the Agent class already from rl.agents.dqn. For Breakout lets go a bit further and create the class ourselves. For this we would need to have the following declared. \n", | |
| "* hyperparameters\n", | |
| " * episodes - a number of games we want the agent to play.\n", | |
| " * epsilon_decay_step - aka decay or discount rate, to calculate the future discounted reward.\n", | |
| " * epsilon - aka exploration rate, this is the rate in which an agent randomly decides its action rather than prediction.\n", | |
| " * epsilon_decay - we want to decrease the number of explorations as it gets good at playing games.\n", | |
| " * epsilon_start - we want the agent to explore at least this amount.\n", | |
| " * learning_rate - Determines how much neural net learns in each iteration.\n", | |
| "\n", | |
| "* functions\n", | |
| " * optimizer - function that write how to optimize the cost function of choice \n", | |
| " * build_model - the convolutional neural network of choice build in Keras to approximate the Q function. \n", | |
| " * get_action - return the nexxt action to be performed. either random or predicted\n", | |
| " * remember - One of the challenges for DQN is that neural network used in the algorithm tends to forget the previous experiences as it overwrites them with new experiences. So we need a list of previous experiences and observations to re-train the model with the previous experiences. We will call this array of experiences memory and use remember() function to append state, action, reward, and next state to the memory.\n", | |
| " * train_replay - A method that trains the neural net with experiences in the memory. It is done also based on mini batches. \n", | |
| " * save_model - Saves the model at certain numvber of steps. \n", | |
| " * load_model - Loads a model that has been previouly trained. \n", | |
| "\n" | |
| ] | |
| }, | |
| { | |
| "metadata": { | |
| "id": "EmBvT0bTOaec", | |
| "colab_type": "code", | |
| "colab": {} | |
| }, | |
| "cell_type": "code", | |
| "source": [ | |
| "EPISODES = 10\n", | |
| "class DQNAgent:\n", | |
| " def __init__(self, action_size):\n", | |
| " self.render = False\n", | |
| " self.load_model = False\n", | |
| " # environment settings\n", | |
| " self.state_size = (84, 84, 4)\n", | |
| " self.action_size = action_size\n", | |
| " # parameters about epsilon\n", | |
| " self.epsilon = 1.\n", | |
| " self.epsilon_start, self.epsilon_end = 1.0, 0.1\n", | |
| " self.exploration_steps = 10.\n", | |
| " self.epsilon_decay_step = (self.epsilon_start - self.epsilon_end) \\\n", | |
| " / self.exploration_steps\n", | |
| " # parameters about training\n", | |
| " self.batch_size = 32\n", | |
| " self.train_start = 50000\n", | |
| " self.update_target_rate = 10000\n", | |
| " self.discount_factor = 0.99\n", | |
| " self.memory = deque(maxlen=400000)\n", | |
| " self.no_op_steps = 30\n", | |
| " # build model\n", | |
| " self.model = self.build_model()\n", | |
| " self.target_model = self.build_model()\n", | |
| " self.update_target_model()\n", | |
| "\n", | |
| " self.optimizer = self.optimizer()\n", | |
| "\n", | |
| " self.sess = tf.InteractiveSession()\n", | |
| " K.set_session(self.sess)\n", | |
| "\n", | |
| " self.avg_q_max, self.avg_loss = 0, 0\n", | |
| " self.summary_placeholders, self.update_ops, self.summary_op = \\\n", | |
| " self.setup_summary()\n", | |
| " self.summary_writer = tf.summary.FileWriter(\n", | |
| " 'summary/breakout_dqn', self.sess.graph)\n", | |
| " self.sess.run(tf.global_variables_initializer())\n", | |
| "\n", | |
| " if self.load_model:\n", | |
| " self.model.load_weights(\"./save_model/breakout_dqn.h5\")\n", | |
| "\n", | |
| " # if the error is in [-1, 1], then the cost is quadratic to the error\n", | |
| " # But outside the interval, the cost is linear to the error\n", | |
| " def optimizer(self):\n", | |
| " a = K.placeholder(shape=(None,), dtype='int32')\n", | |
| " y = K.placeholder(shape=(None,), dtype='float32')\n", | |
| "\n", | |
| " py_x = self.model.output\n", | |
| "\n", | |
| " a_one_hot = K.one_hot(a, self.action_size)\n", | |
| " q_value = K.sum(py_x * a_one_hot, axis=1)\n", | |
| " error = K.abs(y - q_value)\n", | |
| "\n", | |
| " quadratic_part = K.clip(error, 0.0, 1.0)\n", | |
| " linear_part = error - quadratic_part\n", | |
| " loss = K.mean(0.5 * K.square(quadratic_part) + linear_part)\n", | |
| "\n", | |
| " optimizer = RMSprop(lr=0.00025, epsilon=0.01)\n", | |
| " updates = optimizer.get_updates(self.model.trainable_weights, [], loss)\n", | |
| " train = K.function([self.model.input, a, y], [loss], updates=updates)\n", | |
| "\n", | |
| " return train\n", | |
| "\n", | |
| " # approximate Q function using Convolution Neural Network\n", | |
| " # state is input and Q Value of each action is output of network\n", | |
| " def build_model(self):\n", | |
| " model = Sequential()\n", | |
| " model.add(Conv2D(32, (8, 8), strides=(4, 4), activation='relu',\n", | |
| " input_shape=self.state_size))\n", | |
| " model.add(Conv2D(64, (4, 4), strides=(2, 2), activation='relu'))\n", | |
| " model.add(Conv2D(64, (3, 3), strides=(1, 1), activation='relu'))\n", | |
| " model.add(Flatten())\n", | |
| " model.add(Dense(512, activation='relu'))\n", | |
| " model.add(Dense(self.action_size))\n", | |
| " model.summary()\n", | |
| " return model\n", | |
| "\n", | |
| " # after some time interval update the target model to be same with model\n", | |
| " def update_target_model(self):\n", | |
| " self.target_model.set_weights(self.model.get_weights())\n", | |
| "\n", | |
| " # get action from model using epsilon-greedy policy\n", | |
| " def get_action(self, history):\n", | |
| " history = np.float32(history / 255.0)\n", | |
| " if np.random.rand() <= self.epsilon:\n", | |
| " return random.randrange(self.action_size)\n", | |
| " else:\n", | |
| " q_value = self.model.predict(history)\n", | |
| " return np.argmax(q_value[0])\n", | |
| "\n", | |
| " # save sample <s,a,r,s'> to the replay memory\n", | |
| " def remember(self, history, action, reward, next_history, dead):\n", | |
| " self.memory.append((history, action, reward, next_history, dead))\n", | |
| "\n", | |
| " # pick samples randomly from replay memory (with batch_size)\n", | |
| " def train_replay(self):\n", | |
| " if len(self.memory) < self.train_start:\n", | |
| " return\n", | |
| " if self.epsilon > self.epsilon_end:\n", | |
| " self.epsilon -= self.epsilon_decay_step\n", | |
| "\n", | |
| " mini_batch = random.sample(self.memory, self.batch_size)\n", | |
| "\n", | |
| " history = np.zeros((self.batch_size, self.state_size[0],\n", | |
| " self.state_size[1], self.state_size[2]))\n", | |
| " next_history = np.zeros((self.batch_size, self.state_size[0],\n", | |
| " self.state_size[1], self.state_size[2]))\n", | |
| " target = np.zeros((self.batch_size,))\n", | |
| " action, reward, dead = [], [], []\n", | |
| "\n", | |
| " for i in range(self.batch_size):\n", | |
| " history[i] = np.float32(mini_batch[i][0] / 255.)\n", | |
| " next_history[i] = np.float32(mini_batch[i][3] / 255.)\n", | |
| " action.append(mini_batch[i][1])\n", | |
| " reward.append(mini_batch[i][2])\n", | |
| " dead.append(mini_batch[i][4])\n", | |
| "\n", | |
| " target_value = self.target_model.predict(next_history)\n", | |
| "\n", | |
| " # like Q Learning, get maximum Q value at s'\n", | |
| " # But from target model\n", | |
| " for i in range(self.batch_size):\n", | |
| " if dead[i]:\n", | |
| " target[i] = reward[i]\n", | |
| " else:\n", | |
| " target[i] = reward[i] + self.discount_factor * \\\n", | |
| " np.amax(target_value[i])\n", | |
| "\n", | |
| " loss = self.optimizer([history, action, target])\n", | |
| " self.avg_loss += loss[0]\n", | |
| "\n", | |
| " def save_model(self, name):\n", | |
| " self.model.save_weights(name)\n", | |
| " \n", | |
| " def load_model(self, filename):\n", | |
| " self.model.load_weights(filename)\n", | |
| "\n", | |
| " # make summary operators for tensorboard\n", | |
| " def setup_summary(self):\n", | |
| " episode_total_reward = tf.Variable(0.)\n", | |
| " episode_avg_max_q = tf.Variable(0.)\n", | |
| " episode_duration = tf.Variable(0.)\n", | |
| " episode_avg_loss = tf.Variable(0.)\n", | |
| "\n", | |
| " tf.summary.scalar('Total_Reward/Episode', episode_total_reward)\n", | |
| " tf.summary.scalar('Average_Max_Q/Episode', episode_avg_max_q)\n", | |
| " tf.summary.scalar('Duration/Episode', episode_duration)\n", | |
| " tf.summary.scalar('Average_Loss/Episode', episode_avg_loss)\n", | |
| "\n", | |
| " summary_vars = [episode_total_reward, episode_avg_max_q,\n", | |
| " episode_duration, episode_avg_loss]\n", | |
| " summary_placeholders = [tf.placeholder(tf.float32) for _ in\n", | |
| " range(len(summary_vars))]\n", | |
| " update_ops = [summary_vars[i].assign(summary_placeholders[i]) for i in\n", | |
| " range(len(summary_vars))]\n", | |
| " summary_op = tf.summary.merge_all()\n", | |
| " return summary_placeholders, update_ops, summary_op\n", | |
| "\n" | |
| ], | |
| "execution_count": 0, | |
| "outputs": [] | |
| }, | |
| { | |
| "metadata": { | |
| "id": "0cvn2kq6Oaee", | |
| "colab_type": "text" | |
| }, | |
| "cell_type": "markdown", | |
| "source": [ | |
| "### TRaining the agent \n", | |
| "\n", | |
| "Now that our agent is declared lets try and train it. WE are going to play our fixed number of Episodes (attention it was fixed above). Every 100 episodes (see the last piece of code) we are going to save the model so we can load it at a later stage). " | |
| ] | |
| }, | |
| { | |
| "metadata": { | |
| "id": "APN-S57_WL82", | |
| "colab_type": "code", | |
| "colab": {} | |
| }, | |
| "cell_type": "code", | |
| "source": [ | |
| "!mkdir /tmp/save_model/" | |
| ], | |
| "execution_count": 0, | |
| "outputs": [] | |
| }, | |
| { | |
| "metadata": { | |
| "id": "5Odr3JaAOaef", | |
| "colab_type": "code", | |
| "colab": { | |
| "base_uri": "https://localhost:8080/", | |
| "height": 935 | |
| }, | |
| "outputId": "2b15dc2f-1696-40ee-ab4e-0306583ed652" | |
| }, | |
| "cell_type": "code", | |
| "source": [ | |
| "if __name__ == \"__main__\":\n", | |
| " from gym import wrappers\n", | |
| " \n", | |
| " # In case of BreakoutDeterministic-v3, always skip 4 frames\n", | |
| " # Deterministic-v4 version use 4 actions\n", | |
| " env = gym.make('BreakoutDeterministic-v4')\n", | |
| " \n", | |
| "\n", | |
| " # add monitor wrapper for headless server\n", | |
| " env = wrappers.Monitor(env, f\"/tmp/{GAME}\", force=True)\n", | |
| " \n", | |
| " agent = DQNAgent(action_size=3)\n", | |
| "\n", | |
| " scores, episodes, global_step = [], [], 0\n", | |
| "\n", | |
| " for e in range(EPISODES):\n", | |
| " done = False\n", | |
| " dead = False\n", | |
| " # 1 episode = 5 lives\n", | |
| " step, score, start_life = 0, 0, 5\n", | |
| " observe = env.reset()\n", | |
| "\n", | |
| " # this is one of DeepMind's idea.\n", | |
| " # just do nothing at the start of episode to avoid sub-optimal\n", | |
| " for _ in range(random.randint(1, agent.no_op_steps)):\n", | |
| " observe, _, _, _ = env.step(1)\n", | |
| "\n", | |
| " # At start of episode, there is no preceding frame\n", | |
| " # So just copy initial states to make history\n", | |
| " state = pre_processing(observe)\n", | |
| " history = np.stack((state, state, state, state), axis=2)\n", | |
| " history = np.reshape([history], (1, 84, 84, 4))\n", | |
| "\n", | |
| " while not done:\n", | |
| " if agent.render:\n", | |
| " env.render()\n", | |
| " global_step += 1\n", | |
| " step += 1\n", | |
| "\n", | |
| " # get action for the current history and go one step in environment\n", | |
| " action = agent.get_action(history)\n", | |
| " # change action to real_action\n", | |
| " if action == 0:\n", | |
| " real_action = 1\n", | |
| " elif action == 1:\n", | |
| " real_action = 2\n", | |
| " else:\n", | |
| " real_action = 3\n", | |
| "\n", | |
| " observe, reward, done, info = env.step(real_action)\n", | |
| " # pre-process the observation --> history\n", | |
| " next_state = pre_processing(observe)\n", | |
| " next_state = np.reshape([next_state], (1, 84, 84, 1))\n", | |
| " next_history = np.append(next_state, history[:, :, :, :3], axis=3)\n", | |
| "\n", | |
| " agent.avg_q_max += np.amax(\n", | |
| " agent.model.predict(np.float32(history / 255.))[0])\n", | |
| "\n", | |
| " # if the agent missed ball, agent is dead --> episode is not over\n", | |
| " if start_life > info['ale.lives']:\n", | |
| " dead = True\n", | |
| " start_life = info['ale.lives']\n", | |
| "\n", | |
| " reward = np.clip(reward, -1., 1.)\n", | |
| "\n", | |
| " # save the sample <s, a, r, s'> to the replay memory\n", | |
| " agent.remember(history, action, reward, next_history, dead)\n", | |
| " # every some time interval, train model\n", | |
| " agent.train_replay()\n", | |
| " # update the target model with model\n", | |
| " if global_step % agent.update_target_rate == 0:\n", | |
| " agent.update_target_model()\n", | |
| "\n", | |
| " score += reward\n", | |
| "\n", | |
| " # if agent is dead, then reset the history\n", | |
| " if dead:\n", | |
| " dead = False\n", | |
| " else:\n", | |
| " history = next_history\n", | |
| "\n", | |
| " # if done, plot the score over episodes\n", | |
| " if done:\n", | |
| " if global_step > agent.train_start:\n", | |
| " stats = [score, agent.avg_q_max / float(step), step,\n", | |
| " agent.avg_loss / float(step)]\n", | |
| " for i in range(len(stats)):\n", | |
| " agent.sess.run(agent.update_ops[i], feed_dict={\n", | |
| " agent.summary_placeholders[i]: float(stats[i])\n", | |
| " })\n", | |
| " summary_str = agent.sess.run(agent.summary_op)\n", | |
| " agent.summary_writer.add_summary(summary_str, e + 1)\n", | |
| "\n", | |
| " print(\"episode:\", e, \" score:\", score, \" memory length:\",\n", | |
| " len(agent.memory), \" epsilon:\", agent.epsilon,\n", | |
| " \" global_step:\", global_step, \" average_q:\",\n", | |
| " agent.avg_q_max / float(step), \" average loss:\",\n", | |
| " agent.avg_loss / float(step))\n", | |
| "\n", | |
| " agent.avg_q_max, agent.avg_loss = 0, 0\n", | |
| "\n", | |
| " if e % 100 == 0:\n", | |
| " agent.model.save_weights(\"/tmp/save_model/breakout_dqn.h5\")" | |
| ], | |
| "execution_count": 24, | |
| "outputs": [ | |
| { | |
| "output_type": "stream", | |
| "text": [ | |
| "WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/op_def_library.py:263: colocate_with (from tensorflow.python.framework.ops) is deprecated and will be removed in a future version.\n", | |
| "Instructions for updating:\n", | |
| "Colocations handled automatically by placer.\n", | |
| "_________________________________________________________________\n", | |
| "Layer (type) Output Shape Param # \n", | |
| "=================================================================\n", | |
| "conv2d_1 (Conv2D) (None, 20, 20, 32) 8224 \n", | |
| "_________________________________________________________________\n", | |
| "conv2d_2 (Conv2D) (None, 9, 9, 64) 32832 \n", | |
| "_________________________________________________________________\n", | |
| "conv2d_3 (Conv2D) (None, 7, 7, 64) 36928 \n", | |
| "_________________________________________________________________\n", | |
| "flatten_1 (Flatten) (None, 3136) 0 \n", | |
| "_________________________________________________________________\n", | |
| "dense_1 (Dense) (None, 512) 1606144 \n", | |
| "_________________________________________________________________\n", | |
| "dense_2 (Dense) (None, 3) 1539 \n", | |
| "=================================================================\n", | |
| "Total params: 1,685,667\n", | |
| "Trainable params: 1,685,667\n", | |
| "Non-trainable params: 0\n", | |
| "_________________________________________________________________\n", | |
| "_________________________________________________________________\n", | |
| "Layer (type) Output Shape Param # \n", | |
| "=================================================================\n", | |
| "conv2d_4 (Conv2D) (None, 20, 20, 32) 8224 \n", | |
| "_________________________________________________________________\n", | |
| "conv2d_5 (Conv2D) (None, 9, 9, 64) 32832 \n", | |
| "_________________________________________________________________\n", | |
| "conv2d_6 (Conv2D) (None, 7, 7, 64) 36928 \n", | |
| "_________________________________________________________________\n", | |
| "flatten_2 (Flatten) (None, 3136) 0 \n", | |
| "_________________________________________________________________\n", | |
| "dense_3 (Dense) (None, 512) 1606144 \n", | |
| "_________________________________________________________________\n", | |
| "dense_4 (Dense) (None, 3) 1539 \n", | |
| "=================================================================\n", | |
| "Total params: 1,685,667\n", | |
| "Trainable params: 1,685,667\n", | |
| "Non-trainable params: 0\n", | |
| "_________________________________________________________________\n", | |
| "WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/tensorflow/python/ops/math_ops.py:3066: to_int32 (from tensorflow.python.ops.math_ops) is deprecated and will be removed in a future version.\n", | |
| "Instructions for updating:\n", | |
| "Use tf.cast instead.\n", | |
| "episode: 0 score: 0.0 memory length: 115 epsilon: 1.0 global_step: 115 average_q: 0.04280141909485278 average loss: 0.0\n", | |
| "episode: 1 score: 0.0 memory length: 225 epsilon: 1.0 global_step: 225 average_q: 0.04234718131748113 average loss: 0.0\n", | |
| "episode: 2 score: 1.0 memory length: 371 epsilon: 1.0 global_step: 371 average_q: 0.04276819282198605 average loss: 0.0\n", | |
| "episode: 3 score: 0.0 memory length: 480 epsilon: 1.0 global_step: 480 average_q: 0.04322875034781771 average loss: 0.0\n", | |
| "episode: 4 score: 1.0 memory length: 627 epsilon: 1.0 global_step: 627 average_q: 0.044074764766660675 average loss: 0.0\n", | |
| "episode: 5 score: 0.0 memory length: 720 epsilon: 1.0 global_step: 720 average_q: 0.043093980079697024 average loss: 0.0\n", | |
| "episode: 6 score: 1.0 memory length: 860 epsilon: 1.0 global_step: 860 average_q: 0.04287574666419199 average loss: 0.0\n", | |
| "episode: 7 score: 2.0 memory length: 1045 epsilon: 1.0 global_step: 1045 average_q: 0.04360173654717368 average loss: 0.0\n", | |
| "episode: 8 score: 3.0 memory length: 1286 epsilon: 1.0 global_step: 1286 average_q: 0.041843480898136914 average loss: 0.0\n", | |
| "episode: 9 score: 0.0 memory length: 1416 epsilon: 1.0 global_step: 1416 average_q: 0.04271701009800801 average loss: 0.0\n" | |
| ], | |
| "name": "stdout" | |
| } | |
| ] | |
| }, | |
| { | |
| "metadata": { | |
| "id": "BqGtuubVOaeh", | |
| "colab_type": "text" | |
| }, | |
| "cell_type": "markdown", | |
| "source": [ | |
| "### Lets see the agent in action\n", | |
| "\n", | |
| "We are going to load the saved neural network and see the results. First lets create a much simpler agent who we will use to load the latest model and allow it to play.\n", | |
| "This new agent will have only the following: \n", | |
| " * build_model : to be able to understand the NN and load the saved neural network\n", | |
| " * get_action : to know what to do next\n", | |
| " * load_model : to load the model from disk. " | |
| ] | |
| }, | |
| { | |
| "metadata": { | |
| "id": "08Szv47xOaeh", | |
| "colab_type": "code", | |
| "colab": {} | |
| }, | |
| "cell_type": "code", | |
| "source": [ | |
| "class TestAgent:\n", | |
| " def __init__(self, action_size):\n", | |
| " self.state_size = (84, 84, 4)\n", | |
| " self.action_size = action_size\n", | |
| " self.no_op_steps = 20\n", | |
| "\n", | |
| " self.model = self.build_model()\n", | |
| "\n", | |
| " self.sess = tf.InteractiveSession()\n", | |
| " K.set_session(self.sess)\n", | |
| "\n", | |
| " self.avg_q_max, self.avg_loss = 0, 0\n", | |
| " self.sess.run(tf.global_variables_initializer())\n", | |
| "\n", | |
| " def build_model(self):\n", | |
| " model = Sequential()\n", | |
| " model.add(Conv2D(32, (8, 8), strides=(4, 4), activation='relu',\n", | |
| " input_shape=self.state_size))\n", | |
| " model.add(Conv2D(64, (4, 4), strides=(2, 2), activation='relu'))\n", | |
| " model.add(Conv2D(64, (3, 3), strides=(1, 1), activation='relu'))\n", | |
| " model.add(Flatten())\n", | |
| " model.add(Dense(512, activation='relu'))\n", | |
| " model.add(Dense(self.action_size))\n", | |
| " model.summary()\n", | |
| "\n", | |
| " return model\n", | |
| "\n", | |
| " def get_action(self, history):\n", | |
| " if np.random.random() < 0.01:\n", | |
| " return random.randrange(3)\n", | |
| " history = np.float32(history / 255.0)\n", | |
| " q_value = self.model.predict(history)\n", | |
| " return np.argmax(q_value[0])\n", | |
| "\n", | |
| " def load_model(self, filename):\n", | |
| " self.model.load_weights(filename)\n", | |
| "\n" | |
| ], | |
| "execution_count": 0, | |
| "outputs": [] | |
| }, | |
| { | |
| "metadata": { | |
| "id": "GBg3MUlNOaek", | |
| "colab_type": "text" | |
| }, | |
| "cell_type": "markdown", | |
| "source": [ | |
| "### Which Model to load ? \n", | |
| "\n", | |
| "Lets load two models. First we will start with the one YOU have trained. Toggle between the \"model\" variable below. \n", | |
| "\n", | |
| "* For your model please use \"./save_model/breakout_dqn.h5\" \n", | |
| "* For the model we have trained before please use \"./save_model/breakout_dqn_TRAINED.h5\" \n", | |
| "\n", | |
| "First run with the model as it is and go also to the next cell to see the results. After that return and change the model_to_load and run again for viewing the master in action" | |
| ] | |
| }, | |
| { | |
| "metadata": { | |
| "id": "1P6wDQbOOael", | |
| "colab_type": "code", | |
| "colab": {} | |
| }, | |
| "cell_type": "code", | |
| "source": [ | |
| "#model_to_load=\"./save_model/breakout_dqn.h5\"\n", | |
| "# replace with shareable link from google drive\n", | |
| "link = \"https://drive.google.com/open?id=1RbNmbp8EBXDom3MhhoWezdLNxY3xGPHL\"\n", | |
| "fluff, id = link.split('=')\n", | |
| "downloaded = drive.CreateFile({'id':id}) \n", | |
| "downloaded.GetContentFile('model_trained.h5') \n", | |
| "model_to_load = 'model_trained.h5'" | |
| ], | |
| "execution_count": 0, | |
| "outputs": [] | |
| }, | |
| { | |
| "metadata": { | |
| "id": "haEdIWF5Oaem", | |
| "colab_type": "text" | |
| }, | |
| "cell_type": "markdown", | |
| "source": [ | |
| "Now lets see what it does" | |
| ] | |
| }, | |
| { | |
| "metadata": { | |
| "id": "LzcSrAULOaen", | |
| "colab_type": "code", | |
| "colab": { | |
| "base_uri": "https://localhost:8080/", | |
| "height": 564 | |
| }, | |
| "outputId": "6a209b41-e76c-49d6-8fb3-a4ed33040232" | |
| }, | |
| "cell_type": "code", | |
| "source": [ | |
| "if __name__ == \"__main__\":\n", | |
| " from gym import wrappers\n", | |
| " \n", | |
| " # add virtual monitor for capturing video\n", | |
| " env = gym.make('BreakoutDeterministic-v4')\n", | |
| " env = wrappers.Monitor(env, f\"/tmp/BreakoutDeterministic-v4\", force=True)\n", | |
| " \n", | |
| " agent = TestAgent(action_size=3)\n", | |
| " agent.load_model(model_to_load)\n", | |
| "\n", | |
| " for e in range(EPISODES):\n", | |
| " done = False\n", | |
| " dead = False\n", | |
| " \n", | |
| " step, score, start_life = 0, 0, 5\n", | |
| " observe = env.reset()\n", | |
| "\n", | |
| " for _ in range(random.randint(1, agent.no_op_steps)):\n", | |
| " observe, _, _, _ = env.step(1)\n", | |
| "\n", | |
| " state = pre_processing(observe)\n", | |
| " history = np.stack((state, state, state, state), axis=2)\n", | |
| " history = np.reshape([history], (1, 84, 84, 4))\n", | |
| "\n", | |
| " while not done:\n", | |
| " env.render()\n", | |
| " step += 1\n", | |
| "\n", | |
| " action = agent.get_action(history)\n", | |
| "\n", | |
| " if action == 0:\n", | |
| " real_action = 1\n", | |
| " elif action == 1:\n", | |
| " real_action = 2\n", | |
| " else:\n", | |
| " real_action = 3\n", | |
| "\n", | |
| " if dead:\n", | |
| " real_action = 1\n", | |
| " dead = False\n", | |
| "\n", | |
| " observe, reward, done, info = env.step(real_action)\n", | |
| "\n", | |
| " next_state = pre_processing(observe)\n", | |
| " next_state = np.reshape([next_state], (1, 84, 84, 1))\n", | |
| " next_history = np.append(next_state, history[:, :, :, :3], axis=3)\n", | |
| "\n", | |
| " if start_life > info['ale.lives']:\n", | |
| " dead = True\n", | |
| " start_life = info['ale.lives']\n", | |
| "\n", | |
| " score += reward\n", | |
| " \n", | |
| " history = next_history\n", | |
| "\n", | |
| " if done:\n", | |
| " print(\"episode:\", e, \" score:\", score)" | |
| ], | |
| "execution_count": 30, | |
| "outputs": [ | |
| { | |
| "output_type": "stream", | |
| "text": [ | |
| "_________________________________________________________________\n", | |
| "Layer (type) Output Shape Param # \n", | |
| "=================================================================\n", | |
| "conv2d_10 (Conv2D) (None, 20, 20, 32) 8224 \n", | |
| "_________________________________________________________________\n", | |
| "conv2d_11 (Conv2D) (None, 9, 9, 64) 32832 \n", | |
| "_________________________________________________________________\n", | |
| "conv2d_12 (Conv2D) (None, 7, 7, 64) 36928 \n", | |
| "_________________________________________________________________\n", | |
| "flatten_4 (Flatten) (None, 3136) 0 \n", | |
| "_________________________________________________________________\n", | |
| "dense_7 (Dense) (None, 512) 1606144 \n", | |
| "_________________________________________________________________\n", | |
| "dense_8 (Dense) (None, 3) 1539 \n", | |
| "=================================================================\n", | |
| "Total params: 1,685,667\n", | |
| "Trainable params: 1,685,667\n", | |
| "Non-trainable params: 0\n", | |
| "_________________________________________________________________\n" | |
| ], | |
| "name": "stdout" | |
| }, | |
| { | |
| "output_type": "stream", | |
| "text": [ | |
| "/usr/local/lib/python3.6/dist-packages/tensorflow/python/client/session.py:1702: UserWarning: An interactive session is already active. This can cause out-of-memory errors in some cases. You must explicitly call `InteractiveSession.close()` to release resources held by the other session(s).\n", | |
| " warnings.warn('An interactive session is already active. This can '\n" | |
| ], | |
| "name": "stderr" | |
| }, | |
| { | |
| "output_type": "stream", | |
| "text": [ | |
| "episode: 0 score: 92.0\n", | |
| "episode: 1 score: 161.0\n", | |
| "episode: 2 score: 144.0\n", | |
| "episode: 3 score: 132.0\n", | |
| "episode: 4 score: 244.0\n", | |
| "episode: 5 score: 177.0\n", | |
| "episode: 6 score: 163.0\n", | |
| "episode: 7 score: 118.0\n", | |
| "episode: 8 score: 144.0\n", | |
| "episode: 9 score: 219.0\n" | |
| ], | |
| "name": "stdout" | |
| } | |
| ] | |
| }, | |
| { | |
| "metadata": { | |
| "id": "-x7KIu5EbKgs", | |
| "colab_type": "code", | |
| "colab": { | |
| "base_uri": "https://localhost:8080/", | |
| "height": 119 | |
| }, | |
| "outputId": "7b5caa1d-8186-46cf-e245-11d06576643d" | |
| }, | |
| "cell_type": "code", | |
| "source": [ | |
| "!ls /tmp/BreakoutDeterministic-v4" | |
| ], | |
| "execution_count": 31, | |
| "outputs": [ | |
| { | |
| "output_type": "stream", | |
| "text": [ | |
| "openaigym.video.5.1288.video000000.meta.json\n", | |
| "openaigym.video.5.1288.video000000.mp4\n", | |
| "openaigym.video.5.1288.video000001.meta.json\n", | |
| "openaigym.video.5.1288.video000001.mp4\n", | |
| "openaigym.video.5.1288.video000008.meta.json\n", | |
| "openaigym.video.5.1288.video000008.mp4\n" | |
| ], | |
| "name": "stdout" | |
| } | |
| ] | |
| }, | |
| { | |
| "metadata": { | |
| "id": "dV_jYsG-bEyC", | |
| "colab_type": "code", | |
| "colab": { | |
| "base_uri": "https://localhost:8080/", | |
| "height": 231 | |
| }, | |
| "outputId": "127009ac-31ae-4c2b-949b-58d2f558bd95" | |
| }, | |
| "cell_type": "code", | |
| "source": [ | |
| "ipython_show_video(\"/tmp/BreakoutDeterministic-v4/openaigym.video.5.1288.video000008.mp4\")" | |
| ], | |
| "execution_count": 36, | |
| "outputs": [ | |
| { | |
| "output_type": "display_data", | |
| "data": { | |
| "text/html": [ | |
| "\n", | |
| " <video alt=\"test\" controls>\n", | |
| " <source src=\"data:video/mp4;base64,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AQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAABgAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACAAAAAACAAACAAAAAAEAAAgAAAAAAgAAAgAAAAABAAAEAAAAAAEAAAgAAAAAAgAAAgAAAAACAAAEAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAEAAAAAAEAAAgAAAAAAgAAAgAAAAABAAAIAAAAAAIAAAIAAAAAAQAABgAAAAABAAACAAAAAAIAAAQAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAADAAAEAAAAAAEAAAgAAAAAAgAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAQAAAAAAQAACAAAAAACAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAABgAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAgAABAAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAABgAAAAABAAACAAAAAAEAAAgAAAAAAgAAAgAAAAABAAAIAAAAAAIAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAIAAAAAAIAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACAAAAAACAAACAAAAAAEAAAQAAAAAAQAABgAAAAABAAACAAAAAAEAAAYAAAAAAQAAAgAAAAABAAAIAAAAAAIAAAIAAAAAAQAABgAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAGAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAGAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAGAAAAAAEAAAIAAAAAAQAABgAAAAABAAACAAAAAAEAAAQAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAQAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAQAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAGAAAAAAEAAAIAAAAAAQAABgAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAQAAAAAAQAACAAAAAACAAACAAAAAAEAAAQAAAAAAQAABgAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAIAAAAAAIAAAIAAAAAAQAABAAAAAABAAAIAAAAAAIAAAIAAAAAAQAACAAAAAACAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAABAAAAAABAAAIAAAAAAIAAAIAAAAAAQAABgAAAAABAAACAAAAAAEAAAQAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAEAAAAAAEAAAYAAAAAAQAAAgAAAAABAAAGAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAABAAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAIAAAAAAIAAAIAAAAAAQAACAAAAAACAAACAAAAAAEAAAgAAAAAAgAAAgAAAAABAAAEAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAgAABAAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAABgAAAAABAAACAAAAAAEAAAgAAAAAAgAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAQAAAAAAQAACAAAAAACAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAABgAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAgAABAAAAAABAAAGAAAAAAEAAAIAAAAAAQAACAAAAAACAAACAAAAAAEAAAYAAAAAAQAAAgAAAAABAAAIAAAAAAIAAAIAAAAAAQAABgAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAYAAAAAAQAAAgAAAAABAAAGAAAAAAEAAAIAAAAAAQAACAAAAAACAAACAAAAAAEAAAQAAAAAAQAABgAAAAABAAACAAAAAAEAAAgAAAAAAgAAAgAAAAABAAAEAAAAAAEAAAYAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAYAAAAAAQAAAgAAAAABAAAGAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAGAAAAAAEAAAIAAAAAAQAABgAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACAAAAAACAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAEAAAAAAEAAAYAAAAAAQAAAgAAAAABAAAEAAAAAAEAAAYAAAAAAQAAAgAAAAABAAAGAAAAAAEAAAIAAAAAAQAABgAAAAABAAACAAAAAAEAAAQAAAAAAQAACAAAAAACAAACAAAAAAEAAAQAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAEAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAIAAAAAAIAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAABgAAAAABAAACAAAAAAEAAAYAAAAAAQAAAgAAAAABAAAIAAAAAAIAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAQAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAADAAAEAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACAAAAAACAAACAAAAAAEAAAYAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAgAAAAAAgAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAQAAAAAAQAACAAAAAACAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAABAAAAAABAAAGAAAAAAEAAAIAAAAAAQAABgAAAAABAAACAAAAAAMAAAQAAAAAAQAABgAAAAABAAACAAAAAAIAAAQAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAEAAAAAAEAAAYAAAAAAQAAAgAAAAABAAAGAAAAAAEAAAIAAAAAAQAACAAAAAACAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAIAAAAAAIAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAYAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAgAAAAAAgAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAQAAAAAAQAACAAAAAACAAACAAAAAAEAAAQAAAAAAQAACAAAAAACAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAYAAAAAAQAAAgAAAAABAAAGAAAAAAEAAAIAAAAAAQAABAAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAYAAAAAAQAAAgAAAAABAAAGAAAAAAEAAAIAAAAAAQAABAAAAAABAAAGAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAwAABAAAAAABAAAGAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAGAAAAAAEAAAIAAAAAAQAACAAAAAACAAACAAAAAAEAAAQAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAGAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAIAAAAAAIAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACAAAAAACAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAGAAAAAAEAAAIAAAAAAQAABgAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAgAABAAAAAABAAAGAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAEAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAABAAAAAABAAAIAAAAAAIAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAEAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACAAAAAACAAACAAAAAAEAAAgAAAAAAgAAAgAAAAABAAAIAAAAAAIAAAIAAAAAAQAABAAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAACAAAEAAAAAAEAAAYAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAYAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAMAAAQAAAAAAQAABgAAAAABAAACAAAAAAMAAAQAAAAAAQAACAAAAAACAAACAAAAAAEAAAgAAAAAAgAAAgAAAAABAAAIAAAAAAIAAAIAAAAAAQAABgAAAAABAAACAAAAAAIAAAQAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACAAAAAACAAACAAAAAAIAAAQAAAAAAQAACAAAAAACAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAQAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAQAAAAAAQAACAAAAAACAAACAAAAAAEAAAgAAAAAAgAAAgAAAAABAAAGAAAAAAEAAAIAAAAAAQAACAAAAAACAAACAAAAAAEAAAQAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAQAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAYAAAAAAQAAAgAAAAABAAAGAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAGAAAAAAEAAAIAAAAAAQAACAAAAAACAAACAAAAAAEAAAYAAAAAAQAAAgAAAAABAAAEAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAACAAAEAAAAAAEAAAYAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAIAAAQAAAAAAQAABgAAAAABAAACAAAAAAEAAAQAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAGAAAAAAEAAAIAAAAAAQAABgAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAABAAAAAABAAAGAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAGAAAAAAEAAAIAAAAAAQAACAAAAAACAAACAAAAAAEAAAYAAAAAAQAAAgAAAAABAAAEAAAAAAEAAAYAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAgAAAAAAgAAAgAAAAABAAAEAAAAAAEAAAgAAAAAAgAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAQAAAAAAQAABgAAAAABAAACAAAAAAEAAAYAAAAAAQAAAgAAAAABAAAEAAAAAAEAAAYAAAAAAQAAAgAAAAABAAAEAAAAAAEAAAYAAAAAAQAAAgAAAAABAAAIAAAAAAIAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAYAAAAAAQAAAgAAAAABAAAEAAAAAAEAAAgAAAAAAgAAAgAAAAABAAAGAAAAAAEAAAIAAAAAAQAABAAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAIAAAQAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAGAAAAAAEAAAIAAAAAAQAABgAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAEAAAAAAEAAAgAAAAAAgAAAgAAAAABAAAIAAAAAAIAAAIAAAAAAQAABAAAAAABAAAGAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAIAAAAAAIAAAIAAAAAAQAABgAAAAABAAACAAAAAAEAAAQAAAAAAQAACAAAAAACAAACAAAAAAEAAAgAAAAAAgAAAgAAAAABAAAEAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAIAAAAAAIAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACAAAAAACAAACAAAAAAEAAAQAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAgAAAAAAgAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAYAAAAAAQAAAgAAAAADAAAEAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAEAAAAAAEAAAYAAAAAAQAAAgAAAAABAAAEAAAAAAEAAAgAAAAAAgAAAgAAAAABAAAEAAAAAAEAAAYAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAQAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAAEAAAEAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAIAAAAAAIAAAIAAAAAAgAABAAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAABgAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAABgAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAABgAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAABgAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAABgAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAIAAAAAAIAAAIAAAAAAQAACAAAAAACAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAQAAAAAAQAABgAAAAABAAACAAAAAAEAAAgAAAAAAgAAAgAAAAABAAAIAAAAAAIAAAIAAAAAAgAABAAAAAABAAAIAAAAAAIAAAIAAAAAAQAABAAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAABgAAAAABAAACAAAAAAIAAAQAAAAAAQAACAAAAAACAAACAAAAAAIAAAQAAAAAAQAACAAAAAACAAACAAAAAAEAAAYAAAAAAQAAAgAAAAABAAAIAAAAAAIAAAIAAAAAAQAACAAAAAACAAACAAAAAAIAAAQAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAIAAAAAAIAAAIAAAAAAQAABAAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAABgAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACAAAAAACAAACAAAAAAEAAAQAAAAAAQAABgAAAAABAAACAAAAAAEAAAgAAAAAAgAAAgAAAAABAAAIAAAAAAIAAAIAAAAAAQAACAAAAAACAAACAAAAAAIAAAQAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAgAAAAAAgAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAYAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAABgAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAABAAAAAABAAAGAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAIAAAAAAIAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAABgAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAEAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAGAAAAAAEAAAIAAAAAAwAABAAAAAABAAAGAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAIAAAAAAIAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAIAAAAAAIAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAGAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAGAAAAAAEAAAIAAAAAAQAACAAAAAACAAACAAAAAAEAAAYAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAIAAAQAAAAAAQAACAAAAAACAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAIAAAAAAIAAAIAAAAAAQAACAAAAAACAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACAAAAAACAAACAAAAAAEAAAYAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAgAAAAAAgAAAgAAAAABAAAGAAAAAAEAAAIAAAAAAQAABgAAAAABAAACAAAAAAEAAAQAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAGAAAAAAEAAAIAAAAAAQAABgAAAAABAAACAAAAAAEAAAYAAAAAAQAAAgAAAAABAAAEAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAgAAAAAAgAAAgAAAAABAAAEAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAABAAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAgAABAAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAQAAAAAAQAACAAAAAACAAACAAAAAAEAAAQAAAAAAQAABgAAAAABAAACAAAAAAEAAAYAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAABAAAAAABAAAIAAAAAAIAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAIAAAAAAIAAAIAAAAAAQAABgAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAACAAAEAAAAAAEAAAYAAAAAAQAAAgAAAAAcc3RzYwAAAAAAAAABAAAAAQAABiEAAAABAAAYmHN0c3oAAAAAAAAAAAAABiEAAATYAAAAWQAAADUAAAAXAAAAUQAAAD4AAAAfAAAAFwAAAD8AAAA2AAAAGAAAABUAAAA/AAAANgAAABkAAAAVAAAAegAAADAAAAAjAAAAKAAAAD4AAAAsAAAANwAAABkAAAAWAAAALgAAADgAAAA3AAAAHQAAAEIAAABsAAAANQAAAG4AAABkAAAAJQAAAB8AAABpAAAAjQAAAHQAAABDAAAAGQAAAC8AAAA6AAAAKwAAADAAAAAfAAAAUQAAAHIAAAA9AAAAGgAAAFMAAABKAAAAQgAAAFIAAAAiAAAASQAAAJkAAABjAAAAOAAAADwAAABsAAAARQAAADgAAABAAAAAPAAAADEAAAA1AAAAigAAADIAAAAzAAAAOwAAAD0AAABjAAAALgAAAB0AAABAAAAAMgAAABwAAAAqAAAAPgAAADIAAAAqAAAAOwAAAE8AAAB6AAAAHQAAAC8AAAB1AAAANQAAAB8AAAAqAAAAQgAAAB0AAACCAAAALgAAABoAAABeAAAAPAAAADMAAAB7AAAALgAAACcAAAAhAAAATgAAADYAAAAiAAAAMAAAAEMAAAAyAAAASQAAACQAAAAcAAAAhAAAAD4AAABvAAAAiwAAADcAAAA0AAAAMQAAAEAAAAA3AAAAMAAAAF0AAACKAAAANwAAAC4AAACDAAAAOAAAAEUAAAAzAAAANgAAAF4AAABLAAAAGgAAAEUAAAAgAAAAHgAAADkAAABBAAAAPQAAAHcAAAAhAAAAegAAACMAAAAhAAAAkQAAADYAAAA4AAAAMQAAACYAAAAiAAAAKQAAACIAAAAgAAAAHwAAAGcAAAAlAAAAUAAAADcAAAAqAAAAMAAAAGQAAAAnAAAAkwAAADEAAABNAAAAKQAAADgAAAAsAAAALgAAACkAAABPAAAAJwAAACwAAAAnAAAAJwAAAGwAAABrAAAAKQAAADkAAABRAAAARgAAADYAAAArAAAAJQAAAJcAAAAvAAAAIgAAADEAAAA9AAAAMgAAADMAAAApAAAAKAAAADcAAAAvAAAAMAAAACQAAABQAAAAWQAAAC4AAAAkAAAALQAAAEoAAAAwAAAANwAAAFEAAAAqAAAAIgAAACQAAABNAAAAOAAAAC4AAAAsAAAATQAAAIoAAABaAAAANQAAADAAAAApAAAAJAAAAH8AAAAyAAAAJAAAAC0AAAA5AAAAMAAAAC0AAABCAAAANQAAADEAAAAwAAAAoQAAAD4AAABlAAAAawAAADIAAAAoAAAAKgAAAGsAAACBAAAANgAAAC8AAAAyAAAAKQAAAD8AAABQAAAAMAAAACsAAAAtAAAC4gAAAHQAAABuAAAAdQAAAGUAAAA4AAAAOAAAADMAAAAvAAAAWAAAADYAAAAvAAAAVwAAADUAAAAVAAAAJAAAACAAAABTAAAAZQAAADIAAAAlAAAANAAAAJIAAAA1AAAAMQAAADYAAACiAAAAPQAAADIAAABnAAAAPQAAADcAAAA0AAAARgAAADQAAAA1AAAAPwAAADsAAAAeAAAAPgAAADkAAAAwAAAAKwAAACYAAAA5AAAAJgAAAFwAAABgAAAAOQAAADEAAABMAAAAMgAAABcAAABDAAAAXgAAAHsAAAA4AAAANgAAAEQAAAA9AAAAMAAAAEIAAABDAAAAewAAADYAAAA2AAAAWQAAAD8AAABiAAAAMwAAADEAAABAAAAANQAAADEAAAA3AAAAUgAAADkAAABuAAAAOAAAAFwAAAA4AAAAWgAAADEAAAAvAAAANQAAACsAAAAxAAAAdAAAACEAAAAWAAAAMwAAAIwAAAA7AAAAMwAAADIAAAA/AAAAJAAAADgAAAA1AAAALwAAADYAAACRAAAALwAAAEgAAAApAAAAUAAAADYAAAApAAAARAAAADQAAAA7AAAAOgAAACgAAABmAAAANAAAALMAAAB5AAAANwAAADYAAABDAAAAPAAAADMAAAAxAAAANgAAADIAAAAXAAAAMQAAAIEAAAA2AAAAdwAAAEgAAABzAAAAfQAAADgAAAA/AAAARAAAADgAAABFAAAALwAAACgAAAA9AAAAXwAAAC0AAABAAAAAOgAAACoAAAAjAAAAdwAAAHIAAABsAAAAagAAADkAAABfAAAANQAAADMAAAB4AAAANgAAAJ4AAAAyAAAARAAAAB0AAAAqAAAAKgAAADQAAAA2AAAAMgAAAFQAAAA+AAAAMAAAAC8AAAA1AAAANwAAADIAAAAwAAAAOwAAADcAAAAzAAAAMwAAADwAAAAxAAAALwAAADUAAAA8AAAAOAAAADYAAAAzAAAAPAAAADwAAAAwAAAAOAAAAEIAAAAqAAAAYAAAAC0AAAA9AAAALQAAADYAAAA0AAAANQAAACwAAABrAAAAeQAAADcAAAAqAAAAKAAAADQAAAB3AAAANAAAAC0AAAAvAAAASQAAADAAAAAvAAAAJwAAAGoAAAA5AAAARAAAAEkAAAAtAAAAKQAAACcAAAA5AAAAMgAAADIAAAApAAAAjwAAADQAAAAkAAAAUwAAAH4AAABlAAAAOgAAACwAAAB1AAAANAAAADkAAAAmAAAAIQAAACMAAAAjAAAAcwAAAC4AAAAkAAAASwAAAIkAAAAzAAAAMAAAADEAAAAqAAAAMgAAAsIAAACSAAAARgAAACoAAABRAAAAIwAAAFcAAAAkAAAAMQAAAHoAAAArAAAANgAAACQAAAAkAAAAIAAAAH4AAAArAAAALgAAAHQAAAAvAAAALQAAACsAAAA8AAAAOQAAADAAAAAtAAAAgwAAAEIAAAAvAAAAKQAAADMAAACHAAAAZgAAADcAAAAmAAAANAAAAC4AAAAwAAAAOgAAACkAAAA5AAAANQAAAGgAAABsAAAALgAAADkAAABUAAAAcAAAAGoAAAB1AAAAYQAAAF4AAAAsAAAAYwAAAEEAAAAwAAAAKgAAACoAAAAzAAAALAAAACkAAAAjAAAAhAAAADMAAAA0AAAAKgAAADcAAAAxAAAALwAAACkAAAA6AAAAMQAAACYAAAAqAAAAowAAAHEAAABmAAAANAAAADUAAAAtAAAALgAAAH8AAAA4AAAALAAAADIAAAAxAAAAKwAAAC0AAAAoAAAAOwAAADYAAAAqAAAALAAAACwAAAAxAAAAMwAAACoAAAB/AAAAawAAAHkAAAA1AAAAIQAAAGEAAABmAAAAQQAAACgAAAA4AAAAMQAAAD4AAAApAAAAMgAAADEAAAAvAAAAKAAAADAAAABWAAAAMgAAAC0AAAA3AAAALQAAACwAAAAdAAAATgAAADUAAAAoAAAALgAAAFwAAAA0AAAALQAAADAAAABxAAAAMQAAAIUAAABnAAAAQQAAACkAAAAsAAAAIwAAAC8AAAAqAAAAMgAAAHYAAABtAAAANgAAAF8AAAAtAAAAigAAAC8AAABRAAAAIwAAACsAAAAlAAAAHAAAACEAAAB2AAAALgAAACMAAAAtAAAAgwAAADoAAAAqAAAAPwAAACIAAAB7AAAALwAAACsAAAAtAAAAJwAAAC4AAACHAAAAMAAAACcAAAA1AAAASgAAADYAAAAvAAAALAAAADYAAAAqAAAAdgAAADgAAAAwAAAAMAAAAFwAAAA3AAAAMgAAADQAAABHAAAAHQAAADEAAAA0AAAANAAAAC4AAAAqAAAAtQAAADwAAAArAAAAcgAAAIwAAAB5AAAAMAAAADIAAAA3AAAAMAAAADIAAABLAAAAMQAAACcAAAAsAAAASQAAADIAAABsAAAAXgAAACsAAAB5AAAAKwAAACsAAAB+AAAALwAAACkAAAA8AAAAegAAAE0AAAAdAAAAKQAAADQAAAA0AAAALwAAAC8AAAA5AAAANgAAAF0AAAArAAAANAAAACgAAAAhAAAAJQAAADAAAAAuAAAAVwAAAC4AAABFAAAAbQAAAIUAAABlAAAALgAAAGgAAABsAAAASAAAADIAAALVAAAAYgAAACcAAAAmAAAAPgAAADAAAAAoAAAAIwAAACEAAAAqAAAAJgAAAB8AAAAkAAAAYwAAACsAAAAmAAAAJwAAAHUAAAAsAAAAKwAAAJoAAABlAAAAMAAAAG8AAAAuAAAAOAAAAFAAAABFAAAALAAAACgAAAAiAAAARAAAACoAAAAhAAAAIwAAADEAAAAtAAAAJwAAACQAAAAxAAAANgAAAF8AAAArAAAAogAAACoAAAA/AAAAHwAAAFgAAAA5AAAATgAAAC8AAAAtAAAAMQAAAHcAAAA2AAAAMwAAADMAAAAlAAAAMwAAADQAAABKAAAANAAAAC4AAAAkAAAAgwAAAC4AAAAnAAAAMgAAACoAAAArAAAAtAAAAB0AAAA6AAAANgAAAFIAAAArAAAAPQAAACMAAAAZAAAAJgAAACMAAAAfAAAAFgAAACMAAAAgAAAAEQAAAKsAAAAhAAAAGwAAAFoAAAApAAAAMQAAABoAAAAXAAAAPwAAADsAAAAeAAAAIQAAAEEAAAA3AAAAHwAAAC4AAAAqAAAAKwAAACcAAAAsAAAAPQAAAGsAAAAyAAAAJAAAAC8AAAA1AAAAMAAAAC0AAAAhAAAAigAAAFcAAACAAAAALQAAAGsAAAA2AAAALQAAADcAAAAwAAAATwAAADkAAAAxAAAAngAAAEEAAAA8AAAAHwAAADcAAAA7AAAAMgAAADEAAAAwAAAAQgAAADsAAAAuAAAALAAAADYAAACKAAAANwAAAB8AAAAgAAAARwAAADsAAABBAAAAGwAAACYAAAAgAAAAFQAAABwAAAAyAAAAIQAAAFkAAAAgAAAAHwAAAE8AAAAbAAAAKgAAAFsAAAAsAAAAMQAAACkAAAA8AAAAMQAAACgAAABFAAAAhgAAAJ4AAABMAAAALwAAACkAAAArAAAAHgAAACYAAABIAAAANAAAADoAAAApAAAAKQAAAEYAAAA7AAAAIQAAACQAAABAAAAAJQAAAEUAAAAoAAAAlgAAAEMAAAAfAAAAHAAAAEIAAAA/AAAAHgAAACcAAAAiAAAAFwAAAB0AAABKAAAAOAAAAFMAAABEAAAAIgAAAEYAAAAfAAAAMgAAADEAAAAyAAAAWgAAADAAAAAmAAAAKwAAAHsAAAA/AAAAKwAAAKIAAABNAAAAPgAAABkAAABAAAAAMgAAACoAAAAwAAAANQAAAEAAAAAaAAAAPgAAABoAAAAfAAAAPAAAACIAAAA6AAAALwAAAC0AAABRAAAAMAAAACoAAABRAAAALgAAAC0AAAAnAAAALQAAACgAAAAqAAAAJQAAAHUAAAAwAAACugAAAJIAAAAqAAAALgAAADUAAAApAAAANgAAAIYAAAAsAAAAKAAAACkAAAA5AAAANAAAADkAAAAxAAAAJgAAACMAAAAuAAAAKQAAACkAAAAoAAAAsAAAACYAAAAlAAAAIAAAAF0AAAAeAAAAIwAAACoAAAB9AAAAXgAAADgAAABlAAAAOAAAADIAAAAlAAAAOgAAADkAAAAtAAAAiwAAAD0AAAApAAAAMgAAAHIAAABFAAAALQAAAEgAAAAmAAAAQAAAAJMAAAA0AAAAGAAAAGEAAAA1AAAALQAAAEUAAABPAAAANwAAAC0AAAApAAAAQwAAADcAAAApAAAALQAAADoAAAAkAAAAHAAAADUAAAA1AAAAHgAAACwAAAAsAAAAKAAAACgAAAAsAAAAOQAAADQAAAAtAAAAMwAAAIcAAAAyAAAAMwAAADIAAAA7AAAALwAAACgAAAAmAAAAogAAACwAAAArAAAAKQAAAIwAAAA/AAAANgAAADwAAAA7AAAAMwAAADMAAAAtAAAAeAAAAEEAAAAvAAAANQAAAGAAAAA9AAAAMgAAAFQAAABRAAAAKgAAADUAAABEAAAALAAAADgAAAAuAAAAPQAAAE4AAAA1AAAAMwAAADEAAACSAAAAQwAAADoAAAA2AAAANwAAAJYAAAAsAAAARAAAAEkAAAAtAAAAIgAAAFAAAABKAAAALwAAAFgAAABAAAAANwAAADIAAACOAAAANwAAAD4AAAA3AAAANwAAAD8AAAA0AAAANQAAAEAAAABEAAAAMAAAADEAAAApAAAAcwAAADIAAAA8AAAALAAAAH4AAAA4AAAAWwAAAIEAAAA+AAAAPwAAADEAAAAyAAAANQAAAEsAAAA/AAAAKAAAADsAAACyAAAANwAAADYAAAAiAAAALwAAACkAAABAAAAAMgAAAC8AAAA1AAAALAAAADYAAABvAAAAUgAAAD8AAAAxAAAAQAAAAC8AAACBAAAAHwAAAD8AAAA4AAAAOwAAADIAAACXAAAALwAAAEEAAAAyAAAALgAAADMAAAB7AAAAOQAAAC4AAAA4AAAAnQAAAF8AAABNAAAAPgAAADwAAAAdAAAALwAAAD4AAAArAAAALQAAAD4AAAAvAAAANgAAAFEAAABdAAAANgAAACYAAAAwAAAAZwAAAEQAAAA0AAAAhQAAADYAAABrAAAAPAAAAC8AAAAoAAAAOwAAAD8AAAA5AAAAQQAAADkAAACQAAAAcwAAADgAAAAxAAAAPAAAAEAAAAA+AAAANwAAACsAAAA1AAAALQAAADkAAAA8AAAAQAAAADMAAAAxAAAAcgAAAw0AAABmAAAAKgAAAC4AAABsAAAANwAAACAAAABrAAAANwAAAF4AAAAgAAAAHAAAAEgAAABEAAAAbAAAADIAAAA8AAAAGQAAAE4AAAAeAAAAIgAAACoAAABFAAAAHQAAABcAAAA8AAAALAAAACgAAAAqAAAAJwAAAEIAAAAmAAAAbQAAAD4AAAA5AAAANwAAAJAAAABJAAAAIgAAADAAAAA2AAAAGwAAAGQAAAAyAAAAIQAAAEIAAAB5AAAALwAAAHkAAAA3AAAAGwAAAIMAAAA1AAAAMAAAACwAAAAcAAAAQAAAAFsAAAA1AAAANwAAAC4AAABIAAAAMwAAADgAAABCAAAAMAAAACwAAAAsAAAARQAAABoAAACsAAAASwAAAC0AAAA6AAAANwAAAEAAAAA+AAAAKwAAAE8AAAAzAAAAogAAAEcAAAA+AAAAcQAAAFsAAABEAAAAPQAAAEsAAABFAAAAHgAAAEMAAABGAAAAPwAAAD8AAAA9AAAAMQAAACQAAAAmAAAAPQAAAC8AAAAnAAAAIwAAAHkAAAA0AAAAKQAAADsAAABZAAAAJgAAAJAAAAA8AAAAKwAAACsAAACBAAAALgAAACcAAAAfAAAAKQAAAGwAAAA4AAAANwAAADMAAABmAAAALgAAACkAAAAvAAAAMwAAADMAAAAyAAAALgAAADYAAAAvAAAAIwAAACwAAAA3AAAAMgAAACkAAAArAAAAPAAAACgAAAA1AAAANQAAADsAAABdAAAALQAAAE8AAAAsAAAAKgAAADEAAAA7AAAALAAAACcAAAA+AAAAMwAAACkAAAAnAAAANAAAACkAAAAnAAAANAAAACoAAAAsAAAAIwAAADUAAAAvAAAAPgAAADUAAAAnAAAAMgAAADoAAAAxAAAAoQAAADgAAAA5AAAAOgAAAC0AAABGAAAAPwAAADMAAAApAAAALgAAAFUAAABLAAAAMAAAADkAAAChAAAAOQAAADAAAAAuAAAAdgAAAEEAAAA2AAAASQAAAJwAAAB8AAAARgAAACsAAAA6AAAANQAAAJkAAACSAAAAPgAAAEUAAABiAAAANQAAACsAAADAAAAARQAAAC8AAABEAAAANwAAAD0AAAA8AAAANwAAADEAAABAAAAAPgAAAJMAAABCAAAAQQAAAIcAAAAwAAAALwAAAEEAAAByAAAAMwAAAHwAAABYAAAAMQAAADAAAABIAAAAQgAAAEMAAABBAAAAPAAAAMYAAAB+AAAAVgAAAHcAAACDAAAARQAAAC8AAABFAAAATwAAADUAAAAyAAAARAAAAEgAAAA+AAAAIwAAAF0AAANBAAAAjwAAACUAAAAoAAAAHAAAAEMAAAA8AAAAKgAAAD8AAAB7AAAAegAAAC4AAAA1AAAALwAAADkAAABKAAAAMQAAADYAAABJAAAAyQAAADMAAABAAAAAcwAAAEYAAABCAAAAOgAAADsAAAA+AAAATAAAADMAAAAmAAAAWAAAAD0AAAA4AAAAqAAAAIAAAABoAAAAPQAAADMAAAAeAAAAcQAAAEMAAAAsAAAAMwAAAH0AAAAyAAAALgAAACgAAACBAAAAPQAAADkAAAAtAAAAmAAAAEgAAAA3AAAAbQAAADkAAAAwAAAAOAAAAC0AAABCAAAAOAAAAD4AAAAqAAAANwAAADMAAAAfAAAAIgAAABgAAAAUc3RjbwAAAAAAAAABAAAAMAAAAGJ1ZHRhAAAAWm1ldGEAAAAAAAAAIWhkbHIAAAAAAAAAAG1kaXJhcHBsAAAAAAAAAAAAAAAALWlsc3QAAAAlqXRvbwAAAB1kYXRhAAAAAQAAAABMYXZmNTcuODMuMTAw\" type=\"video/mp4\" />\n", | |
| " </video>\n", | |
| " " | |
| ], | |
| "text/plain": [ | |
| "<IPython.core.display.HTML object>" | |
| ] | |
| }, | |
| "metadata": { | |
| "tags": [] | |
| } | |
| } | |
| ] | |
| }, | |
| { | |
| "metadata": { | |
| "id": "EetUOsUgOaep", | |
| "colab_type": "text" | |
| }, | |
| "cell_type": "markdown", | |
| "source": [ | |
| "# That is it !!!! Now lets go out and win at GO !!!" | |
| ] | |
| }, | |
| { | |
| "metadata": { | |
| "id": "LE1uqwmsOaep", | |
| "colab_type": "text" | |
| }, | |
| "cell_type": "markdown", | |
| "source": [ | |
| "#### This lab has been using:\n", | |
| "#### * the great work done by Charel van Hoof in \"Learn-by-example-reinforcement-learning-with-gym\" hosted on Kaggle. (https://www.kaggle.com/charel/learn-by-example-reinforcement-learning-with-gym)\n", | |
| "#### * Some of the Reinforcement learning tutorials for the Atari Breakout Game. More info found here: https://github.com/rlcode/reinforcement-learning\n" | |
| ] | |
| }, | |
| { | |
| "metadata": { | |
| "id": "XLy_J4ygOaer", | |
| "colab_type": "code", | |
| "colab": {} | |
| }, | |
| "cell_type": "code", | |
| "source": [ | |
| "" | |
| ], | |
| "execution_count": 0, | |
| "outputs": [] | |
| } | |
| ] | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment