Skip to content

Instantly share code, notes, and snippets.

@KarthikNayak
Last active January 25, 2019 17:04
Show Gist options
  • Save KarthikNayak/f5134e015ca69b44f2a1713d43be53be to your computer and use it in GitHub Desktop.
Save KarthikNayak/f5134e015ca69b44f2a1713d43be53be to your computer and use it in GitHub Desktop.
Basic QLearning with Pytorch
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import gym\n",
"import math\n",
"import random\n",
"import numpy as np\n",
"import matplotlib\n",
"import matplotlib.pyplot as plt\n",
"from collections import namedtuple\n",
"from itertools import count\n",
"\n",
"import torch\n",
"import torch.nn as nn\n",
"import torch.optim as optim\n",
"import torch.nn.functional as F\n",
"\n",
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/karthik/envs/dl/lib/python3.7/site-packages/gym/envs/registration.py:14: PkgResourcesDeprecationWarning: Parameters to load are deprecated. Call .resolve and .require separately.\n",
" result = entry_point.load(False)\n"
]
}
],
"source": [
"env = gym.make('FrozenLake-v0')\n",
"device = torch.device(\"cpu\")\n",
"#device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n",
"\n",
"input_dimensions = env.observation_space.n\n",
"output_dimensions = env.action_space.n\n",
"GAMMA = 0.9\n",
"EPS_START = 0.1\n",
"EPS_END = 0.01\n",
"EPS_DECAY = 1000\n",
"LEARNING_RATE = 0.1"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [],
"source": [
"class FnApproximator(nn.Module):\n",
" \n",
" def __init__(self):\n",
" super(FnApproximator, self).__init__()\n",
" self.hidden_units = 128\n",
" self.lr1 = nn.Linear(input_dimensions, self.hidden_units)\n",
" self.lr2 = nn.Linear(self.hidden_units, output_dimensions)\n",
" \n",
" def forward(self, x):\n",
" x = F.relu(F.dropout(self.lr1(x), 0.1))\n",
" return torch.sigmoid(self.lr2(x))"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [],
"source": [
"q_function = FnApproximator().to(device)\n",
"optimizer = optim.Adam(q_function.parameters(), lr=LEARNING_RATE)\n",
"loss = nn.MSELoss()"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [],
"source": [
"steps = 0\n",
"\n",
"def q_actions(state):\n",
" state = torch.from_numpy(state.astype(dtype=np.float32))\n",
" return q_function(state)\n",
"\n",
"def action_to_take(state):\n",
" global steps\n",
" sample = random.random()\n",
" eps_threshold = EPS_END + (EPS_START - EPS_END) * math.exp(-1. * steps / EPS_DECAY)\n",
" steps += 1\n",
" if sample > eps_threshold:\n",
" with torch.no_grad():\n",
" return q_actions(state).max(1)[1]\n",
" else:\n",
" return torch.tensor([[random.randrange(output_dimensions)]])"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [],
"source": [
"def update_policy(state, action, reward, next_state):\n",
" q = q_actions(state).max(1)[0]\n",
" q_prime = q_actions(next_state).max(1)[0]\n",
" output = loss(q, q_prime * GAMMA + reward)\n",
" optimizer.zero_grad()\n",
" output.backward()\n",
" optimizer.step()"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [],
"source": [
"episodes = 1000\n",
"scores = []\n",
"total_rewards = []\n",
"\n",
"for i in range(episodes):\n",
" state = env.reset()\n",
" state = np.identity(input_dimensions)[state:state+1]\n",
" rewards = 0\n",
" for t in count():\n",
" action = action_to_take(state)\n",
" #env.render()\n",
" prev_state = state\n",
" state, reward, done, _ = env.step(action.item())\n",
" state = np.identity(input_dimensions)[state:state+1]\n",
" update_policy(prev_state, action, reward, state)\n",
" rewards += reward\n",
" if done:\n",
" break\n",
" total_rewards.append(rewards)\n",
" scores.append(t)"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x7fe280546588>]"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.plot(scores)"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x7fe280525278>]"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAXcAAAD8CAYAAACMwORRAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJztnWmUHcd13/8XM5gBAZAgwBlCFBYCJKFIkGJZ9BwuoRPTJqWAjENmkXKIOLFkK6JybCaKpSMdSvKRbPpLFClyrIRmBNmyYsYhBdJaEBoRYlFkTJEmiQEXEAshDMAFA4DADDDAEMtsmJsPr9+8rZeq7uruqq77O2fOm+6urrq19O3q+ld1EzNDEARBqBbzyjZAEARBMI84d0EQhAoizl0QBKGCiHMXBEGoIOLcBUEQKog4d0EQhAoizl0QBKGCiHMXBEGoIOLcBUEQKkh3WQn39fXxmjVrykpeEATBSXbs2DHKzP1J4Upz7mvWrMHg4GBZyQuCIDgJEb2hEk6GZQRBECqIOHdBEIQKIs5dEAShgohzFwRBqCDi3AVBECpIonMnom8T0XEi2hVxnIjoG0Q0REQ7ieha82YKgiAIOqj03L8DYEPM8dsArAv+7gbwQHazBEEQhCwkOndm/hsAJ2OC3Angz7nGswAuJaIrTBmYBDPjkcFDmJy5EBvu5NkpbH3lKADgr/ccw/HxCQDA+akL+N4Lw1D93OBLh05h1+HTieF2HT6NF98ciw3zzNAoDo6c6dhfz9PE9AWMNdkdxuwsY/PgIUxfmE02PoYLs4zN2w9hJiSe2VnGV370Kp7aP5Jb+s8ePIGh428rhZ2+MIvNg4cwO9uosz1HxvFCW3l//8VhnJ2cmdv+2wMncKCpvKdmZvHI4CEwMw6dPIcn9x2PTHPo+Bk8e/AEAODpoVG8PnoWf7XzKE6dm8LQ8TP405++lljfAHBuagbff3EYR06dxxOvRqcXxdHT5/H43mMt+57cdxzDY+fmts9MzuAHLx6OjGPrK0cxdnYqNp2DI2fwzIHR2DAvvDmG3Udar4XXRs/i6aHW83606yhGz0zi9dGz+On++Dij+Mmrx3Dk1Hkl25qv72a27X4LP95zLOQMNV4OufbfOHEWv/+/d+Po6fNKcew5Mo4dbyS3ExOYWMS0AsChpu3hYF+HRyKiu1Hr3WP16tUGkgZ+tOstfPbRnXht9Cw+t+HdkeE++eAgtr8+hue/cAs+8eeDWHPZQjz52V/GfY/twUPPv4krllyEG6++LDG9f3L/0wCA1//jP4oN96v/9aeJ4f7lnzwXGubxvcfx2Ud34mfH3sbLw6fx/Gsn8fwXbsHllyzoiGPLy0fwuUd34uipCXzq1nWJ9kfx3e2H8IXvv4LT56fxiX9wVcuxR3cM44EnD+CBJw902PqXLwzjc4/uxOiZSfzWzdekTv+uTc8CSC5XANj0Nwfx1W37QAA+MrAKAHD7N55qOX/HGyfxO999GR/+hRP42kfeDwDY+K3WNL7x+H78tyeGsLCnG5/e/BImZ2Yj07/16/9v7txfC+oNAP7e1ZfhmQMn5raT7P/yD3fjkR3DyuHb+af3P4O3xidazvvYn23HRfO7sPcPag/YX/z+K/jhS0dwVf8i/NzKS1vOPzY+gd/6ixdw/dpl+O4nb4xM51f+cyO/UfyzP36mI8wvf+3Jln3jE9P4t//zBfzdFUvwSuAYdfMMAL/5nUH0Le7B4O9+MNa22Vluub6b+eSDO1KnDwB3hlz7v/TVJwEAj+08iu1fvDUxjvZ2mieFCqrMvImZB5h5oL8/cfWsEuMT0wCA0TOTseGGx2p31smZWg/zzZO1nk79Dt/cwyubRp6mcDiweyqiZ3zqXK0HdvJsfP6TGKvHc66zRzcWsq+Rfs3Wk2fie4ImORGkdfr8dGSYM5O1J7ljIT24OvU2Mz4xPdcudKn3JlV5K8aeLOefn248uR49XQtzbqrzaXYqyOdhTbvTcuFC7enqUNOTRVpGFdpY/Vmufn0Xxcjb2a6/PDDh3A8DWNW0vTLYJwiCIJSECee+BcCvB7NmbgBwmpmjB4kFQRCE3EkccyeihwDcDKCPiIYBfBnAfABg5v8OYCuA2wEMATgH4DfyMlYQBEFQI9G5M/PGhOMM4LeNWSQIgpAS1VlvPiArVAVBECqId85dbuyCUF3k8m7gnXMXBEHwAXHugiAIFcQ7587y4CYIlUWGXRt459wFQRB8wDvnLnd2oQrIlL9w5Mm8gXfOXRAEwQfEuQuCIFQQ75y7PLQJVUBGZcKRcmngnXMXBEHwAe+cuwhRQhXwqRXLNZsO75y7IAiCD4hzFwRBqCDeOXd5wBOqgE9DFTpZ9ahYEvHOuQuCIPiA8869fqdOumNHhbPxRt+wled6aFH547bfXOwxFMYUKqsQVXq2Jnp5WaNI2wOPPSvmmiirZ5slXZ1TZYVqA+eduz5S+YIgVB/nnTtR629SOKA1YMJppdDIE4GCjaj8UdtvLvYYCmMKUkiNkhoEktuMmi0WEnNNmMhzGspK12ecd+76SM9dsIe0wxWuCIcmzNQZunKlXIrAQ+cuCIJQfcS5C4IgVBDvnLs8tgk2kbY5ujIrxMR8fL3ZMkId75y7IAiCD3jn3OXOLthE6nnujjRkM4KqTlhHCqYAvHPugiAIPiDOXRAEoYJ459zlqU2wiao3RzOveNCY5549ucrgnXMXBEHwAe+cuytTyAQ/yLpC1QcBUV75mw4l505EG4hoHxENEdG9IcdXE9ETRPQiEe0kotvNmyoIgmtIZ6o8Ep07EXUBuB/AbQDWA9hIROvbgv0ugM3M/AEAdwH4Y9OGCoIgCOqo9NyvAzDEzAeZeQrAwwDubAvDAC4J/l8C4Ig5E80ij22CTaTt2dbPs749F22f7eVRIN0KYVYAONS0PQzg+rYwvwfg/xLRvwOwCMCtRqzLAesvBkEQBAOYElQ3AvgOM68EcDuAB4moI24iupuIBolocGRkxFDSerg6Big3pWqSWVA1Z4q1aAmqXpSIGirO/TCAVU3bK4N9zXwcwGYAYOa/BbAAQF97RMy8iZkHmHmgv78/ncUZEScpxOHD7JMikdIsDxXnvh3AOiJaS0Q9qAmmW9rCvAngFgAgoveg5tzL6ZoLgiAIyc6dmWcA3ANgG4C9qM2K2U1E9xHRHUGwzwD4BBG9DOAhAB9j6QIJDuJKq537MLqmwUXnr/AVqo7UXxGoCKpg5q0Atrbt+1LT/3sA3GTWtHyQyhcEwQdkhaojyE2pmqQXVIOpkLrnOdj+9QRVoY5/zl1qX4hBmodZXLyZVAXvnLsgCIIPeOfcXe1HSA+oGIqeB5B+hWrwq3m6m4KqTnpyndTxz7lL5QuC4AH+OfeyDUiJ3JOqSfYVqppTIdMlVyo6HTIX85cX/jl3qX0hBmkeZpHyLA/vnLsgCIIPeOjc3exLuGm1exQuOGY8UV9QLVgwNpCenqCaObnK4J1zl8oXBMEH/HPuZRuQEpnlU03S1mvWKZQuIa/8TYd/zl3qXohBnINZ5HorD++cuyAIgg9459xdHd5w02ohibT1yqkF1ZQJlomWohqx28mMZ8M/5162AYLVeOgDhIrivHNX7cFEhbPxWm7Yyo1Xu0b1SNp+c7HHUBhTqIyLq/TUin7viUkbGvUeEkHsNVFOi89S1lof68ghfVdx3rnrIoKZIBSHj07VFpx37kStv0nhOvabNccIjTwRKCFj1Pabiz2GwpiCFFJLKrdaGBO2WIjiNVEkNtniC847d22c7Uk4a7gQR9YvMXkgqGrNc08YvvQJ75y7j5UsqOOi87MZGQYtD+eduwiqrb+52GMojCkqJahm/VhHzMGw/JXV3ptt0Z2WqDcTMjy0TIX0AOlJCHEktQ8fnUQWpLjKw3nnLoJq628u9hgKYwoRVBMQQVVABZy7Lq72JBw1W0gg85eYdIc4LGhIeb6mWATVBv4597INEKxGVbsR1JDiKg/nnbu+oNoa0MbGJ4JqUlpVElTTnsfR58cKqsXUVMd11iyo6sZlIKyPN2XnnbsuHtaxoEFS+5D2o4eNArSNNuWB885dBNXW31zsMRTGFCKoJiCCqoAKOHdtHL1pyxTOapK6F6k4HNmZXrrkdIlLJ08ROCpuH68f75y7j5UsqJPkeHx5pDeFjaXlSxU679xlhWrrby72GApjChFUm84LiyBOUC2q5x6Trr6gamAqpI0Xes4oOXci2kBE+4hoiIjujQjzL4hoDxHtJqL/ZdZMc9hSydIDtBMRVM1iYzO30KRc6E4KQERdAO4H8EEAwwC2E9EWZt7TFGYdgM8DuImZx4jo8rwM7rSv9TcpXMd+s+YYQQTVpLREUI1FBFUBaj336wAMMfNBZp4C8DCAO9vCfALA/cw8BgDMfNysmeZw9a5tYw9IyE7mFaqaLbqsee6tx3Qjy2aLr6g49xUADjVtDwf7mnkXgHcR0dNE9CwRbQiLiIjuJqJBIhocGRlJZ3FGbBkOscQMbWwpv7yQFaqtZK9v+wqs6m24jilBtRvAOgA3A9gI4FtEdGl7IGbexMwDzDzQ399vKGlBEAShHRXnfhjAqqbtlcG+ZoYBbGHmaWZ+DcDPUHP21uHqPVumcFaT9O9zj59FFXWsrNkyrcd0h5Ii9odkRmbLNFBx7tsBrCOitUTUA+AuAFvawvwAtV47iKgPtWGagwbtNIYtlWyJGdrYUn65kTQs42zNpSNrfdvYXiw0KRcSnTszzwC4B8A2AHsBbGbm3UR0HxHdEQTbBuAEEe0B8ASAzzLzibyMzoabVWvjReIS1o6zZhZU46IuL8+6TxRp4tJ5MZpvN2VAYSokADDzVgBb2/Z9qel/BvDp4M9qbLnGrXU2CbhptTrJX2IqyBBLqJ6c6k8dOr9CVRAEQejEO+fuyU1baMPW3lrW1w/EPgGWKqiaSyh6qCVknwiqc/jn3C2pZEvM0MbV4SRVKp49bbLWt43l6cv4u3/O3dGKtfEicQlbiy/9CtVgKmRcmNB9Ra1QTXdMJ3zoVMioOPSSrAT+OXdLatkWO3Rx1GxlEl8cVvUCaCO7oGpfgflSh945d0EQBB/wzrm7etO2sQdkM50faLaz/FKvUI15Z3t7mKR9RWNshWrYvqgvMdmQ8YLxz7lbUsmuOmtLii83Er/E5Gi9paWKK1R9wXnnrvslpo79Zs0xgm9fYtL+pqbKl5gStmvpaiUbek7mMemszjN0vmP0saLae0c5cfSx5LiieuMh+6Li0EuyEjjv3HWxpSdhix26VL3nmiioFmKFPWStbxvbuY025YHzzl2+xNT6m4s9hsKYQuVLTErxpIimvRdpY/ux0Sj5ElPxOO/cdXG15+mm1Wrk0pOKGRawidQrVBXG48IF1YLmuccYpmtB9JBkyLCTrFCdwz/n7mElm6Tq5Zeo3RRjhjXkogmUjI025YHzzl1XUDUtiOVBuKAa/34NpwVV7fAqgirHbgO2CKopp0LWP9YRfjDymB2CqhkrwqNxaOZEzjjv3HWxRU2veg/YVRJvHFJvWtjYzm20KQ+cd+4iqLb+5mKPoTCmKFVQbfPuNrYfG40SQbV4nHfuutiyiEkXN61WI486iRsWsIn0Lw5LPl/nG6OmiUvGlKCqE9aXcfZm/HPuUfsLvvpdbWy2OkljpFwMV1WqmN8KZikU55279gpVZwXViLBtv7nYYyiMqXOVBFWFSFMJqgnbRdGo97gVqnFn5kvnu33C/1eKKyonOitUbbzQc8Z5566Lqz1mQRAEHZx37qYEVZtmy9gsqEbdHKsiqCa+fsCzFaqmXj9gk6Dqqu6mi/POXRd369VZwxPJo046hk8MpWHa1MxfYtJULm0QVHUL0cgKVb0kK4F/zj1qf8G172pjc/fmqEbat4tWlWquUPUD5527PytUI8K2/eZij6Ew0efqna0mqOa0QrVj5Ws2Un+sIy79OUE1JM+pUtMndoWqdn2rpREXty9DMc0479x1sbEnIQiCYBrnnbu5FaoFz3OP6UnYLagmh8mbfAXVpEfAdlssxKigmvF8KwXVsi0oBueduy6uVqyjZishgmr68+I6CeGv/E2XnjYx6Rj7EpNG3FW+fqLwz7lH7RdBVYmqj12KoNpK1vq2srisNMo8zjt3/RWqZgWxPPBNUNUlzQpVnV6eTtrZBdVsZ4bmIeaaKOtjHa2Cqm5cEfs13p3j200ZqIBz18XDOhYEwUOUnDsRbSCifUQ0RET3xoT750TERDRgzsQk21p/k8J17A9+i3b67q5QTQ6TN+WuUG23xUKsElRrMVglqHrSxUt07kTUBeB+ALcBWA9gIxGtDwl3MYBPAXjOtJEmcfXxrMpj3flkrX1YwEwi5gXVlPPcFU6LGbHJHd1XEaeJKzx/UeJrda+fKFR67tcBGGLmg8w8BeBhAHeGhPsDAF8BMGHQPuNEKu+Fd90LTs8QFb7HAEh2PFW+yYaRfYWqffhShSrOfQWAQ03bw8G+OYjoWgCrmPmvDNqmhPYK1fb9xi3KTqigGhW27TcXewyFiT5Xd8ViiYKqQrxa8WU8L15QVRccTRM3FVXfBPUOWWT+bLzQcyazoEpE8wB8HcBnFMLeTUSDRDQ4MjKSNelU+HLXFgTBb1Sc+2EAq5q2Vwb76lwM4H0AniSi1wHcAGBLmKjKzJuYeYCZB/r7+9Nb3YQ5QbVYr6+Sno2CapTZlRFUNZuBRTphA5NGZR2WCc63S1D1AxXnvh3AOiJaS0Q9AO4CsKV+kJlPM3MfM69h5jUAngVwBzMP5mJxRlyoWFNDCK7g1ApVw7ZmXqEa06J1BEfT6K6cjY8r6oBGHHpJVoJE587MMwDuAbANwF4Am5l5NxHdR0R35G2gaRpTsyzqSliEbqlUoRgLfeqwpMAsMSM3bCnnMulWCcTMWwFsbdv3pYiwN2c3Sx3tFapz261CZeGvH1CYKtYqqEZN8Wr9zWxXwr6olYfZBFXd8PqCatgpaWzPukK1s0ebcipkyhWqscdi0tGF2/7L5ZW/IUei3rnTkn6VH4Ob8G+Fqh/1KuSEtB/BFZx37s6uUFUIY6OgGuXcfBFU2w9b+fBvcoWqCKrO4rxz1xZnHKjaUAvtNzs1eTwmdw6fmEnDtK3ZBdXYUAp78iE2X4YEVa0vMVX5AorAeeeuS6MnYVFXwiJEUM05LUsKzBIzcsOWci4T75x7nU7BpeB57pYO3iZZldcUwzKJE4zjwqZKy5ICUxdUM6aT8fzU6Rqciukqzjt3/ZkWDhD6uFld8shb5+yofOLNHF/a8yJmhYSFSdqXB7rz79PEpbMexBeH3ozzzl0XWyrZEjO0saXnaZLWaXKJofM0xToyf4nJwuLyZfzdeeeu/+KwbPOUi6Axh9mPLzHlIYqrzCa34sVhaQXVehsJPxh5rDDHFvPkZGqFauiL0dTM8QLnnbsuNvYkBEEQTFMZ5555nnvBTl8lPSvnuSuEyRvT89ybe7O6grKVczLkS0zxeNLBc965V3H8TGf+biXIIWt5zYYyL6imi1BlOLJcQTXumJ4RWl9iivwYj13XTxH2OO/cdYms/IKdp6vO2rJrxAg67x1xtd7SUskvMZVtQEE479y1BVXDglgezImkvgiq2i+Sipv+l33aXGzalgiqsRZETB6ICJ0LcVNRTQno4U+4avb4gPPOXRcP61gQBMso4mZTGefumqCqcpexU1ANN9xtQbVBoqDaFsAmnXAOo4KqmXnuNgmqvvTinXfu2qvdHKhYrcfNXC0pBpN1Ejn8ZigN02PumV8cpi2oFtNijK5QjRySDBl2cuSCKMJM5527Ljrjd/na4SjOGh5DU+WrajfeoLGAKPx0+wrMRpvywH3nniA4tgVzRFCt56lZUI2/KbktqOqGT+4Vqrzy14Sjziyopp0KmXqFajHEC6rGHqNUd/p3U0YVnLsmHtaxIAiWIfPcNXDuS0yGBNW5sBntUY07yuyqCKpJLcE/QTViv+oFI4JqaTjv3LXryYH3tvsnqJrLReS6gIIEVd285CuoajQkw8QlY+zFYVph7bpSRFDNgXqhypdawvHxS0xFYku7s8SM3LClnMvEeeeedoXqXA8PrdumSdOTaLZpzq6EWQumrE8S4aKEsjIE1biOqYpwHtZ2dGfLdDwgJJ5vpqaihOOWg6HnqU1AmAuv0WtuPa/9+lJLLzwtdZE06npuqeP0pjiF885dF9sezwS3kNYjmEBWqGoggmp+xK1QrW87Lag2z3NPOKe9R2jlw38BK1SV57lbKaj6cYt23rkXJWClSQtIedMISafMJ468U04tKsbMXdcdLlFPM9vxjvCpBdXk4ZVSX/mraVeauHTWLtjmzou4np137rqIoBqPlEq+2NLuLDEjN2wp5zJx3rmrCjZJgqrKjTTdK2IjHmvjzmk6N/GVvwYEzSS74gRHM4Kq5tNXrKBaPxY+fNSyL8T27IJqfAQqdqkQ2+7n8hWT55wF1Ua4zrrSr++I/aFPJhH1r/GKiargvHPXRQRVIRvSfoTsiKCqQXZBtdiLVmX83hZBtZmOnmrB6dfSMi2oNvYlL1Jqt8VCLFqhaqOgmgYXRVjnnbt2mWeab1vQORpCWBE3pdzTSC2ohuzzRlCtpxcdQYkLVA0LqupDm5E3I70kK4GScyeiDUS0j4iGiOjekOOfJqI9RLSTiB4noivNm2oGEVTjkVLJF1vanSVm5IYt5Vwmic6diLoA3A/gNgDrAWwkovVtwV4EMMDMPwfgUQD/ybShUegLqq2Ci+r5zedo2ZcghMal0yKoJsSftWcSl06roNouVGVPX//hK3kaYHukqr38oleopi+3mDKIEU1VplCGhe9MImH4Cq3tKcsK0ei2HycYh7fT9v+VbXCw66/Sc78OwBAzH2TmKQAPA7izOQAzP8HM54LNZwGsNGumOVysJMEeXBx7FezDFkF1BYBDTdvDwb4oPg7g/4QdIKK7iWiQiAZHRkbUrVTAtRWqKlgpqHb0XLnQ9Gtp5bhCNann3WGLhZgUVFM8ebaGC9qHRQWVRkOy0T8kYVRQJaJ/BWAAwFfDjjPzJmYeYOaB/v5+I2lqr1DNklaqc8w0pDTz5bXSLLH15rNCNXqecxaSnb9me0xpl9IwouK+PFAZdswaV9w6h7AjNlHERIhuhTCHAaxq2l4Z7GuBiG4F8EUAv8TMk2bMM09japZFXQmLkFLJF1vanSVm5IYt5VwmKj337QDWEdFaIuoBcBeALc0BiOgDAL4J4A5mPm7ezGSUBdW2FYx6gqo5u1SmihUqqLb9tqaRPN0u2xOR7tNXtCgYdUx1eqmqUNjYTo6z9bgZQTW23UaIis3h835Sa29PWQRVrTNyE1Tt6vmrkOjcmXkGwD0AtgHYC2AzM+8movuI6I4g2FcBLAbwCBG9RERbIqIrHQfrSLAJaT+CAYrwQyrDMmDmrQC2tu37UtP/txq2SxvnVqgqpOeCoFp0+rW0clyhKoJqC1kF1XqB2TRKkk47cw//VqhmSaugKg4fGokKm79QmPsjvMH4TQ1TJcVfdnxKK1Q19ppGZShPPS71/W7IqcXY47xz16UxNcuiroRFSKnkiy3tzhIzcsOWci4T55276jch23t0dguqDdG30QOK6IcZE1SjhVsOCddIP17wVUtbN3yrKB4Wl46gqvP0Y1pQTVtysStNY5qMrqAa+SWmROG5NVxreroCurptaitUU0i6tnX9FXDeueviYiUJ9iDtRzBBEbNvKuPcdQXV+mObzQ9vZQiqaeNxWVDNFId2mgWUlEISRY9aFJ+ezVd2MTjv3FUfMxPnuedgW3N6nfsVzm2e5645i0OXuOGduNkkRua5a68yji6TRr22D5/EPcJ37otOO2k7YbgiZrhAh9h2GzPcpDMMGRdO+XpLUcZZbFD5EleaInfxIz/OO3dd5LFayIKLi1kE+5DZMgroi3FRB5JjMiuo6k0VixSVTL0zJfZYdK/HROpZe69h+1QE1bB4VIXCyOO6vVK94B3paLcjQ/YpXC3RNuiZEJnHpKfMqP0mr2Obcd656+JiJQkWIe1HMEARfqgyzl0E1XIRQVU1TRFUi0mv7CuifJx37rqCKtoEFx1B1eR7oFWGQVQEVWMrMmPSiZsjnPeK0DDiBdVwe+Ie4fUE1XahLjmd1jRNCaqt7TfMiPBhKzWBfi581JBIQgSd60o6j6miMyTJEceyzLNXSddGnHfuujhSL4KlSPsRjCDDMsnofxxBb79umM5zono+eulkmVKpQuMJJro3FJaeiSliWXuvbTtDI40VHjWmyemvQDUbvnFisj1lCqpRPejaMUPXbGjYqOukqY4zCqqu3OCdd+66uDhfVbAHaT2CCYrwQ5Vx7iKolosIqqppiqBaTHplXxHl47xz116h2jY/OO7xsSOOlvjU7rxxgwFJR4oUVOfiT5g8nMsKVd3H9Ng51OFCo7qgmiQUGhZUE8JHxhMXw1ydxAmOiumkHMY0K6iqD22qCKppyjzrCtcycN656+JKxQh2Iu1HMIHMc9cg+5eY9MhaOSrnlzEso/f8Uo6zy3NYRldQtfLh36hRGmpmWLAgnE2jJLJCtaJkqaSi3gOt9foBQ+5V/4s+bWEylatm+Jg53lHDdOYuzqRhG83Y0k6WST1bphgvFduetHtSGgcKyJ6JMiyiFvxz7kGxiuAilIEt7c4SM3LDlnIuE+edu/IrcdsEw1RfYor4P8qmuICx54euUI0XlUwJqqHzkuPEsLlyTG9B6iExjRWKYamE5Vl9pXNErInntw9rpSu3tCtUG3YophPZflWfYDqvT30BXd22yFf+Zki/3QZXRmicd+66uFIxgp1I+xFMIF9i0qB4QTXbmKK1gmpSzzNh2yXqRavz3hHfBFWdXnNcOJtGSUyuNLcZ5527voCVYfggTaNI8wiocUrbaFNqVIaJYs8vWKgGogTV8OEKU9dm8vvetdXhdHYoCKqhw1Y5+KikobysNui9fiAqrLmMmyhDEVRzoF6oIrgIZWBLu7PEjNywpZzLxHnnriqImlih2ny7je/pdqbbGUalN6zwDVVFQTk5rbpd0cfC0imjF9NeJi2CaIRdcflSqa+o47pPCKZXqIa227g1aUs3AAAJ20lEQVS6jFndG5qOQq9ZZaVwpic7nRWqIW2iPWy6J/Bke2zDeeeuixvVItiKtB/BBLJCVQPfXxwm6CMvDisOeXFY8Tjv3AsVVJtfHhQrGHUOE3SGUTs/LO3W/fHHVYl/GVe0HVHzirXSTqlBhtkcNbykKvAlmZL4YrGE8+PS1jsvXDhOijvtauCo9KNsiBN8zQmqYddJVNj483RsyFpnaW3QxXnnros8VguC4ANKzp2INhDRPiIaIqJ7Q473EtF3g+PPEdEa04ZGoSoQGVmh2tLDiz6hVWxSF4Paj2m98jfrXWuuxxvSG1IQVLM+N2iFbstzWK9MZSUoh+Q5u6Ca0LM3tkI13J7mg3FTFM0KqnHXQsjTVZ4rVDmi/lm9jrWM0Imi4J5lonMnoi4A9wO4DcB6ABuJaH1bsI8DGGPmawD8IYCvmDbUFK4o3YKdSPsRjGCJoHodgCFmPsjMUwAeBnBnW5g7AfyP4P9HAdxCBSsaIqgKuoigWhwiqBYPJT1GEtGHAWxg5n8TbP9rANcz8z1NYXYFYYaD7QNBmNGoeAcGBnhwcFDb4M3bD+FbTx2c2z5xdgonz07h4t5uvGPJgsjz9h8/AwBY3NuNM5MzAIB1ly/GgZEzmGWgb3EPli7siU37wizj4OhZAMDV/YswL6IBMYChIL2r+haha15nuMmZWbx58tycHc2cPDuFE2ensLCnC+emLgAAll/Si0sWzO+IZ/TMJMbOTeOSBd1Yfkl0/pMYOTOJU+emseSi+bj84t7QNABg9bKF6O2e13Es7DxVpi7M4o0T4WURxrHxCYxPzGDpwvnoW9zbUt5r+xahex5h7Nw0Rs9MzsUZVt5vjU/g7YkZLFvUg5NnpwAAKy69CAt7ujrSrLef5Zf04tj4ZKRtUfXdHk+dqPSSzn/nkgVY1NuNc1MXcPjU+ZZ81cP0Le7F0oWtbWZ8YnrO/riyrsfRXt91mq+Fay5fPHc/qZ+3atlFWNDdhbcnZvDW+ETLufVjqrTnMc62M5MzOHp6oiN/56cvYHjsfKr0AeACMw6OdF77zfWZ1Hab2+nv/eP1+NhNa7VsqENEO5h5IClcd6rYU0JEdwO4GwBWr16dKo5LF87HuuWNQlwH4Kn9o/j76/piz1vbtwjbXz+JG6++DM+/Nob3r1yC3vnzcM3li/H00CiuW7tMKf3e+V2Y30VYufSi2HCLerowOTOLq/oXRYaZR8A7lizAskWdN5V6nmYuMJ5//SR+4cqloXGsW74YT+0fxS8m5D+Jejw3XXNZ6LEf7zmO1ZctxLuWL1Y+T4cuIvQt7kXfxfE32OY0b7y6keai3m5MTl9oKe+f7h/FTdf0zfUau+YRLr+4F5ct7mmJ54arluHtiRkcHDmL969aEprm0oU9GD0ziXdfcTF2HR7Hiksvwt63xnH92mUYOzeNlw6dwlV9i2LrG8Bce7v2yqV49ejbkelFsXLpRdh9ZBw/v/rSuX3MjKsvX4yLF3S3pHHd2vA288yBE7h+7bLYm9CyRT04Nj6B9e+8JDJMT/c89HbPw4qma6FvcS+OnD6P9zad99zBk7j2yqU4OzmD4bHzeN+K6DijmJmdxXuuuAQLe7oSbZtuur6bedfyizGPananYUF3F7rmEVYta+R3xdKL8OS+Edz6nuXo6U5+Wmi00+ROTFZUnPthAKuatlcG+8LCDBNRN4AlAE60R8TMmwBsAmo99zQGf+i978CH3vuONKcKgiB4g8otbDuAdUS0loh6ANwFYEtbmC0APhr8/2EAP2EXX6MmCIJQERJ77sw8Q0T3ANgGoAvAt5l5NxHdB2CQmbcA+FMADxLREICTqN0ABEEQhJJQGnNn5q0Atrbt+1LT/xMAPmLWNEEQBCEt3q1QFQRB8AFx7oIgCBVEnLsgCEIFEecuCIJQQcS5C4IgVJDE1w/kljDRCIA3Up7eByDy1QYVRfLsB5JnP8iS5yuZuT8pUGnOPQtENKjyboUqIXn2A8mzHxSRZxmWEQRBqCDi3AVBECqIq859U9kGlIDk2Q8kz36Qe56dHHMXBEEQ4nG15y4IgiDE4JxzT/pYt6sQ0SoieoKI9hDRbiL6VLB/GRH9NRHtD36XBvuJiL4RlMNOIrq23Bykg4i6iOhFInos2F4bfGR9KPjoek+wv7SPsJuEiC4lokeJ6FUi2ktEN3pQx78TtOldRPQQES2oYj0T0beJ6HjwZbr6Pu26JaKPBuH3E9FHw9JSwSnnrvixbleZAfAZZl4P4AYAvx3k7V4AjzPzOgCPB9tArQzWBX93A3igeJON8CkAe5u2vwLgD4OPrY+h9vF1wKGPsCfwRwB+xMzvBvB+1PJe2TomohUA/j2AAWZ+H2qvDb8L1azn7wDY0LZPq26JaBmALwO4HrXvV3+5fkPQhpmd+QNwI4BtTdufB/D5su3KKa8/BPBBAPsAXBHsuwLAvuD/bwLY2BR+Lpwrf6h91etxAL8C4DHUPu08CqC7vb5R+57AjcH/3UE4KjsPmvldAuC1drsrXscrABwCsCyot8cA/MOq1jOANQB2pa1bABsBfLNpf0s4nT+neu5oNJQ6w8G+ShE8in4AwHMAljPz0eDQWwCWB/9XoSz+C4DPAZgNti8DcIqZZ4Lt5jzN5Tc4fjoI7xJrAYwA+LNgKOpPiGgRKlzHzHwYwNcAvAngKGr1tgPVrudmdOvWWJ275twrDxEtBvCXAP4DM483H+ParbwS05uI6FcBHGfmHWXbUiDdAK4F8AAzfwDAWTQe0wFUq44BIBhSuBO1G9s7ASxC59CFFxRdt645d5WPdTsLEc1HzbH/BTN/L9h9jIiuCI5fAeB4sN/1srgJwB1E9DqAh1EbmvkjAJcGH1kHWvM0l9+4j7BbzjCAYWZ+Lth+FDVnX9U6BoBbAbzGzCPMPA3ge6jVfZXruRndujVW5645d5WPdTsJERFq36Ldy8xfbzrU/PHxj6I2Fl/f/+uB6n4DgNNNj3/Ww8yfZ+aVzLwGtXr8CTP/GoAnUPvIOtCZX6c/ws7MbwE4RER/J9h1C4A9qGgdB7wJ4AYiWhi08XqeK1vPbejW7TYAHyKipcFTz4eCffqULUCkECxuB/AzAAcAfLFsewzm6xdRe2TbCeCl4O921MYbHwewH8CPASwLwhNqM4cOAHgFtdkIpecjZd5vBvBY8P9VAJ4HMATgEQC9wf4FwfZQcPyqsu1OmdefBzAY1PMPACyteh0D+H0ArwLYBeBBAL1VrGcAD6GmK0yj9pT28TR1C+A3g/wPAfiNtPbIClVBEIQK4tqwjCAIgqCAOHdBEIQKIs5dEAShgohzFwRBqCDi3AVBECqIOHdBEIQKIs5dEAShgohzFwRBqCD/HxUnvFdguvkzAAAAAElFTkSuQmCC\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.plot(total_rewards)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.2"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment