{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**摇臂实验**\n",
    "    @author: piperliu\n",
    "    @github: [PiperLiu/Reinforcement-Learning-practice-zh](https://github.com/PiperLiu/Reinforcement-Learning-practice-zh)\n",
    "    @csdn: [piperliu@qq.com的博客](https://blog.csdn.net/weixin_42815609)\n",
    "\n",
    "founded in 2019-12-10"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-12-13T15:54:57.948968Z",
     "start_time": "2019-12-13T15:54:53.762635Z"
    }
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import seaborn as sns\n",
    "import matplotlib.pyplot as plt\n",
    "import pandas as pd\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-12-10T14:08:13.040467Z",
     "start_time": "2019-12-10T14:08:12.697236Z"
    }
   },
   "source": [
    "### 产生摇臂"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-12-13T15:54:58.386473Z",
     "start_time": "2019-12-13T15:54:57.949965Z"
    }
   },
   "outputs": [
    {
     "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": [
    "# 10个摇臂的编号,从0开始\n",
    "K = np.array(range(10))\n",
    "# 摇臂的奖赏:sigma为1的正态分布,mu不同,下面是生成mu的\n",
    "R_mu = np.array([np.random.uniform(-2,2) for i in range(10)])\n",
    "def K_Reward(R_mu_):\n",
    "    return np.random.normal(loc=R_mu_, scale=1.0)\n",
    "\n",
    "# 产生5000个样本,查看摇臂图像\n",
    "demoData = np.array([\n",
    "    [K_Reward(R_mu[i]) for i in range(R_mu.shape[0])]\n",
    "    for j in range(5000)])\n",
    "sns.violinplot(data=demoData, inner=\"quartile\")\n",
    "del demoData"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### epsilon-贪心算法\n",
    "\n",
    "使用增量式计算的样本均值作为指标,公式为,对于每一个动作,有:\n",
    "\n",
    "$$Q_n = \\frac{R_1+R_2+...+R_{n-1}}{n-1}$$\n",
    "\n",
    "程序实现时,使用上述方法计算该指标,$R_{n}$表示这一动作第n次执行时获得的收益。每个动作执行的次数记录在字典count中,实际上较为浪费空间,可以简化为:\n",
    "\n",
    "$$Q_{n+1} = Q_n + \\frac{1}{n} \\left[ R_n - Q_n \\right]$$\n",
    "\n",
    "推导较为简单,略。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-12-13T15:54:58.393424Z",
     "start_time": "2019-12-13T15:54:58.387439Z"
    }
   },
   "outputs": [],
   "source": [
    "def greed_epsilon(R_mu, t, epsilon):\n",
    "    # 输入摇臂分布、测试次数、epsilon\n",
    "    reward = 0\n",
    "    array = []\n",
    "    # 每个摇臂的摇到的次数、价值\n",
    "    count = dict(zip(list(range(R_mu.shape[0])), [0] * R_mu.shape[0]))\n",
    "    Q = dict(zip(list(range(R_mu.shape[0])), [0] * R_mu.shape[0]))\n",
    "    \n",
    "    for i in range(t):\n",
    "        if np.random.uniform(0, 1) < epsilon:\n",
    "            k = np.random.randint(0, R_mu.shape[0])\n",
    "        else:\n",
    "            k = max(Q, key=Q.get)\n",
    "        \n",
    "        reward_current = K_Reward(R_mu_=R_mu[k])\n",
    "        reward += reward_current\n",
    "        Q[k] = (Q[k] * count[k] + reward_current) / (count[k] + 1)\n",
    "        count[k] = count[k] + 1\n",
    "        array.append(reward / (i + 1))\n",
    "    \n",
    "    return array"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-12-13T15:54:58.542811Z",
     "start_time": "2019-12-13T15:54:58.394419Z"
    }
   },
   "outputs": [
    {
     "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": [
    "# excute and plot\n",
    "t = 2000\n",
    "T = np.arange(t)\n",
    "demo_0dot0 = greed_epsilon(R_mu, t, epsilon=0.0)\n",
    "demo_0dot1 = greed_epsilon(R_mu, t, epsilon=0.1)\n",
    "demo_0dot5 = greed_epsilon(R_mu, t, epsilon=0.5)\n",
    "\n",
    "plt.plot(T, demo_0dot0)\n",
    "plt.plot(T, demo_0dot1)\n",
    "plt.plot(T, demo_0dot5)\n",
    "plt.legend((\"epsilon=0.0\", \"epsilon=0.1\", \"epsilon=0.5\"))\n",
    "plt.ylabel(\"average reward\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "如上图,可以注意到,在迭代次数500后,epsilon=0.1的贪心算法效果几乎总比其他两个好。\n",
    "原因可能有:\n",
    "- 比0.0好是因为0.1不陷入局部最优解,总有跳出去“探索exploration”的可能;\n",
    "- 比0.5好是因为0.1能有效利用现有信息,选择较好的摇臂。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "在信息完全的情况下,我们知道,2000步中每次都应该选择R_mu值最高的摇臂,这样在大样本情况下平均收益才是最高的。**如果算法足够聪明的话,它应该在多次迭代后能判断出谁是最优动作,并且总是做出最优动作。**下面测试最优动作。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-12-13T15:54:58.549791Z",
     "start_time": "2019-12-13T15:54:58.543809Z"
    }
   },
   "outputs": [],
   "source": [
    "def greed_epsilon_return_action(R_mu, t, epsilon):\n",
    "    # 输入摇臂分布、测试次数、epsilon\n",
    "    reward = 0\n",
    "    array = []\n",
    "    \n",
    "    optimal_actions = [0]\n",
    "    # 找到最优动作\n",
    "    optimalAction = np.argmax(R_mu)\n",
    "    \n",
    "    # 每个摇臂的摇到的次数、价值\n",
    "    count = dict(zip(list(range(R_mu.shape[0])), [0] * R_mu.shape[0]))\n",
    "    Q = dict(zip(list(range(R_mu.shape[0])), [0] * R_mu.shape[0]))\n",
    "\n",
    "    for i in range(t):\n",
    "        if np.random.uniform(0, 1) < epsilon:\n",
    "            k = np.random.randint(0, R_mu.shape[0])\n",
    "        else:\n",
    "            k = max(Q, key=Q.get)\n",
    "        \n",
    "        reward_current = K_Reward(R_mu_=R_mu[k])\n",
    "        reward += reward_current\n",
    "        Q[k] = (Q[k] * count[k] + reward_current) / (count[k] + 1)\n",
    "        count[k] = count[k] + 1\n",
    "        array.append(reward / (i + 1))\n",
    "        \n",
    "        if k == optimalAction:\n",
    "            optimal_actions.append((optimal_actions[-1] * i + 1) / (i + 1))\n",
    "        else:\n",
    "            optimal_actions.append(optimal_actions[-1] * i / (i + 1))\n",
    "    \n",
    "    optimal_actions.pop(-1)\n",
    "    \n",
    "    return (array, optimal_actions)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-12-13T15:54:58.799331Z",
     "start_time": "2019-12-13T15:54:58.550789Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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x44ysliOdX7+85+zcOFC5s2bx9VXX43neVRUVHDDDTcwf/58zj//fPbt2wfAD37wA2bPns3cuXO57LLLAPjpT3/K9ddff1i669atY9GiRcydO5dLLrmEpqYmAD74wQ9y4403snDhQo4//nheeumlw87tit27d9Pa2spZZ52FiLB06VJ++cvDG2CefPJJli5dioiwaNEimpub2b1795EWT7cU036yQkT+DxATkY8A1wG/6ndJSoiXTeHlPATHeggWy0Cx7Ffr2bCrtV/TnD2hips/Oafb42+++SaPPvooL7/8MuFwmOuuu46HHnqItrbrEYXUAAAO1klEQVQ25s+fz1133cWtt97KsmXL+OEPf8gdd9zBli1biEajNDc395j30qVL+Zd/+RfOPfdcvvGNb7Bs2TK+//3vA5DNZlm1ahVPP/00y5Yt47e//S1vvfUWl156aZdpvfDCC+zcuZNJkyblwyZNmsTOnTsPi7tz504mT558WLzx48f3KG9fKcYg3AR8AXgDuBozkez/9asUJSa+dy0ZERwER0bEwCqLZcTyu9/9jjVr1nDGGWbFnUQiwZgxY3AcJ6+cL7/8cj71qU8BMHfuXD73uc9x8cUXc/HFF3ebbktLC83NzZx77rkAXHnllXz605/OH8+ld/rpp7N161YATjjhBNatW9dtml31F3TVMVxsvKOlmIlpPvDj4Dcs0WwaD3Bs/4HFMqD0VJMvFarKlVdeybe+9a1O4bfddlun/ZxC/fWvf82LL77I8uXLue2221i//shW0IlGowC4rks2a2Y+9eYhTJo0iR07duTDduzYwYQJEw6LO2nSJLZv395rvKOlmFFGb4jI64f8XhKRfxKR+n6XqARIpo00Lq4dYWSxHPOcf/75PP744+zduxeAxsZGtm3bhu/7PP744wA8/PDDfOADH8D3fbZv3855553Hd77zHZqbmzl48GCX6VZXV1NbW5vvH/jZz36W9xa6I+chdPWrqalh/PjxVFZWsnLlSlSVBx98kIsuOvw7YUuWLOHBBx9EVVm5ciXV1dX93lwExTUZPQN4wMPB/mXBfyvwU+CT/S5VP5P1oYVyO8LIYhkBzJ49m9tvv50LLrgA3/cJh8PcfffdxONx1q9fz+mnn051dTWPPvoonudx+eWX09LSgqryN3/zN9TU1HSb9gMPPMA111xDe3s7M2bM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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "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": [
    "# excute and plot\n",
    "t = 2000\n",
    "T = np.arange(t)\n",
    "demo_0dot0 = greed_epsilon_return_action(R_mu, t, epsilon=0.0)\n",
    "demo_0dot1 = greed_epsilon_return_action(R_mu, t, epsilon=0.1)\n",
    "demo_0dot5 = greed_epsilon_return_action(R_mu, t, epsilon=0.5)\n",
    "\n",
    "fig = plt.figure()\n",
    "fig.add_subplot(211)\n",
    "plt.title(\"average reward\")\n",
    "plt.plot(T, demo_0dot0[0])\n",
    "plt.plot(T, demo_0dot1[0])\n",
    "plt.plot(T, demo_0dot5[0])\n",
    "plt.legend((\"epsilon=0.0\", \"epsilon=0.1\", \"epsilon=0.5\"))\n",
    "plt.ylabel(\"average reward\")\n",
    "plt.show()\n",
    "fig.add_subplot(212)\n",
    "plt.title(\"percentage of optimal action\")\n",
    "plt.plot(T, demo_0dot0[1])\n",
    "plt.plot(T, demo_0dot1[1])\n",
    "plt.plot(T, demo_0dot5[1])\n",
    "plt.legend((\"epsilon=0.0\", \"epsilon=0.1\", \"epsilon=0.5\"))\n",
    "plt.ylabel(\"percentage of optimal action\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-12-11T04:49:40.853154Z",
     "start_time": "2019-12-11T04:49:40.844180Z"
    }
   },
   "source": [
    "如上图,应该注意:\n",
    "- 这里的贪心算法并不会把所有摇臂都遍历一遍;\n",
    "- 因此epsilon=0.0的情况要么最优(k=optimal摇臂,并且一开始为正值),要么很差(陷入局部最优)。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 非平稳问题\n",
    "\n",
    "$$Q_{n+1} = Q_n + \\frac{1}{n} \\left[ R_n - Q_n \\right]$$\n",
    "\n",
    "观察上式,可以看出,权重$\\frac{1}{n}$在逐渐减小。对于一个平稳序列而言,这是必要的,因为$\\frac{1}{n}$满足下列条件:\n",
    "\n",
    "$$\\sum^{\\infty}_{n=1} \\alpha_n (a) = \\infty \\text{ and } \\sum^{\\infty}_{n=1} \\alpha^2_n (a) < \\infty$$\n",
    "\n",
    "即,有足够大的步长能克服任何初始条件及随机波动,并且最终步长能变小,保证收敛。\n",
    "\n",
    "**但是,非平稳序列不适合上述规律。**因此提出固定步长的更新规则:\n",
    "\n",
    "$$Q_{n+1} = Q_{n} + \\alpha \\left[ R_n - Q_n \\right]$$\n",
    "\n",
    "其中,步长$\\alpha \\in (0,1]$是一个常数,上式可以推导为“指数近因加权平均”的形式:\n",
    "\n",
    "$$Q_{n+1} = (1-\\alpha )^n Q_1 + \\sum^n_{i=1} \\alpha (1-\\alpha )^{n-i} R_i$$\n",
    "\n",
    "可见,越是新的收益,其对评价指标影响就越大。\n",
    "\n",
    "尽管强化学习应用在平稳序列的场景中较多,业界还是倾向于使用固定步长而非$\\frac{1}{n}$。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 乐观初始值\n",
    "\n",
    "上例中,每台摇臂的初始值都设为$Q_1 (a) = 0$。如果将每台摇臂的初始值都设为$Q_1 (a) = 5$,则贪心算法会去尝试每台摇臂。原因:每台摇臂的一次奖励一般不会达到5之高。因此,在开始时,测试任意一台摇臂,机器都会感到“失望”,转向下一个没用过的摇臂。\n",
    "\n",
    "如此,鼓励了机器对每台摇臂进行测试,这种鼓励试探的技术叫作“乐观初始值”。\n",
    "\n",
    "下面是代码测试:\n",
    "- 以最优动作占比为评价指标;\n",
    "- 采用恒定步长参数;\n",
    "- epsilon=0.1 & 不使用乐观初始值作对比。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-12-13T16:38:01.879892Z",
     "start_time": "2019-12-13T16:38:01.865390Z"
    }
   },
   "outputs": [],
   "source": [
    "def greed_epsilon_encourage_exploration(R_mu, t, epsilon, q):\n",
    "    \n",
    "    reward = 0\n",
    "    array = []\n",
    "    \n",
    "    optimal_actions = [0]\n",
    "    # 找到最优动作\n",
    "    optimalAction = np.argmax(R_mu)\n",
    "    \n",
    "    # 每个摇臂的摇到的次数、价值\n",
    "    count = dict(zip(list(range(R_mu.shape[0])), [0] * R_mu.shape[0]))\n",
    "    Q = dict(zip(list(range(R_mu.shape[0])), [q] * R_mu.shape[0]))\n",
    "\n",
    "    for i in range(t):\n",
    "        if np.random.uniform(0, 1) < epsilon:\n",
    "            k = np.random.randint(0, R_mu.shape[0])\n",
    "        else:\n",
    "            k = max(Q, key=Q.get)\n",
    "        \n",
    "        reward_current = K_Reward(R_mu_=R_mu[k])\n",
    "        Q[k] = Q[k] + 0.1 * (reward_current - Q[k])\n",
    "        \n",
    "        reward += reward_current\n",
    "        array.append(reward / (i + 1))\n",
    "        \n",
    "        if k == optimalAction:\n",
    "            optimal_actions.append((optimal_actions[-1] * i + 1) / (i + 1))\n",
    "        else:\n",
    "            optimal_actions.append(optimal_actions[-1] * i / (i + 1))\n",
    "    \n",
    "    optimal_actions.pop(-1)\n",
    "    \n",
    "    return (array, optimal_actions)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-12-13T16:38:03.272756Z",
     "start_time": "2019-12-13T16:38:02.912000Z"
    }
   },
   "outputs": [
    {
     "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": [
    "# excute and plot\n",
    "t = 1000\n",
    "T = np.arange(t)\n",
    "demo_0dot0 = greed_epsilon_encourage_exploration(R_mu, t, epsilon=0.0, q=5)\n",
    "demo_0dot1 = greed_epsilon_encourage_exploration(R_mu, t, epsilon=0.1, q=0)\n",
    "\n",
    "plt.plot(T, demo_0dot0[0])\n",
    "plt.plot(T, demo_0dot1[0])\n",
    "plt.legend((\"epsilon=0.0, Q_1=5.0\", \"epsilon=0.1, Q_1=0.0\"))\n",
    "plt.ylabel(\"percentage of optimal action\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "raw",
   "metadata": {},
   "source": [
    "多次run cell above,“epsilon=0 & 初始值乐观”的结果并不总是比对照组(无乐观初始值)好。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 修正步长\n",
    "\n",
    "如果采样不平均,可以用修正步长:\n",
    "\n",
    "$$\\beta_n = \\frac{\\alpha}{\\overline{o}_n}$$\n",
    "\n",
    "其中,$\\overline{o}_n = \\overline{o}_{n-1} + \\alpha (1 - \\overline{o}_{n-1})$,并且$\\overline{o}_{0} = 0$。此时,可证$Q_n$是对初始值无偏的指数近因加权平均。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 基于置信度上界的动作选择(UCB)\n",
    "\n",
    "基于置信度上界(upper confidence bound, UCB)的动作思想是,基于潜力选择动作。如果一个动作被做过的次数较少,则认为其潜力较大,公式:\n",
    "\n",
    "$$A_t = \\mathop{\\arg \\max}_{a} \\left[ Q_t(a) + c \\sqrt{\\frac{\\ln t}{N_t (a)}} \\right]$$\n",
    "\n",
    "其中,c是大于0的数,决定置信水平。$N_t(a)$是t时刻前动作a被选择的次数。如果$N_t(a)=0$,则a就被认为是满足最大化条件的动作。可以看出,有关系:\n",
    "\n",
    "$$t = \\sum_a N_t (a)$$\n",
    "\n",
    "下面是代码测试,评价指标为平均收益,对照组为:\n",
    "- 参数不同的c;\n",
    "- epsilon-贪心算法。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-12-13T15:54:58.924996Z",
     "start_time": "2019-12-13T15:54:58.916062Z"
    }
   },
   "outputs": [],
   "source": [
    "def greed_epsilon(R_mu, t, epsilon):\n",
    "    # 输入摇臂分布、测试次数、epsilon\n",
    "    reward = 0\n",
    "    array = []\n",
    "    # 每个摇臂的摇到的次数、价值\n",
    "    count = dict(zip(list(range(R_mu.shape[0])), [0] * R_mu.shape[0]))\n",
    "    Q = dict(zip(list(range(R_mu.shape[0])), [0] * R_mu.shape[0]))\n",
    "    \n",
    "    for i in range(t):\n",
    "        if np.random.uniform(0, 1) < epsilon:\n",
    "            k = np.random.randint(0, R_mu.shape[0])\n",
    "        else:\n",
    "            k = max(Q, key=Q.get)\n",
    "        \n",
    "        reward_current = K_Reward(R_mu_=R_mu[k])\n",
    "        reward += reward_current\n",
    "        Q[k] = (Q[k] * count[k] + reward_current) / (count[k] + 1)\n",
    "        count[k] = count[k] + 1\n",
    "        array.append(reward / (i + 1))\n",
    "    \n",
    "    return array\n",
    "\n",
    "def ucb_c(R_mu, t, c):\n",
    "    reward = 0\n",
    "    array = []\n",
    "    N_list = list(range(R_mu.shape[0]))\n",
    "    Q_list = list(range(R_mu.shape[0]))\n",
    "    \n",
    "    for i in range(t):\n",
    "        \n",
    "        try:\n",
    "            Action = N_list.index(0)\n",
    "        except ValueError:\n",
    "            t = sum(N_list)\n",
    "            polynomial = [Q_list[a] + c * (np.log(t) / N_list[a]) ** 0.5\n",
    "                             for a in range(R_mu.shape[0])]\n",
    "            Action = np.argmax(polynomial)\n",
    "        \n",
    "        reward_current = K_Reward(R_mu_=R_mu[Action])\n",
    "        reward += reward_current\n",
    "        Q_list[Action] = (Q_list[Action] * N_list[Action] + reward_current) / (N_list[Action] + 1)\n",
    "        N_list[Action] = N_list[Action] + 1\n",
    "        array.append(reward / (i + 1))\n",
    "    \n",
    "    return array"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-12-13T15:54:59.204247Z",
     "start_time": "2019-12-13T15:54:58.926988Z"
    },
    "scrolled": true
   },
   "outputs": [
    {
     "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": [
    "# excute and plot\n",
    "t = 3000\n",
    "T = np.arange(t)\n",
    "demo_ucb_2 = ucb_c(R_mu, t, c=2)\n",
    "demo_0dot1 = greed_epsilon(R_mu, t, epsilon=0.1)\n",
    "demo_ucb_1 = ucb_c(R_mu, t, c=1)\n",
    "\n",
    "plt.plot(T, demo_ucb_2)\n",
    "plt.plot(T, demo_0dot1)\n",
    "plt.plot(T, demo_ucb_1)\n",
    "plt.legend((\"UCB c=2\", \"greed epsilon=0.1\", \"UCB c=1\"))\n",
    "plt.ylabel(\"average reward\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "如上,与书上不同,ucb确实有优势,但是优势体现在2000次(甚至更多)迭代后,greed平稳,而ucb的指标仍处于上升趋势。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-12-11T13:42:28.287902Z",
     "start_time": "2019-12-11T13:42:28.282925Z"
    }
   },
   "source": [
    "### 梯度赌博机算法\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### soft分布于偏好函数$H_t(a)$的更新\n",
    "\n",
    "偏好函数本身的值并不重要,重要的是一个动作相比于另一个动作的偏好,因此,选择动作的概率分布使用softmax分布:\n",
    "\n",
    "$$Pr_{A_t = a} = \\frac{e^{H_t(a)}}{\\sum_{b=1}^{k} e^{H_t(b)}} = \\pi_t(a)$$\n",
    "\n",
    "$\\pi_t(a)$表示动作a在t时刻被选择的概率,所有偏好函数的初始值都相同(可为0)。\n",
    "\n",
    "**可以证明,在两种动作的情况下,softmax分布与通常在统计学和人工神经网络中使用的logistic或sigmoid函数给出的结果相同。** 这里我未证明。\n",
    "\n",
    "则,偏好函数更新遵守如下规则:\n",
    "\n",
    "|$H_{t+1}(A_t) = H_t(A_t) + \\alpha (R_t - \\overline{R_t})(1-\\pi_t(A_t))$|对于被选择的动作$A_t$| (1) |\n",
    "|---|---|---|\n",
    "|$H_{t+1}(a) = H_t(a) - \\alpha (R_t - \\overline(R_t) \\pi_t(a))$|对于所有$a \\not= A_t$| (2) |\n",
    "\n",
    "其中,a是一个大于0的数,表示步长。$\\overline{R_t}$是时刻t内所有收益的平均值,称为基准项。\n",
    "\n",
    "**个人思考:为什么更新偏好函数时要考虑概率呢?** 答:对于(1)式,若本身概率较大,则$H_{t+1}$不会加太多,若本身概率$\\pi_t=1$,则$H_{t+1}$不用更新。\n",
    "\n",
    "上述思考有一定道理,但是这个更新公式的合理性可以在数学上证明。具体请参考我的CSDN博文:[【证明分析】梯度赌博机算法中,偏好函数更新:梯度上升公式是精确梯度上升的随机近似:https://blog.csdn.net/weixin_42815609/article/details/103532804](https://blog.csdn.net/weixin_42815609/article/details/103532804)或参考本仓库中的[markdown文件](../mathematics/梯度赌博机算法中,偏好函数更新:梯度上升公式是精确梯度上升的随机近似的证明.md)。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-12-13T13:57:49.244407Z",
     "start_time": "2019-12-13T13:57:49.234408Z"
    }
   },
   "source": [
    "#### 代码测试\n",
    "\n",
    "首先,修改一下K摇臂的奖励:均值从0改为+4。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-12-13T15:54:59.611158Z",
     "start_time": "2019-12-13T15:54:59.206243Z"
    }
   },
   "outputs": [
    {
     "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": [
    "# 摇臂的奖赏:sigma为1的正态分布,mu不同,下面是生成mu的\n",
    "R_mu_grad = np.array([np.random.uniform(2,6) for i in range(10)])\n",
    "def K_Reward(R_mu_):\n",
    "    return np.random.normal(loc=R_mu_, scale=1.0)\n",
    "\n",
    "# 产生5000个样本,查看摇臂图像\n",
    "demoData = np.array([\n",
    "    [K_Reward(R_mu_grad[i]) for i in range(R_mu_grad.shape[0])]\n",
    "    for j in range(5000)])\n",
    "sns.violinplot(data=demoData, inner=\"quartile\")\n",
    "del demoData"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "测试四种情况:\n",
    "- 含基准项$\\overline(R_t)$,$\\alpha=0.1$;\n",
    "- 含基准项$\\overline(R_t)$,$\\alpha=0.4$;\n",
    "- 不含基准项,$\\overline(R_t)=0$,$\\alpha=0.1$;\n",
    "- 不含基准项,$\\overline(R_t)=0$,$\\alpha=0.4$。\n",
    "\n",
    "首先,为了应用概率选择公式$Pr_{A_t = a} = \\frac{e^{H_t(a)}}{\\sum_{b=1}^{k} e^{H_t(b)}} = \\pi_t(a)$,实现轮盘赌算法。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-12-13T15:54:59.616145Z",
     "start_time": "2019-12-13T15:54:59.612157Z"
    }
   },
   "outputs": [],
   "source": [
    "def RouletteWheelSelection(P):\n",
    "    # @para: P为一维向量,元素依次为概率\n",
    "    # @return: 返回选择了第selection个\n",
    "    \n",
    "    length = len(P)\n",
    "    Probability = .0\n",
    "    \n",
    "    dart = np.random.uniform(0, 1)\n",
    "    selection = 0\n",
    "    \n",
    "    for selection in range(length):\n",
    "        Probability = Probability + P[selection]\n",
    "        if Probability > dart:\n",
    "            break\n",
    "    \n",
    "    return selection"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-12-13T14:15:15.799086Z",
     "start_time": "2019-12-13T14:15:15.795064Z"
    }
   },
   "source": [
    "然后,实现梯度赌博机算法。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-12-13T15:54:59.626162Z",
     "start_time": "2019-12-13T15:54:59.617174Z"
    }
   },
   "outputs": [],
   "source": [
    "def grad_alpha(R_mu, t, alpha, reward_base_exist=True):\n",
    "    reward = 0\n",
    "    reward_base = 0\n",
    "    array = []\n",
    "    \n",
    "    # 找到最优动作\n",
    "    optimalAction = np.argmax(R_mu)\n",
    "    optimal_actions = [0]\n",
    "    \n",
    "    Hobby = [0] * R_mu.shape[0]\n",
    "    Pr = [0] * R_mu.shape[0]\n",
    "    \n",
    "    \n",
    "    for i in range(t):\n",
    "\n",
    "        # 更新动作概率\n",
    "        Pr_denominator = sum([np.exp(Hobby[x]) for x in range(len(Hobby))])\n",
    "        Pr = [(np.exp(Hobby[x]) / Pr_denominator) for x in range(len(Hobby))]\n",
    "        \n",
    "        # 选择动作\n",
    "        Action = RouletteWheelSelection(Pr)\n",
    "        \n",
    "        # 计算收益        \n",
    "        reward_current = K_Reward(R_mu_=R_mu[Action])\n",
    "        if reward_base_exist==True:\n",
    "            reward_base = (reward_base * i + reward_current) / (i + 1)\n",
    "        reward += reward_current\n",
    "        array.append(reward / (i + 1))\n",
    "        \n",
    "        # 更新偏好函数\n",
    "        for x in range(len(Hobby)):\n",
    "            Hobby[x] = Hobby[x] - alpha * (reward_current - reward_base) * Pr[x]\n",
    "        Hobby[Action] = Hobby[Action] + alpha * (reward_current - reward_base) * (1 - Pr[Action])\n",
    "\n",
    "        # 计算最优动作出现概率\n",
    "        if Action == optimalAction:\n",
    "            optimal_actions.append((optimal_actions[-1] * i + 1) / (i + 1))\n",
    "        else:\n",
    "            optimal_actions.append(optimal_actions[-1] * i / (i + 1))\n",
    "        \n",
    "    optimal_actions.pop(-1)\n",
    "            \n",
    "    return (array, optimal_actions)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-12-13T15:55:00.157721Z",
     "start_time": "2019-12-13T15:54:59.627115Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAD8CAYAAACYebj1AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJzs3Xd4VFX6wPHvmZJMeg8hCRggtNACBqQJCIJIU1zFCupa1rWvgoqV1XWtqz8Vd9eGBXFxRRTWAooUUVAIvfcQ0nvPJFPO74+bTBLSJiGTQs7neebJzJ1775zA5L73tPcIKSWKoiiKAqBr6wIoiqIo7YcKCoqiKIqDCgqKoiiKgwoKiqIoioMKCoqiKIqDCgqKoiiKgwoKiqIoioMKCoqiKIqDCgqKoiiKg6GtC9BUwcHBMioqqq2LoSiK0qHs2LEjS0oZ0th+HS4oREVFER8f39bFUBRF6VCEEKed2U81HymKoigOKigoiqIoDiooKIqiKA4drk9BURSNxWIhKSkJs9nc1kVR2hGTyURkZCRGo7FZx6ugoCgdVFJSEj4+PkRFRSGEaOviKO2AlJLs7GySkpLo0aNHs87hsuYjIcQSIUSGEGJ/Pe8LIcSbQojjQoi9QohhriqLopyPzGYzQUFBKiAoDkIIgoKCzqn26Mo+hY+AqQ28fznQu+JxJ/AvF5ZFUc5LKiAoZzvX74TLgoKU8mcgp4FdrgA+kZrfAH8hRFdXlafEUsL/TvwPtfyooihK/dpy9FEEcKba66SKbbUIIe4UQsQLIeIzMzOb9WEvbX+Jx395nJ0ZO5t1vKIoten1emJjYxkyZAjDhg1jy5YtbVqejRs3MmPGjHPepzleeOEFoqOj6du3L2vXrq1zn8WLFxMdHY0QgqysrBYvQ0toy47muuo4dd7GSynfBd4FiIuLa9atfnpJOqDVGBRFaRkeHh7s3r0bgLVr17Jw4UI2bdrUxqVqfQcPHmT58uUcOHCAlJQULr30Uo4ePYper6+x35gxY5gxYwYTJkxom4I6oS1rCklAt2qvI4EUV3+orDvuKIpyjgoKCggICACgqKiISZMmMWzYMAYNGsSqVasAKC4uZvr06QwZMoSBAwfy+eefA7Bjxw7Gjx/PhRdeyGWXXUZqamqDn7Vt2zZGjx7N0KFDGT16NEeOHKm1z6JFi5g7dy4TJ06kd+/evPfee473ioqKuPrqq+nXrx833nijo1n52WefZfjw4QwcOJA777zT6ebmVatWcd111+Hu7k6PHj2Ijo5m27ZttfYbOnQo7T13W1vWFFYD9wohlgMXAflSyoa/CedA1FkxUZTzw1//d4CDKQUtes6YcF+emTmgwX1KS0uJjY3FbDaTmprK+vXrAW2s/FdffYWvry9ZWVmMHDmSWbNmsWbNGsLDw/n2228ByM/Px2KxcN9997Fq1SpCQkL4/PPPeeKJJ1iyZEm9n9uvXz9+/vlnDAYD69at4/HHH+fLL7+std/evXv57bffKC4uZujQoUyfPh2AXbt2ceDAAcLDwxkzZgy//vorY8eO5d577+Xpp58GYO7cuXzzzTfMnDmTV155hWXLltU6/7hx43jzzTdJTk5m5MiRju2RkZEkJyc38i/cPrksKAgh/gNMAIKFEEnAM4ARQEr5b+A7YBpwHCgBbnVVWRRFcY3qzUdbt25l3rx57N+/Hykljz/+OD///DM6nY7k5GTS09MZNGgQ8+fP59FHH2XGjBlcfPHF7N+/n/379zN58mQAbDYbXbs2POYkPz+fm2++mWPHjiGEwGKx1LnfFVdcgYeHBx4eHlxyySVs27YNf39/RowYQWRkJACxsbEkJCQwduxYNmzYwMsvv0xJSQk5OTkMGDCAmTNnsmDBAhYsWFBveeqqUXTUkWEuCwpSyusbeV8C97jq8xWlM2nsjr41jBo1iqysLDIzM/nuu+/IzMxkx44dGI1GoqKiMJvN9OnThx07dvDdd9+xcOFCpkyZwuzZsxkwYABbt251+rOeeuopLrnkEr766isSEhLqbaM/+8Jc+drd3d2xTa/XY7VaMZvN3H333cTHx9OtWzcWLVrkGO/fWE0hMjKSM2eqxs0kJSURHh7u9O/TnnSa3Eeq+UhRXOvw4cPYbDaCgoLIz88nNDQUo9HIhg0bOH1ay9qckpKCp6cnN910E/Pnz2fnzp307duXzMxMR1CwWCwcOHAA0EbrLF68uNZn5efnExGhDVb86KOP6i3TqlWrMJvNZGdns3HjRoYPH17vvpUBIDg4mKKiIlasWOF4b8GCBezevbvW48033wRg1qxZLF++nLKyMk6dOsWxY8cYMWJEE/712o9OExQURWl5lX0KsbGxXHvttXz88cfo9XpuvPFG4uPjiYuLY9myZfTr1w+Affv2MWLECGJjY3n++ed58skncXNzY8WKFTz66KMMGTKE2NhYx9DWw4cPExQUVOtzH3nkERYuXMiYMWOw2Wz1lm/EiBFMnz6dkSNH8tRTTzV49+7v788dd9zBoEGDuPLKKxsMIGcbMGAAc+bMISYmhqlTp/L22287Rh5NmzaNlBRtDE1lrSIpKYnBgwdz++23O/0ZrUV0tMlccXFxsjmL7Ny97m42J2/m7UlvMy5ynAtKpiit69ChQ/Tv37+ti+FSM2bMYOXKlbi5uTX52EWLFuHt7c38+fNdULL2ra7vhhBih5QyrrFjVUI8RVHarW+++aati9DpdLqg0NFqRoqiNM+iRYvauggdUqfpU+iow8MURVFaU6cJCpXUjGZFUZT6dZqgoIakKoqiNK7TBAVFURSlcSooKIrSbCp1dhVnUmdXuu+++/D29m7xMrSETjf6SFGUlqNSZ2ucTZ0NEB8fT15eXhuU0jmdrqaghqQqimuo1NmNp8622WwsWLCAl19+2anztoVOU1NQHc3Kee37xyBtX8ueM2wQXP5ig7uo1NlNS529ePFiZs2a1WgW2LbUaYKCoigtT6XO1jiTOjslJYUvvviCjRs3Nvi7tbVOFxTUPAXlvNTIHX1rUKmzG06dvWvXLo4fP050dDQAJSUlREdHc/z4cad/79bQefoUVOuRoriUSp3dcOrs6dOnk5aWRkJCAgkJCXh6era7gACdsKagKErLqexTAK0JpXrq7JkzZxIXF0dsbGyN1NkLFixAp9NhNBr517/+5Uidff/995Ofn4/VauXBBx9kwIABHD58mDFjxtT63EceeYSbb76Z1157jYkTJ9ZbvsrU2YmJiY7U2UePHq1z3+qps6OiopqdOttgMNRKnf3+++93mEV3Ok3q7PvW38fGMxt545I3mNi9/i+RonQUKnV2w1TqbJU6W1GU84xKnd36Ol1QUB3NitI5qNTZzdNpOprVPAVFUZTGdZqgoCiKojSu8wUF1XqkKIpSr0b7FIQQ7sAfgKjq+0spn3VdsVqeaj5SFEVpnDM1hVXAFYAVKK72UBSlkxNC8PDDDztev/rqq03q4F20aBGvvvqqC0rWPO099fbixYuJjo5GCEFWVlaLlwGcG30UKaWc6pJPVxSlQ3N3d2flypUsXLiQ4ODgti5Oh+Vs6u0xY8YwY8aMetN6tARnagpbhBCDXFYCRVE6LIPBwJ133snrr79e673Tp08zadIkBg8ezKRJk0hMTKzzHHv27KmV3lql3q479fbQoUOJiopy6pzN5UxNYSxwixDiFFCGlkVISikHu7RkLqLmKSjno5e2vcThnMMtes5+gf14dMSjje53zz33MHjwYB555JEa2++9917mzZvHzTffzJIlS7j//vv5+uuvax1fV3rr0NBQlXq7jtTbrcGZoHC5y0vRCs7OlqgoSsvw9fVl3rx5vPnmm3h4eDi2b926lZUrVwLaBfLsoFGprvTW06dPV6m32+ia1WhQkFKeFkIMAS6u2LRZSrnHtcVyHVVTUM5HztzRu9KDDz7IsGHDuPXWW+vdp76LXF3prZctW6ZSb7dRAr1G+xSEEA8Ay4DQisenQoj7nDm5EGKqEOKIEOK4EOKxOt7vLoTYIITYJYTYK4SY1tRfwFlqSKqiuE5gYCBz5szhgw8+cGwbPXo0y5cvB2DZsmWMHTu2zmPrSm+tUm/XTr3dWpzpaL4NuEhK+bSU8mlgJHBHYwcJIfTA22jNTzHA9UKImLN2exL4r5RyKHAd8M+mFF5RlPbj4YcfrjFM8s033+TDDz9k8ODBLF26lDfeeKPO4yrTW48cOdKR3vrGG28kPj6euLg4li1bViP19ogRI4iNjeX555/nySefdKTefvTRRxkyZAixsbFs2bIF0NZ4CAoKqvWZjzzyCAsXLmTMmDHYbLZ6f6e6ylaf6qm3r7zyyman3p46dWqt1NspKSkAjlpFUlISgwcP5vbbb3f6M5wmpWzwAewDTNVem4B9Thw3Clhb7fVCYOFZ+7wDPFpt/y2NnffCCy+UzfHg+gflwI8Gyh8SfmjW8YrS3hw8eLCti9DuTZ8+XZaVlTXr2GeeeUa+8sorLVyi1lHXdwOIl41cX6WUTnU0fwj8LoT4quL1lcAHDexfKQI4U+11EnDRWfssAn6oaI7yAi514ryKoihOUam3m86ZjubXhBAb0YamCuBWKeUuJ85dVyP+2b281wMfSSn/IYQYBSwVQgyUUtprnEiIO4E7Abp37+7ER9dPdrBFhRRFaRudNfV2vUFBCOErpSwQQgQCCRWPyvcCpZQ5jZw7CehW7XUkkHLWPrcBUwGklFuFECYgGMiovpOU8l3gXdBWXmvkc+ukhqQqiqI0rqGawmfADGAHNe/wRcXrno2cezvQWwjRA0hG60i+4ax9EoFJwEdCiP5o/RWZTpdeURRFaVH1BgUp5YyKnz2ac2IppVUIcS+wFtADS6SUB4QQz6J1eKwGHgbeE0L8BS3Q3CJd3L6j5ikoiqLUz5nU2T9JKSc1tq0uUsrvgO/O2vZ0tecHgTHOF1dRFEVxpXrnKQghTBX9CcFCiAAhRGDFIwpom6l2LUDVFBSl5ajU2S3HmdTZle677z68vb1bvAzQ8OS1P6H1J/Sr+Fn5WIU2KU1RlE6uMnW2q3L7dxbVU2evWbOGu+++u95JdfHx8eTl5bmsLPUGBSnlGxX9CfOllD2llD0qHkOklLXnjXcQKt2ForQclTq7dVNn22w2FixYwMsvv+zUeZvDmclrdiGEv5QyD0AIEQBcL6XskCkpVPORcj5K+/vfKTvUsqmz3fv3I+zxxxvdT6XObr3U2YsXL2bWrFmNZoE9F84EhTuklI7mIillrhDiDjpYniJVQ1AU11Cps1sndXZKSgpffPEFGzdubPB3O1fOBAWdEEJUDhWtSHTn5tJSuZKqKCjnIWfu6F1Jpc52fersXbt2cfz4caKjowEoKSkhOjqa48ePO/17O8OZLKlrgf8KISYJISYC/wHWtGgpWoGa0aworqNSZ7s+dfb06dNJS0sjISGBhIQEPD09WzwggHNB4VFgPfBn4B7gJ6DueqCiKJ2WSp3t+tTZrUF0tARxcXFxMj4+vsnHzd80n7UJa3ll3CtM7THVBSVTlNZ16NAh+vfv39bFaNdmzJjBypUrcXNreov3okWL8Pb2Zv78+S4omWvV9d0QQuyQUsY1dqwzM5p7Ay+gLZRjqtwupWws95GiKEqbUqmzm87Z9RSeAV4HLgFupe602B2CGpKqKIozOmvqbGf6FDyklD+hNTWdllIuAia6tliKojijozX/Kq53rt8JZ4KCWQihA44JIe4VQswGQs/pU9uAmqegnG9MJhPZ2dkqMCgOUkqys7MxmUyN71wPZ5qPHgQ8gfuB59CakG5u9ie2MfUHpJwvKhdwz8xUS5AoVUwmk2NiXXM4sxzn9oqnRWj9CR1Sm9YUClJA7w5etYfGKUpzGY1GevRo1nInilIvZ2oKSlPZbbDzE9C7QeIW2PWptn1RftuWS1EUpREqKLjC7mXwzYO1t5/cBD3Ht355FEVRnORMR7PSFMVZsPq+mtv8L9B+JtVOhasoitKe1FtTEEK8RQPp46SU97ukRC7m8nkKax7Tfg6YDZe/DAjwDoG3R8Jp5xN2KYqitIWGmo+ankuiPWuNfubkHbDvC+35Hz4Anb7qvQtGwd4vtP6G6tsVRVHakXqDgpTy49YsSIdns8J7FXP6Zr9b+8LffTTEL4HE3yBqTOuXT1EUxQnO5D4KQcuUenbuow45q9llzUenNlU9H3Jt7fe7V6yq9NE0GDQHpvwNPANBb3RNeRRFUZrBmY7mZcAhoAfwVyAB2N7QAe2RS+cp2Czw6VXa84W1l9ADwL9b1fN9/4V/9IHnw8Ba7rpyKYqiNJEzQSFISvkBYJFSbpJS/hEY2dhB5z1zvvawWeC5YG2bzgju3vUf80Razdd2Kyy72nVlVBRFaSJn5ilULl6aKoSYDqQAzZ9DfT54vitYSmpvfzSh4eOMHlUT2BJ/hyVTtGYnmxX0asqIoihtz5kr0d+EEH7Aw8BbgC/wF5eWqr2ylsOPT9UdECY/13At4WzdL4Ipz8MPT8BncyD2Bhikag2Kcj7LKDCTkF2CQS8oKLWQX2qhzGon3M8DAA83HfmlFvw83AjzM+Gm11Fus9PFR1sT2qB3/dQyZ3IfVa5SkY+WDK9DO6eEeLs/hd//XXv7tFdhxB1NP9+wuVpQOPGT9lizEBYca375FEVpU1JKSi02jqYXkV1URmJOCWkFZk5kFHEotZDkvNJmn1sIePaKgcwdeUELlrg2Z0Yf9QDuA6Kq7y+lnOW6YrU8IVqgoznzaNXze+Ph1M/QfRR0iWne+Ux+0GuSFhAAijPgzHbo5vzaropy3igv1vKF2SxaU6vdBgXJ4N0FjM6lgjZbbBj1OvS6qr93KSUJ2SWk5JWSXVzO6axiym12/DyMuBl0pOabOZpWiE1KSsttRPh70MXPhJRgsdkpt9od58svtVBUZsXdoMNssVFmteNh1GPQC05mFnMqq5gyq71GmQw6QVSwF7Hd/bl1TBS9u/hgt0u8TQZ8TUb0OsgoLENKKLfa8fUwkFVUTmZhGeVWOwa9IKuonCKzlVE9A1vu37sezjQffQ18APwPsDey7/lJSihMhbS92uv7d0FgTwjufe7nvnEFFKVp6THeuRg+vByezmr8OEXpQErKrZzKKuZ4RhEpWbkUWPSUllkwpu/hguyfGWWLp5ftZNX+0h13YUGPnTJhokjvS7ExmHzpidQZ8HWTFAYORurdyCi0sL28O6sK+5JWaMHdoCPY2x03gw6r3U56fhnltvovXQadoFeINzqdwGTUsf5IBkVmK3YpMeh0uBt0SLTg4u/phoebHotNCwYWmx2bXWt9uCDIi7HRwfh5GOkV6k2IjztRQV4EeBobbfaJDvVpkX/nluBMUDBLKd90eUlc7JyGpMZ/AN8+rD0feY8WEFqKTge+4drD3RfKCuDAV1qaDEXpoNLyzfxwMI0Nh9JwS9/DwOItDBSn6C3ymCESKcUdNyy4CRt2dBx1i+Fj/XW4GfX4e7oTKPPIKHfneLEn3UUqQeTjW5pNkC4dabdhL7ITk7sNvdAuyJcCtxkjSYyeyHa/yzlk8afcJvGmBO++ofQJ86Wrv4kuPiZ6BHvhZtCRWViGTUpCKgJIJSklQgisNq2G0CKtDB2IM0HhDSHEM8APQFnlRinlTpeVqr2pDAgAfi4ceHXrd/DvsfDFLVBeAkNvdN1nKUoLsdslOxNz+e1kNofSCklNT6db5s9M1W/nDf0hfCnCbtBT6NMTvU8Etm4z8bIUIty8IHwouuhL6ecZSL8mfGZRmZXUvDzQCcK8DBiOrSF058eEJi4jLukT8O+u/Q2VZEFAD7DGQYIZrGVQmAY2C2EmX4gcDjFXQNggrcmKqqbm1ujUbY+cCQqDgLlo6zJX1sEkTqzTLISYCrwB6IH3pZQv1rHPHGBRxTn3SClvcKrkrcVaVvN1rAuLFzYIwgZrzVSr7oYh12s1CUVpL6SEnJOk71nLvvQykoshOSWV4PIkLtYdYrIeeslEDG5WrJ5dMPSeBT0noOs9GT/PlmsP93Y34N0luGrDkGu1R94ZOPQ/bai3VzD4R8GJ9VraepOfduH3DAI3LyhKh9/fga2Lwc0HQvpAYC/oNw36zei02QacCQqzgZ5SyiZNvRVC6IG3gclAErBdCLFaSnmw2j69gYXAGCllrhCi/az9XJgOZ36D1RXJYCc8DhMedf3n3rUZvvmLlidpyxsw9hxG/2Yd0/pCeoxrufIpjSsvgcxDkLwTjq6FjENg8oWeE6DfdIgcAQa3ti5lk5RlnODM+vcJObkSv/I0ugBdqr1vNxqwh8ViMHlC2DSIuQJDRFzr39T4d4NRd2uPSuMX1L9/cbY20OPUJshJgOPrtIwDPuEw/Da48BYtuHQizgSFPYA/kNHEc48AjkspTwIIIZYDVwAHq+1zB/C2lDIXQErZ1M9oMqdyH6XugXfOupD2n+maAtVlyt+0oLBukdaH0ZQLyMlNcGYbbPhb1TajFzyerI1pU+DYj7D5Neg2AkL6armoznXy4MmNsP9LOP6TNmKmkneYdqEy58Nv/9QeJj/t/3jo3Hb7fyLLizm5Yx2nj+2jW+oP9C7dQ08p+MU+kBP+VxI4+DLG9g4hyGgB71B0XqHoOligA7QlcgfP0R6gjXg69qM29Hz9c7DpZRh0DVz0J+g6uG3L2kqc+UvoAhwWQmynZp9CY0NSI4Az1V4nARedtU8fACHEr2hNTIuklGvOPpEQ4k7gToDu3bs7UeTamtTRnPBL7W3NHXbaHG5e2gVj11L4Wwg8mQEG94aPkVIbvZS2r/Z7lmL4qz88ndP50naXF0PmEdj5MSTFa8/tFZP0E7doP7/+M0TEwdVLtLZou9W5poPCdO0Oc9enVQkRu4/W2qgDoiCkn1ZLq7zwF2XAga9h1yfaQkyHvoGpL0BQrxb/tetUXgJI7ftVSUrIOAj5SZizEyk5sAZrTgLBJSfohaQXcJow1nS5g8BR84jt159xpvO4WUWnh75TtUfGYdj2DuxZrs1R6jYSht8OMbMa/3vswJwJCs8089x1XYXPvk03AL2BCWipMzYLIQZKKfNqHCTlu8C7AHFxcS2b5tRmhRW3QuyN2hcBtHHS1d3wRYt+pFNm/J8WFABe6gELk+qvihekwGv9a26b8jyMukebff33cG3b3v9C7PWuK3N7Ys6HX16HX/6PWl+7S57Q2pWL0iF1r3aXnxwPb1S7EwzuA9IOoTEQ90etLbokW7uI7v8SErdqTXMAnsEw9UW48NaGx9N7h8JFd2oXli1vwKZX4F+j4eKHtf6j6kkTm8Ni1n6PtH2QdVT7XtgqWn0zDmnlFTrwCNBm5wsd0uCOKNYq6CYgSwZz3B5Bnt81BPYbR+yAgUR0G8wFhk52MwEQ2g9mvA6TnoZdy7RRiCtvh7UhMGye9v99rv9n7ZAzM5o3NbZPPZKA6v9ikWh5k87e5zcppQU4JYQ4ghYkXJaFtcaM5rVPaOspl+bCodVVeYnWVYuDvhHQZ4qrilM/vUHLuPpChHanv+xqmLuy9n42K7x1ofbc5A8PH6l5YXLzgqdz4f2J8PVd0Pdy8PBvnd/BFaTUAl3l3W5RJvy0CEbdB0e/1zoZk3dU7e8VAuFDodtF2sXdI6DuJpuDq+Cn57Ragmeg1oxQXqx9Lw6trrmvzqBNWhx8rZYSvce4mnffjdHptL6iwdfBd/Nhw/Ow6SXt/yY0RvsZPtS5f4sz27Sbh6NrtcmPlQwm8Omq3fnqjNoom+DeFJeUkpGeRGqRxF5WjLkgjw32GeR59WRgvz507zWIcX1D8DmfawNN5REAo++FkXfDyQ2w/YOKG47XofcUGHaz9vM8yV/W0HKcv0gpxwohCql5qyUAKaX0beTc24HeFTOik4HrgLOH7nwNXA98JIQIRmtOOokL1DnWeOvi2tvs1Sa5/OUAuDUhn1FLc/eGu3+Hf16kdYZ9fTdc+c+q9+02eO8S7SI5/lG45PG6z6PTabmZPp4BL12gXRwLUuG6zzrO6Kbc09pIkSPfQm6Cts03AswFUF6oNeFU5xOuDQwYdrNz7fYxV2iPs5WXwP4VWq2h8rvQb7pj+OI58e0K134KmYdh69taDeTQ/7QA4eaj3an6X6AFCKMJYmZrwSfjABxbpwWyjANan1GfKVqTVdch0DVWawaraCosMFtYtSuZ5dvPcCClAAB/TyNdfEyMGxnMzP5dGBEViE7XPvs32g2dDqInaY+8RNjxkfa9O7pG6zvqP0O7MbNbtRtN/+4QMUwLKp5B4BHYtPxobUScUy6gxk4uxDTg/9D6C5ZIKZ8XQjwLxEspVwvtSv0PYCpgA56XUi5v6JxxcXEyPr7pK4U+8csTrD6xmufGPMeV0VdqGxf51dxpUb42hvkffbU7trvbyZrKp7doM51B+6Ld9qPWPv55xTyGkP5aWRu7+C2drQ3Pq+6prPY99C5+iTYaqz4h/cAnDPKTtQmAM15vvTZ6VyjO0iYvJm3X/o+LM7UJjaClgBA6sJq11+FDtdExA6+ucbGRUnI0vYjtCTn8eDCd305mU2a1MyDclxmDwxndK4jBkX6dblKWS9gsWi1t58fayCVp12qSBg/tZqU6nUFLa9PnMq026BveqkUVQuyQUsY1ul9jQUEIsVRKObexba3FpUHhqayqtRGu/7yqj6E9SIqH9yfV3u7dBR465HwH8pbFWnND5uGqbTPfhAtvbplythSLWWtaqexX8QjQqugTFkJgD+0O/uAqGPiHDje8s0mk1Po+8s7Anv9oF52ICyH6Uq2mAdjskl+OZ5GcW0p8Qg7xp3NJzNEy+UYGeDCxXyjXXNiNQZF+DX2Scq7s9oqgUPG3WJoL6fu1/q3iLMg+rg00KEjS3g8fClEXQ3kRlBVp2/y7aXMlDO5QVqjNWco6prUGCB2MeVCrkTSDs0HBmUawAWed2ABc2KxStQMNjkL66dmq5+2tAykyDq56D1ZWy8b6xx+0FNxNMfpe7SElfDQDTv8C/7tf6wTte3nLlrk5rOVaMNhZsUT48Dtg8l9rt9m7eXaOTnMhtJqQTxh0G46UksNphXz9azJH0s4gJRxLLyQlX6s9+LgbGNzNjztn1Va4AAAgAElEQVTH9WRkz0B6hXirGkFr0emosW6ZZ2DtOUJT/qZ1+h9dAwe/hi1vaelt3L21i35lU2Uldz8tx5rRU2suboVafUN9CguBxwEPIUQBVaOJyqkYCdQROeYpnD1TGbTJRpX82llQAG0sdcwVsONjLe32ubRrCwG3fqsNt/vqT/Cf67TMry2R5K+5irPg87lVQ0WvX94+AlUbOVORdnnt/jQOpxVSYLaQlFtKTnE5ep2gR7AXBp2gT5gPj03rT7cADwaE+9XI46O0M0Jow9u7xMDFD2k3Z9WDtqW0atSYwV2bkd3K/X71BgUp5QvAC0KIF6SUC1uxTK2jsrpWna1aoDA11o/eRgzu2rDGljLkOq1d/t3xWi3ktnWtP4rCUgor76wa5TP2IZj4ZKeYU1FgtlBkrkjFbLVTZrGxLzmfz35P5PdTOYCWxbN7kCe+JiOT+oUypJs/l/bvQpifc+mklXbs7Fqc0aPN+8Sc+et/XAhxFTAWbRTSZinl164tlus4+lCWVBtmeuW/tAlMSRUjYWfVMSrpfBYeC3/4AL68Dba+dW6pNZqqKENbeS5ll/b6jvVam/l5rKjMyobDGfxvTwo/HEyvc58Ifw8emdqXnsFeDLsggFAfFQCU1uFMUHgbiAb+U/H6LiHEZCnlPa4rVsur1ZeQfVz7OWGhluTu6z9XvVfRgdepDPyD1nG74e/Q53JtOKSrSKkF4JV3aMNLdQYYt0CbVHaetn+fySnhoy0JbDySwYnMYgA83fTcNrYHwd7ulJRb8XI34O9hpHcXb4ZE+nfaLJ1K23ImKIwHBsqKW2whxMdAHbkUOqjK6eomP22UAGhj3DsbIWD6a3D6V22SmyuakcpLYOPf4eBqyDtdtf22H8672kGZ1caa/WlsT8ghObeUn49pCyeN6hnElAFhjIgKZHiPQLzdz48JT8r5w5lv5BGgO1D5V9wN2OuyErU2r4rErMNuhi0Vawl1xpoCgHcITP+Htp7Dh1O1+RDneucuJZjz4MenYecnVduNnnDLt9qwvPOkdpBeYGbdoXRW7EhiV2JVppYIfw/mjbqAm0dFERXchJnPitIGnAkKQcAhIcS2itfDga1CiNXQ8dZqdugyUBtDPPha7bWoVlU3deA0EOdqwGzY+4U2c3jHRxB3a/POU5wN3zyopWEoSqva7u6r5ZIZcUf9x3YQNrtky4ks1h1MZ8ORTMfcgFAfd64aFsHk/l2YHNNFNQMpHYozQeFpl5eiLeiN2gSgyiaS+CVV750nd67Ndu1SbQ7Dmse0nEFNzRC7b4XWaV1d+DAtrUYHroWVltv4+Vgmaw+kUWi28vvJbArMVgBiu/kzJaYL4/uGMKZXsEoZoXRYTiXEE0J0QashAGxrjXUPXM5apiUNqzTnE1h6JczusFMwWo5OD9d8BP8eA/8apeWAcmYZUmu51mG/f4X2+qK7tLkVHaS/IKPQzLZTOUyO6UK51Y6PyUheSTnxCbk8s/oAyXmlNfYfGx3MrNhwLu3fhUCv83hWtdKpNBoUKpbLfAXYiDaB7S0hxAIp5QoXl61F1ZrVaSmtOfmr1yVVWVIV8OkCs9+BT6+CpVfBn35uOC300R/gs2u0537dtFxM7j6tU9Zm2HMmj6W/nWblziTsTqb/ivD3YFCEHxP7hdIt0JNRvYJcW0hFaQPONB89AQyvrB0IIUKAdUCHCgqVqmY0m2vWFJTaoidpeZH+dz+seRRmvlHz/aQdWkru6vrPhGs+bpcTz5JyS7jns13sOZNX5/thviYiAzw4nVOCj7uBk1nF9AvzYcqAMO4c11ONFFI6BWe+5bqzmouyqZHgo2OoNU/h7JqCUrcLb9bmEvzyGuQnwdSXtD6X/CT45KwxBnf9AmGD2qSYDcksLOOh/+5mc8WwUNASxd17STTXDu+mcgMpSjXOBIU1Qoi1VE1euxb4znVFaiWqpuC8iU9qK40dXweLz+ofuPV7uGB025SrHlJKtifksmLHGf4bn+TY3ivEi5f+MJgLLwhQgUBR6uFMR/OCamkuBPCulPIrl5fMlaTUgoKqKThHp9eS0/17LORXW3a7ndUMdp/J44XvDjlyBlUK8DTy8tVDmBzTpY1Kpigdh1ONpFLKlUAda0F2UJUZUlVNwXke/vCX/W1dihoKzBbm/3cPxzKKOJVVXOO9CH8Pbhvbgxsu6o7J2P76NxSlvep0PWeycoYtqKDQAZktNu79bCfrDtUeFd0zxItXrh7C0G7+ap6AojRTpwkKNdqQP5uj/WxoiKXSrlhtdp5atZ//bDtTY/v1I7pz08juxHT1Vf0EitICGlpk5ycp5SQhxEtSykdbs1Aul7pH+6lrx2sTKw4/HUrnto+rlmD9y6V9uG9iNELUMf9EUZRz0lBNoasQYjwwSwixHGqO6ZRS7qz7sPbNMU8BVDqLDuCrXUn85XMtiM+Ji+SFqwajV01DiuIyDQWFp4HHgEjgtbPek8DEWke0Yw2uzay0K8fSC3nov3vYl6zNMB/VM4j3b47DS00eUxSXa2g5zhXACiHEU1LK51qxTC5Vo6agAkW7cSAlnz8t3UFSbs38QiN7BvLhrcPVCCJFaSXOzFN4TggxCxhXsWmjlPIb1xbLdV6L/wez6UQ97O2YxWZn64ls5i3ZVuu9ZbdfxIgegRhV2mlFaVXOJMR7ARgBLKvY9IAQYoyUcqFLS+YiRZZiNnl6MKmkFHzC2ro4nZLVZufmD7fx6/HsGttvvKg7i2YNUIFAUdqQMzfM04FYKaUdHMtx7gI6ZFAAsFY+iZ7UlsXolE5nFzP5tZ8pt9kd2xZc1pd7Loluw1IpilLJ2VYUf6Ayd4Cfi8rSaqQaddTqjmcUcelrmxyvh3Tz59PbRuBjUsOCFaU9cSYovADsEkJsQOuZHUcHriUA2Nq6AJ1IUZmVKa9tIiXf7Nj2xnWxXBEb0YalUhSlPs50NP9HCLERbeU1ATwqpUxr+Kj2p/okJ3sD+ynn7qdD6exJyue3E9lsS6hKTvfhLcO5pF9oG5ZMUZTGOJsQLxVY7eKytBrVfNR8Px1Kp3ugJ139PWotOiOl5M+f7mTNgZr3DEMi/fjyz6PVAvaK0gF0ypGZqvnIect+P80TX9WfHTXIy43s4vJa24d082fWkHBuG9vDlcVTFKWFuTQoCCGmAm8AeuB9KeWL9ex3NfAF2rKf8XXt05IkwLWfuvpjOqzsojIu/Ns65/Y9KyBcGRvOa3NiVZZSRemgnAoKQoixQG8p5YcVazR7SylPNXKMHngbmAwkAduFEKullAfP2s8HuB/4vTm/QHPYBZ0+GZ6UVTO7K/tb8kstDPnrD7X2fXJ6f6YN6oq3yYCPu8Gxf1q+mQ1HMhjVM4jIAA/VPKQo5wFnJq89A8QBfYEPASPwKTCmkUNHAMellCcrzrMcuAI4eNZ+zwEvA/ObVPImqp77yI4AvYEfEn4gx5zDdf2uc+VHtzvlVjv9n16Dza4FhnF9Qhgc4cfiDccd+9wyOopnZsY0mIU0zM/E9SO6u7y8iqK0HmdqCrOBocBOACllSsXdfWMigOrJ75OAi6rvIIQYCnSTUn4jhHBpUKjODiAlD296GIBr+157XqZgLrPa+GZPKg9/oWUZ7d/VFw+jjp2JeTX2+/loJj8fzQRg5pBw3rwu9rz891AUpXHOBIVyKaUUQkgAIYSXk+eu66riaLMQQuiA14FbGj2REHcCdwJ0737ud6Z2gIIUx+t39r7DXUPuOufztief/Z7I41/tq7HtUGqB47mvycCeZ6ZQarEx6R+bSM0389XdoxnaPaC1i6ooSjviTFD4rxDiHcBfCHEH8EfgPSeOSwK6VXsdCaRUe+0DDAQ2VtyVhgGrhRCzzu5sllK+C7wLEBcXVz3NqdNqNB8JAaKq/furY1+dN0GhwGxh9tu/ciKzas3iP43ryf2TevPi94fJKSnn77MH4eeh9al4uhnYulCl+1AURePM5LVXhRCTgQK0foWnpZQ/OnHu7UBvIUQPIBm4Drih2nnzgeDK1xUT5Oa3xugjG9QICvnl+a7+yFaRkFXMhFc3Ol4vuSWOif26OF4/d+XANiiVoigdibOT134EnAkE1Y+xCiHuBdaiDUldIqU8IIR4FoiXUrbZZDgJ4FeVZqHYUlzvvh1BodnCoEU1Rw39/vgkuviqNagVRWkaZ0YfFQJnN9nkA/HAw5Wji+oipfwO+O6sbU/Xs++ExsrSUmwCsrrE1Ng26ONBLLlsCcPDhrdWMc5ZbnE5Q5+rGaunDgjj33MvbKMSKYrS0TlTU3gNrS/gM7TO4+vQ2v+PAEuACa4qnKt86uvL/62o3Y4+f9N8Nl27qY4j2p+iMmuNgBDs7Ub8k5PbsESKopwPnAkKU6WU1YeSviuE+E1K+awQ4nFXFaylVR9imWWoe2nHHHMOUsp2Pxxz+PPryCwsc7z+/oGL6d/Vtw1LpCjK+cKZKah2IcQcIYSu4jGn2nvNGgnUnv2a8mtbF6FB6w+nOwKCr8lAwovTVUBQFKXFOBMUbgTmAhlAesXzm4QQHsC9Lixbq7hv6H01Xn9/6nunj80oyWDlsZU1Uka4kpSSP36kDc76/fFJ7HlmSqt8rqIonYczQ1JPAjPrefuXli1O6zPpTfQJ6MPR3KMArD6xmufHPt/ocTa7jUlfaP0SeWV5/HHgH11aToCVO5MBbd6BGlmkKIorNFpTEEKYhBD3CCH+KYRYUvlojcK1BpPBxJezvmR0+OgmHfflsS8dz1/f8Tq7Mna1dNFqKLfaHekqHri0t0s/S1GUzsuZ5qOlaKONLgM2oc1MLnRloVqTu94dgDcnvkm0v7Z4vMVuafS4Umtpjdfzvp/nsmakB5bvos+TWrPWLaOj8HTrlMtgKIrSCpwJCtFSyqeAYinlx8B0YJBri9V6KoOCu96deTHzAEgtSm30uFfjXwXg1+urOqaX7G/5CtSAp9ewandVdpDHLu/X4p+hKIpSyZmgUHnbnCeEGAj4AVEuK5GLiDrz84FdVq3Y3M1HS9V0pvBMnftWKiovcjz3dfPlu6u0+XnrE9djs7fMum53Ld1B1GPfUlyune+duReS8OJ0TMa6h9MqiqK0BGeCwrtCiADgSbR1mg8CL7m0VC6g19V9Ma3eVNTdV8vA2lhQOJ6nrTvw6nitttDNpxtz+sxhb9ZeYpfGsuzQshrBpinKrDZueO+3Guscr7hrFJcNCGvW+RRFUZrCmaDwk5QyV0r5s5Syp5QyFKi9PFc7V19NwWq3Op6HeIRg0ptILEys9zxHc48y9/u5QFXNAuCmmJscz1/c9iJDPhnS5DIWmC30fXINW05kA9qKZ4eenUpcVGCTz6UoitIczgSFL+vYtqKlC+JqelF3TeGirlWTtYUQRPpEklhQd1CwSzt/WP0Hx+t+gVXt+z38evD7DTVXFD1dcLpJZfzP71Wf+8jUvtx+cU883FRzkaIorafeYSxCiH7AAMBPCHFVtbd8gQ43SF4nasa/EI8Q1s9ZX2u/aP9o9mXtq7Ud4J097zR4Tk+jJ/tu3kdWaRZTVkxh6cGlPDnySafKN/3NzRxI0RbB2fPMFMd6B4qiKK2poZpCX2AG4I82ea3yMQy4w/VFa1ln5zOyybo7hKP9o0kuSqbEUlJje2ZJJv/c808Abup/E5uv3VzvZwV7BDOj5ww+P/J5o/0TAG+sO+YICHPiIlVAUBSlzdRbU5BSrgJWCSFGSSm3tmKZXOLsu/rqfQnVRQdocxVO5J1gUEjVyNvK2csAC4YvqHW+s82LmcdXx79i2spp9PeYzdKrnkEnBEZ9zeOOZxTx+jptNvXKu0czTC2HqShKG3JmFtTximyoUdX3l1K6Pq9DCzq7o7m+mkJvf2228LG8Y46gcDD7ILIi9987l77TaEAoLrPy4Kep2D090RlKOFT6Ff2eGUCPwC78+JfxFJmt+HlqtYG/fL4bgOtHdFcBQVGUNudMUFgFbAbWUbGSZUd09oX83ti6c/lFeEdg0ps4lnsMgJN5J7n2m2sd74+OaDwdxoBn1lY8exq992E8u32EW/AGTqbPpNfj39V5zAtXnTfzARVF6cCcCQqeUspHXV4SF6s++mjfqUS4+aa699Pp6eXfi2N5WlB4YMMDjvcuj7q8wc84mFLAtDer+hoiAzx4ZOr1fJOczla+R9o8KM+6tNZxH97ScVZ7UxTl/OZMUPhGCDGtYmnNDqspC+f0DezLymMrGfRxzbv3Fy5+od5jpJQ1AsJDk/tw/yStKWpE9ENMXvE97iHr+P7WBXgaAnh61QECPd14ZGpfgrzdm/jbKIqiuIYz8xQeQAsMZiFEgRCiUAhR4OqCtbTG+gGqGxA0oNa258c+X++saIDUfLPj+bxRFzgCAkCYVxjfzv4Wo87IewffpKufB+/Ni+OlqwergKAoSrvS6JVSSukjpdRJKU1SSt+K1x1uqa8mBYXgmkHh7UlvM6vXrHr3t9jsjH5Rm/Pw4S3DefaKgbX26e7bnVsH3sq3J79le9p2p8uiKIrSmpxZT0EIIW4SQjxV8bqbEGKE64vWsmoEhUnPNLhvH/8+APi5+3Hn4DsZFzmuwf2f++ag4/m4PiH17nf7oNuJ8I7gr1v/Wiv1tqIoSnvgzO3zP4FRwA0Vr4uAt11WIhfRVf9VL36owX2NeiO/XPcLG+dsrLVcZ10+2aqls9g4fwJ6Xf19Fx4GD54d/SynC07zxs43nCu4oihKK3ImKFwkpbwHMANIKXMBN5eWygWa0tEMWi3BoGu4Hz63uJwHl1etuBYV7NXoeUd0HcH1/a5n2aFlqhlJUZR2x6n1FIQQetBmbwkhQoDm5YVuQ03pU3DW0Od+5OuKBXBe/sNgp497cNiDdPfpzmObHyPHnNPi5VIURWkuZ66UbwJfAaFCiOeBX4C/u7RULlBf6uzmOpCSX+P1nOHd6tmzNk+jJ6+Mf4U8cx4LNy+sd2GeHHNOiy3aoyiK4gxnRh8tAx4BXgBSgSullF+4umDt3W0fxQNwx8U9SHhxepOPjwmK4bGLHmNLyhZil8aSX1YzyJwpOMP4z8cTuzSW+LT4FimzoihKY5wZfTQSSJZSvi2lXAwkCSEuauy4882uxFwyC8sAMFtspBdq8xLmX9a32ee8uvfVTIicAMBDGx+qscznY5sfczy/de2tqv9BUZRW4cyM5n+hpcuuVFzHtnavMqFdc+w4ncMf/qUlip0+qCvf7ksFYGCEL+6G5i+CI4TgrUlv8b8T/+PxXx5n1H9GMS9mHuHe4ezN2gvAhjkbuOOHO7h73d08MuIRZkfPbrQDXFEUpbmc6VMQUkrHFVVKace5YHLeWF3RmQw4AgJAmK9Hi5x/Zq+Z3DFIW6Lik4Of8OK2FwF4Z/I7BHsE88FlHxDkEcSzW59l6NKh/Gv3vxj08SCmrJjC7ozdVPvvURRFOSfOBIWTQoj7hRDGiscDwElXF6w98a1j0ZvYbv68fLXzI44ac/+w+9k1dxfjI8cD8NyY5xgdrmVkDTQFsnz6cvoEaJPqKhf7SS1OZe73c3l086NqMpyiKC3CmTv+u9BGID2JNiz1J+BOZ04uhJgKvAHogfellC+e9f5DwO2AFcgE/iilbNrCxq3grfXHATjx92l8vz+VU5nF/Gl8L9wMLTvM1aAzsHjS4jrf8zf58+WsL9mbuZf39r6Hh9GDu4fcza1rb+X7U99zIu8Er014jQt8L2jRMimK0rk0GBQq5ifcKKW8rqknrjj2bWAykARsF0KsllIerLbbLiBOSlkihPgz8DJwbe2ztQ96nWDG4PA2LcPgkMG8Nektx+sNczbwS/IvPLb5Ma775jqeHPkk03pMa/JkPUVRFGik+UhKaQOuaOa5RwDHpZQnpZTlwPKzzyWl3CClrFwM+Tcgspmf1WKkzUbxtm2O10Vl2rKdVw2LaKsiNWpsxFi+mPEFvfx78djmx1jw8wLyzHltXSxFUTogZ9o/fhVCLBZCXCyEGFb5cOK4CKD6qvVJFdvqcxvwfV1vCCHuFELECyHiMzMznfjo5sv/+msS591M/rffAvDjwTQAfE21+xXak67eXflo6kc8MOwBfkr8idmrZ7MhcUNbF0tRlA7GmaAwGhgAPAv8o+LxqhPH1dV+UecwGSHETUAc8Epd70sp35VSxkkp40JC6s9C6qxVu5PrHbFjL9E6bAvXrdPKVvFrXBPX5pWYRhl0Bm4fdDvLpy8nwBTA/Rvu5/7195NSlNL4wU2UVpzG6zte5/PDn7PpzCbKbeW19im3lVNiKanjaKUpbHYbeeY8lRJFaRWNdjRLKS9p5rmTgOq5HyKBWlcnIcSlwBPAeCllWTM/q1HVg8ADy3fj6WZgckyX2vvZtOai0t17gKrFcyL8W2b4aWvoG9iXz6d/ztJDS/n3nn9z5aor+dPgPzE3Zi5u+nPPZWi2mpm8YnKd7+mFnmj/aPLL80kr1mpZBmHAJm3EBMUws9dM+gT0oYdfD4I9gs+5LO3VroxdrE9cj5SShIIEUotTKbYU42X0YkjIEIaEDCE2NJbuPt1r9f/kmnPZmrKV3Zm72ZG+g4T8BMrtWtDt4tmFQFMg4d7h9AvsR6hnKF29uuJt9CbMK4xSaylbU7ZyMv8kep2eEI8Qcs25RPpEEuIRQmJhIqGeofTw68EFvhfgYeg43+vOqPK61Zp9hI0GBSFEF7RcR+FSysuFEDHAKCnlB40cuh3oLYToASQD11GVfrvy3EOBd4CpUsqM5vwCzZWSV/cQTntBIQDW1FQsqam8tOYwAH51DEttz4x6I38c+EemRk3lpW0v8X87/48VR1cwu/dsZvWaRZhXWLPP/c/d2pDYqVFTmdFzBrlluWw6s4mD2doYghJrCQJBXJc4evn3IqUoBTe9G6cLTjvmYOiEjv6B/RkaOpSYoBisdit6nZ6BwQPp6dfz3P8BzmKz2xpcOe9c5Zflk1SUxJmCM3x1/Cu2pGxxvGfSm4j2jybYNxiL3cL3p77ni6NaphijzkikTyQmvYkAUwAn8086gilAD78eXHrBpfTw64FBZ+BIzhEKyws5nnecnxJ/arBM7np3ymxl6IQOu6w7h2WEdwS9A3rT2783vQN6E+0fTZRfFEZd877v5bZykouSMegMJBclU1RehNVuJa04jYzSDEqtpXgbvR01Sy+jF0EeQUR6R9LVuyueBk+CPYIx6owu/f9qCqvdSlZpFt5Gb4otxVjsFtz0bmSXZlNkKcLT4Im3mzchHiGYDCankm8WW4opthSTV5aHu94dgcBqt5JUlMSBrAPkmHM4knuEvZl7sUs7nkZP3PXuPBz3cIMLfrUEZ4akfgR8iHY3D3AU+BxoMChIKa1CiHuBtWhDUpdIKQ8IIZ4F4qWUq9Gai7yBLyoiYaKU0rW/cYVCs6XO7Vn//nfVPut+ItCrCznF5R12NE+4dzhvTHyDLclbeCX+Fd7a9RZv7XqLCO8I7om9h8t7XN6kGdLrE9fz4YEPmRA5gVfGV7X2XRl9pVPHH845zL6sfZwpOMPm5M18dvizWhesnn496R/UnzHhY7BLOzvSdxDiGcLEbhOJCYpp8P9CSsm3p75l7am1HMo5hNlmxmw1Y7FbCPUMJdwrnP5B/Qk0BRLpHYmfux99AvoQ4ll3s2RSYRJSSiJ9Imt9rsVm4UD2AdYmrGX5keVY7Vot06gzcn2/67l7yN14Gb0w6Aw1jrVLOyfyTrAncw9Hco6QXJRMibWEpMIkwjzDmBA5gdHho+kd0JtIn/qbLQvKC8g155JWnEZReRFpJWkYdUaGhAyhm083PAwe5Jbl4ufmR2ZpJqcLThPuFY7ZZuZU/ilO5p/kRN4JjuUeY3PSZmxSS75o0BmI8o2qESx6B/Qm1COUQksh/u7+jgufXdopt5WzLnEdXxz5gpP5J8krq3uQg0Dg5+5HkaUIgcBN70axpbjOffVCT6hnKF08u+Dl5kWEVwTh3uFEeEcQ4hmCt9GbYI9gx3fHTe9GqbWU9JJ0skqzyC7NJqkoiZSiFHToCPMOI9wrnHDvcMK8wvAx+uBh8KDIUsT+rP2kl6STWJCITdrINeeSWZpJjjmHvLK8estYH183X0x6ExKJn7sfoZ6h+Lr5YtAZ0As9WaVZxKfHU2aru2FEIPAweNDTryc39L8Bk95EqbWUUmsp4V6uH/0oGpsNK4TYLqUcLoTYJaUcWrFtt5Qy1uWlq0NcXJyMj296grhPDnzCK/HaRazw0Iv8aVxPFk7rX2u/Q/20bcY+fSg3uPPQuHvpFujJe/Pizq3g7YDNbmPl8ZVsOrOJTUmbAOju052+gX3585A/0zugNza7jVP5p/jr1r8yp+8cov2j8XbzBuCW728hozQDXzdfvpn9DQGmgHMuU0F5AXsz96IXeoosRWSUZPBDwg8czD6I2Wau85gBQQPwc/fjAt8L8DR4ohM61ieuJ7EwEYu9KtgPDh5MqGcoxZZiQjxDyC/LJ7U4lRN5JxwXwEpRvlF09eqKEAKbtFFUXkS5vZxjuccA7Q81yi8Kd707heWFZJZkOpp0AIaFDmNaj2kEeQQxousIfN061oq15bZyTuWf4ljeMY7nHnf8TCmu3R9l0Bkw6U34ufuRY85xTJzs7tOdwSGDGRo6FLu0E+UXhUlvwqg3EuEVgafRs1bzpV3ayTHnkFyUTEpRCiWWEsc504rTHM1uqcWp9Qab+uiFnjCvMASCtJI0R9Cuj5fRC3e9O0adkSi/KHzdfAk0BeLv7k+IRwgl1hLc9G54GjwpsZYQ7BGMn7sfxZZiSiwlZJZmUmIpIb8s3/HdLSgrILM0k7yyPOzSjtVuxV3vzsiuI+kT0MdRs7BLO3qdni6eXYgJisHL2PjaLE0lhNghpWz0QubMLWKxECKIqvUURgL5DR/S/hWYG/6CbOsRx9C1n+EesJOgaRNbqVSupdfpuabPNVzT5xrs0gmsAiMAABcHSURBVM76xPW8testfjz9Iz+e/rHW/rszdzuem/QmzDYzY8LH8PSop1skIIB2VzU2YmyNbTf2vxG7tLMvax+JBYlM6DYBq93K5uTN7M7YzcHsgxzPPc621G1YpdVRvosjLkav0zMgaAC3DLil3uYHi91CUXkRpwtOk2PO4XTBabalbSOxQAsqRp0Rg86ATuiY0XMGA4MHcrrgNCfzTlJkKSLII4jhYcNx17vTy78XY8PH0s3X+dTp7ZGb3o2+gX3pG1gzwWNReRHH87QgkVmSiZfRixxzjnbxK8933LEPCBrAxZEXN3ndEp3QEewRTLBHMENChjS4b7GlmOSiZNKL0ym1lpJRkoFO6NALPWabGZPepJ3LM5hA90C6eHVxBCG7tJNdmk1KcQqpxakUlhdSainFoDMQExRDV6+udPGq3cfYGTlTUxgGvAUMBPYDIcDVUsq9ri9ebedaU3ikvCtPnXiAGYO7sviGmiNrpZQc7h+D3xVX8I+I8dz+T23Zzk/ue50X7pnaIuVvb+zSzt7MvfyW+hsf7PsAs82Mm86N2wbdxsDggWxO2kyJtYQzhWe4LOoybux/Y1sX2aGovAg7dkosJQSZgjDqO1a/j6K0pharKUgpdwohxgN90YaZHpFS1t0g3wFcaNOaQgrrqCnIUq0a7N6nN18es3N7xfbR+zYA52dQ0AkdsaGxxIbGcteQu2q9Py5yXBuUyjmVzVodralGUdozZ9ZTMAH3A88BfwXuqdjWIVXWiwrq6Gi2FWrrGeRVLEF9x6RHsOqN9Ilfj62oaZ1NiqIoHZEzDYCfoE1eewtYDMQAS11ZKFeoXE9BSm0USFZR7Z5/W57WkZVl1ypQl142gujly7AXFZH72WetVFJFUTo6abMhpURaG+67bI+c6WjuK6Ws3gO0QQixx1UFcjVZMUO5chW16goqUlv8Z+1uiB7HNXGReIT74T1+PNnvv0/AtXPQ+/m1ankVRekYpN1O4Q8/krfyS4p/+RX0erBYEB4eGAID0QcFYQgKQh8UiCEwCL2vD+bDR5BlZnSenlgzs9D5+KAP8EcfEIDeywsM2nBm4eGB3tcX08CBuEW6NrvC/7d35sFxVHce//xmumc0o5FH92VJtuUD4jjEOMQ4iUPIcgQw2CZ4a51whVx7JFUhC9mFUAksVdkQKLIkGxKWHIshi3FMSDApsgRsjKkN+AAbYuPIlm9bt3WMpNGc/faPbo1kXZZkCR3zPlVT0/36afT7zet53+5fv/d7wxGF3SKyTCn1JoCzFOf/jatV40h3+CgSt4gnLUx3z82SWW5/2W+UfBCAHL8dRir4529yZPX1ND3+OEXf+tb7aq9GoxkdSimsjg5cgcCo5xmpWIzO7dsRw8Cdm2t37jk5iGGglCLynj1hM1p1gOZ164hWVWGUlpCzdi2uTD+ICxWPkzjdRPJ0M/G6OiJ795JoboZk0haK3ByS7R24g0FUXR3J1lY7amH1n3BYfN99eNaObyLp4YjCxcAtInLc2a8A9ovIXwCllBq7lWbeByzVc3I0tkc51NjBecVZPL+7hvw9xzgf6DD9AJQ6qS0yzjuP4OrVNK97kuDKVWSct2AiTNdoNA5WJIKYJuK2hx1b4TCRqipUNEYy1EbX7j10vPoqsaNHEdPEnZ+PkZeHkZ+PO99+N/LyMQrscndODu7sbNzBIJG/VhH63z9ihUJ0bH2NxABJOF3BICiFFQqlyrzz51HywPcJrlyJuIaOzCvLwgqFbMEy+nfDyrKwwmFwQlAqGiUZCmHkj39qmOGIwrQadtPQK2xUF4pw8y93EPSZtHXF+a9XXgCgy/Dw95ecmWqh8F++RcfWrdR+5zvMXv906mTUaKYjKpkkduSI3VHm5g7aySnLom3TJpJNTRgFBWe8XMFgvyt0KxpFPJ4RX7knQyHaN28h2Xyarj17aN+8BQB3MIg7N5dkWxvJpqaePzBN/IsXE1y1EiscJtHYROL0aeL19UT27SNx+vSAV+LdiGkifr/9GTd8Fnd2NsnmZhLNzSSbW0g2N6PicTIWLcLIz8Pl9+NftmzYfonLhTs7e+jjgcAZZWbx6FPTjIThDEmddCuhnQtNnT2jjjbssDN7t3XZZRUddvoly+XuN9vZyMmh6J57qLnzTpp+9hgFX//a+2SxJp2xOjuJ1zfQsXUrLl8GZlm53VHn5ODyehCfj9ihQ7S98AdiR44QOVCFkZ0DhoE7EMAoyMedl2/HqQNZiGlglJRglpZilpbi8vuxQiEiVQeIHjxIx5bN4HITP3mS2NGjgN1BGiUlmMXFmCUlGCXFuAMBlKXo2PYaXbveGtB2Mc2UHeLzQSJBvLYWDAMjN9e+Qi+wr9hdfr8tFl4PVqgddzCIKxAgWl1N+M03iTc2Qtz+nbpzc+3wTHAGyZYWks0tKCtJ8NrrcPkycOfm4ikvH7LTVckkydZWEk2nSTQ1pkI2ydZW3NnZBFeuxJ2VNebtORUYftKbaciGXScGLHe7Blb7GSuuofP112l69FF8H/4wgU8uH7CeRjMYVjhM+yuv0P7KZsRwYxQUYlaUYxQUoLq6MIqKcWcH6di6lUhVFR2bt6Bi/dOS90UyMjAKCsi8eBlWpAvVFcGKRojse49EUxNW5/CGVBuFhRhFRRiFhQRv+Cwun594bQ2J2jritbV07thBor4+dZXtzsuj+N7vMuO6lSSbGkk0nvmyojFUpItkewdimgRysnF5vXZnfLqJZGMT0b9WkWxvB8tCRSKIz4eKREAp+wr84x8jUHoZM666Cm9lJa4ZM84anjnr9+V22+GkvDzQ4eAzSDtRGHr+NiQRrhwgpTbY6WuL77uXyP79nLrjDmb9+ikyFugTSjM4Khaj9bnniJ86Rcv6Z7A67Lkw7rw8xDBItrXZHeAAuPx+Mpcvx7/0o/iXLMEoKiZ+4jiJhgascBirsxOVSCIeD8GV1w05Mk7FYiRDIVQiQaKujnhNDfGaGpKhdlx+P565lXjnzMEza5Z9hT+UT4mELTIidkzc6aDdgUw8s2eP7ovq/ux4HDFNVDKJ1d6O+Hy4vN5z+kzNyEg7UeheNCfLa9Ae7RlDbDrrKFguF1d+cPAcKC6fj7Kf/pRjn/88J770ZWatf3rch4hpphbx2loaHv4hibo6wu+8kwp7+JcuxVM5h4yFCwmuWIErMxOlFImGRuInTyDeDKz2EPGaWrwLFuD70KJ+n20WFY7KJvF4Ug8pzeJifItHn89SDGPchmZ3C5K43UOGfzTjR9qJQvc8hfJcP+/V2iMHvnPtQq4p99L6AgQ/fyOrFw+9HrOnbCblv/g5x26+hWM33UzFL36Od968cbdd8/4Qr6sj0XTaieGX2Q8xW1owZ5bhDgycvTJ29KgdWmlspHndk6hYDLO4mMyPLSN79Wp8F12EUVDQ70GkiGAWFY66s9doxpr0EwUFGaaLyxcWpURhcXmQPHeYViC48PxhjSDIWLCAWeue4PhXvsLRG2+i/NGf4L9o/NJrK8si0diEUdi/Y9GcG8mODqIHD1L/wANE39uPig+e2sudk4NZVoanvAxXIIvO7W+SaGhM5c0C8Myby8yHHiLjA/1Ts2s0k530EwWESNzi9svmc/GcXPIDXs4rziJywB7O5vL7h/1ZGeefz+z16znx5a9w7NYvUHjHHeTe9oUx77Rr7v42bb/7HQBmRQXBVSsJrlhxzvHb6Uy8rg6VSGAWF/cbB27FYiTq6+l4bRutGzcSraqyD7jdBK9dgVFYhKfSHpIcrzmFFWrHu2A+idPNxE+eJH7yBF179xGvqcGcWcqMq6/GKCok8MlPYhQUYJb1X5BHo5kqpKUoALhcwifm9UwEUWF7gXlX5vBFAcBTVsbsjb+h9tv30PDgg3S+8QbF996Lp6x/CEopRaK+PjXeWMViWJEI7hl2lk+rq4voocOYpSUYubkAJBobU4LgCgYxCgto+smjNP3nT8hYtIisyy8n8OlL8S5YMCk7onhNDe7s7LOKrVKKji1biNfXY5aWIoaJWVwEIhhFRf3GbA/1OS1P/Zr6hx6yY/mGgTmz1A7dGCZGQQGdr7+eynNlFBSQ/bm1eGfPJnP5crxz5w7bN5VM6vkqmmlHGorCwFjdouAb+ULm7qwsZv74R7Q8/TQND/+Qw9ddR9bll2MWF5Fz002YRfaD6/aXXuLU7d8E7KF/iQZ7XkTWFVeQvfbvqLv/fuLH7InjgUsvJbhqJTV3fxuA2Rs3ph48xuvqCL34R0IvvkjjI4/Q+MgjGCUlBC79FIFLLsH/0aWDxr7Bmf7f2XlGR9s96qM3Hdu20brxWTxzKxGXG6urC3PmTDIWfgDvggWoWMye8j+AGFnRKKe+cTsdW7cC2CGX2bMRtxtlWRh5eXgqK/FWzsHIz6dl/TO0Pf/84N9xbi6eigrMinI8FbPwzKrAU14Opkl0/35cmZkk20JE9u21bZ43l9ybbiZeU0PsxHHiJ09hhcNED1XjCs4g99ZbMCsqmHHFFYjHM+j/HQotCJrpSBqKwsBX05YTEx5J+Kg3IkLujTeS9elPU/dv9xN6wZ4d3bzuSTIWLqTr3XdTY7tdgUBKEADCu3bR/nLPymfB1avpfOONVIcKkLHog6lts7iYvC/eRt4XbyPe0EDntm20b91K2++fp3X9M+B2Ix4PZmEhvgsvxLfkQvwf+Qieykrip05x9IY1JNvaMMvL8V1wAYn6esK7dtn7H1rkzER19WSG3ewadPanOzsb8ftwZ2fjnTcP79x5GIWFtG7YQNeePZizKgiuuJbY0SNED1bbV+giRJRF8ve/P+OzfBd9hNLvfY9Eoz2ZyOrqItnejgqHiR07TuzECcK7dhF64Q/2w6FByPzUJZT96Ee4MqZshneNZsJIG1HoXmHurHcKoxSFbszSUsoe+xmdf/4zidpawm/vpu2551LHZ6y8jpkPPghA9OBBjJISxOOh/aU/Ed65k8I778A9YwYqmSS8fTvtr26l8Ju3DxoaMgsLyV6zhuw1a7CiUbp276bzjTcJ79xJsqWFjm3baOvT+QJkLFqEWVJCeOdOEg0NuIJBMs4/n/CePSRqalP1Kp74b3wXXIDV2YnL7yfZ3k5k/36iVQdQsRiJxgZiJ0+CpQjv2Elo0wupvw1efz2l3//3Qb+rZEcHsSNHiB0/jsvnI3P5clweD55Zs4b8jq1olPipU8SOHSNR34Bn9iw7mVgshjlzpj0HYBKG0jSaqcBZl+OcbIx2Oc4n9j7Bw289zB3VldwX/ypHH1iROpZoaeHgxz4OwLzXXhvz4YGx48dJhtrxzKp436fOK6WIHT1K19tvE37rbRJNjcy4+hqCq1elOk6rsxNXZk+4yYpEQMSenDTC0Eqyo4PY4cMY+fmYpaVj6otGoxk9Y7Yc53RjoPBRtyAAuINjv7Sjp6JizD9zuIgI3jlz8M6ZQ/YNNwxYp7cgAOcUdnEHAvgumFKJczUaTS/OLYHIFEQBH52d07Pf607Ju2CBjkNrNJq0Ju1EISfTw8Z/6Lkz6J1sLPeWmyfCJI1Go5k0pJ0o9I0edScjK7zrX8les2YCDNJoNJrJQ/qJAv0X/YBzi6NrNBrNdCHtRKHvg2bliIJ4tShoNBpN2oiCSs1Q6CMKTvjIlaFztms0Gk3aiEKKvmvGjtGkNY1Go5kOpJ8o9EGLgkaj0fQwrqIgIleJSJWIVIvIXQMc94rIBuf4dhGZPZ72OP/1jL1uURAtChqNRjN+oiAibuBR4GpgIfA5EVnYp9qXgBal1DzgP4AfjJc9vSw7Y0/fKWg0Gk0P43mnsBSoVkodVkrFgGeAVX3qrALWOdvPApfJuGcy6yMKnd3rKAyealqj0WjShfHMfTQTONFr/yRw8WB1lFIJEWkD8oCmsTbG/eRvefjPCQoSezm07dpUebK1DdB3ChqNRgPjKwoDXfH3Tck6nDqIyFeBrwJUjDK5XCCnmHDOMVRgPt7CM7N3eioq9J2CRqPRML6icBIo77VfBtQMUuekiBhAEGju+0FKqceBx8FOnT0aYz579y9G82cajUaTVoznM4WdwHwRmSMiHmAtsKlPnU3Arc72GmCLmmoLPGg0Gs00YtzuFJxnBF8HXgLcwK+UUvtE5H5gl1JqE/BL4CkRqca+Q1g7XvZoNBqN5uyM6yI7SqkXgRf7lH2313YE+NvxtEGj0Wg0wyftZzRrNBqNpgctChqNRqNJoUVBo9FoNCm0KGg0Go0mhRYFjUaj0aSQqTYtQEQagWOj/PN8xiGFxgShfZmcTBdfposfoH3pZpZSquBslaacKJwLIrJLKXXRRNsxFmhfJifTxZfp4gdoX0aKDh9pNBqNJoUWBY1Go9GkSDdReHyiDRhDtC+Tk+niy3TxA7QvIyKtniloNBqNZmjS7U5Bo9FoNEOQNqIgIleJSJWIVIvIXRNtz9kQkaMi8hcR2SMiu5yyXBF5WUQOOu85TrmIyI8d394VkSUTbPuvRKRBRPb2Khux7SJyq1P/oIjcOtD/miBf7hORU07b7BGRa3odu9vxpUpEPtOrfELPPxEpF5FXRWS/iOwTkW845VOuXYbwZSq2S4aI7BCRdxxf/s0pnyMi253veIOz/AAi4nX2q53js8/m44hRSk37F3bq7kNAJeAB3gEWTrRdZ7H5KJDfp+xB4C5n+y7gB872NcAfsVeyWwZsn2DbLwGWAHtHazuQCxx23nOc7ZxJ4st9wJ0D1F3onFteYI5zzrknw/kHlABLnO0s4IBj75RrlyF8mYrtIkDA2TaB7c73/RtgrVP+GPCPzvY/AY8522uBDUP5OBqb0uVOYSlQrZQ6rJSKAc8AqybYptGwCljnbK8DVvcqf1LZvAlki0jJRBgIoJTaRv8V9EZq+2eAl5VSzUqpFuBl4Krxt/5MBvFlMFYBzyilokqpI0A19rk34eefUqpWKfW2s90O7MdeI33KtcsQvgzGZG4XpZTqcHZN56WAvwGedcr7tkt3ez0LXCYiwuA+jph0EYWZwIle+ycZ+iSaDCjgTyLylthrVAMUKaVqwf5hAIVO+VTwb6S2T3afvu6EVX7VHXJhivjihBwuxL4qndLt0scXmILtIiJuEdkDNGCL7CGgVSmVGMCulM3O8TYgjzH0JV1EQQYom+zDrj6hlFoCXA18TUQuGaLuVPSvm8Fsn8w+/QyYCywGaoGHnfJJ74uIBIDfArcrpUJDVR2gbLL7MiXbRSmVVEotxl7HfinwgYGqOe/j7ku6iMJJoLzXfhlQM0G2DAulVI3z3gD8Dvtkqe8OCznvDU71qeDfSG2ftD4ppeqdH7IF/Jye2/RJ7YuImNid6P8opZ5ziqdkuwzky1Rtl26UUq3AVuxnCtki0r0yZm+7UjY7x4PY4c0x8yVdRGEnMN95ou/BfkCzaYJtGhQRyRSRrO5t4EpgL7bN3aM9bgWed7Y3Abc4I0aWAW3dIYFJxEhtfwm4UkRynDDAlU7ZhNPnec312G0Dti9rnREic4D5wA4mwfnnxJ1/CexXSv2w16Ep1y6D+TJF26VARLKdbR9wOfYzkleBNU61vu3S3V5rgC3KftI8mI8j5/180j6RL+zRFAew43X3TLQ9Z7G1EnskwTvAvm57sWOHm4GDznuu6hnB8Kjj21+AiybY/vXYt+9x7CuYL43GduCL2A/MqoHbJpEvTzm2vuv8GEt61b/H8aUKuHqynH/AcuxwwrvAHud1zVRslyF8mYrtcgGw27F5L/Bdp7wSu1OvBjYCXqc8w9mvdo5Xns3Hkb70jGaNRqPRpEiX8JFGo9FohoEWBY1Go9Gk0KKg0Wg0mhRaFDQajUaTQouCRqPRaFJoUdBoNBpNCi0KGo1Go0mhRUGj0Wg0Kf4fNPLOKMQv9HoAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# excute and plot\n",
    "t = 3000\n",
    "T = np.arange(t)\n",
    "demo_R01 = grad_alpha(R_mu_grad, t, 0.1)\n",
    "demo_R04 = grad_alpha(R_mu_grad, t, 0.4)\n",
    "demo_N01 = grad_alpha(R_mu_grad, t, 0.1, False)\n",
    "demo_N04 = grad_alpha(R_mu_grad, t, 0.4, False)\n",
    "\n",
    "plt.plot(T, demo_R01[1])\n",
    "plt.plot(T, demo_R04[1])\n",
    "plt.plot(T, demo_N01[1])\n",
    "plt.plot(T, demo_N04[1])\n",
    "plt.legend((\"Base, alpha=0.1\", \"Base, alpha=0.4\", \"No base, alpha=0.1\", \"No base, alpha=0.4\"))\n",
    "plt.ylabel(\"percentage of optimal action\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "如上图,有基准项的效果总比无基准项的好。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 关联搜索(上下文相关的赌博机)\n",
    "\n",
    "如果允许动作可以影响下一时刻的情景和收益,那么这就是完整的强化学习问题。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 小结\n",
    "\n",
    "多种算法对比一下。\n",
    "\n",
    "对于每种算法,对于每个参数,走3000步,走30次,取平均值。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-12-13T17:06:04.920230Z",
     "start_time": "2019-12-13T17:03:57.790135Z"
    },
    "code_folding": []
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:18: RuntimeWarning: invalid value encountered in double_scalars\n"
     ]
    },
    {
     "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": [
    "T_greed = [2 ** (x - 7) for x in range(6)]\n",
    "T_grad = [2 ** (x - 5) for x in range(8)]\n",
    "T_ucb = [2 ** (x - 3) for x in range(6)]\n",
    "T_optimistic = [2 ** (x - 3) for x in range(6)]\n",
    "\n",
    "reward_greed = [0] * 6\n",
    "reward_grad = [0] * 8\n",
    "reward_ucb = [0] * 6\n",
    "reward_optimistic = [0] * 6\n",
    "\n",
    "for i in range(30):\n",
    "    t = 3000\n",
    "    for j in range(6):\n",
    "        para = T_greed[j]\n",
    "        temp = greed_epsilon(R_mu, t, epsilon=para)\n",
    "        reward_greed[j] = ((reward_greed[j] * i) + temp[-1]) / (i + 1)\n",
    "    for j in range(8):\n",
    "        para = T_grad[j]\n",
    "        temp = grad_alpha(R_mu, t, alpha=para)\n",
    "        temp = temp[0]\n",
    "        reward_grad[j] = ((reward_grad[j] * i) + temp[-1]) / (i + 1)\n",
    "    for j in range(6):\n",
    "        para = T_ucb[j]\n",
    "        temp = ucb_c(R_mu, t, c=para)\n",
    "        reward_ucb[j] = ((reward_ucb[j] * i) + temp[-1]) / (i + 1)\n",
    "    for j in range(6):\n",
    "        para = T_optimistic[j]\n",
    "        temp = greed_epsilon_encourage_exploration(R_mu, t, epsilon=para, q=5)\n",
    "        temp = temp[0]\n",
    "        reward_optimistic[j] = ((reward_optimistic[j] * i) + temp[-1]) / (i + 1)\n",
    "\n",
    "plt.xscale('log')\n",
    "plt.plot(T_greed, reward_greed)\n",
    "plt.plot(T_grad, reward_grad)\n",
    "plt.plot(T_ucb, reward_ucb)\n",
    "plt.plot(T_optimistic, reward_optimistic)\n",
    "plt.legend((\"greed_epsilon\", \"grad_alpha\", \"ucb_c\", \"optimistic, alpha=0.1\"))\n",
    "plt.ylabel(\"percentage of optimal action\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-12-13T16:47:32.373915Z",
     "start_time": "2019-12-13T16:47:32.367938Z"
    }
   },
   "source": [
    "果真如书上所说:这个问题中,ucb效果最好。但是书上同时指出,梯度算法比贪婪更有效。书上的图片见[这篇文章](https://mp.weixin.qq.com/s/ghPSKJ9T4-ayz7H0BCQTWA)的末尾。\n",
    "\n",
    "值得注意的是,[这篇文章](https://mp.weixin.qq.com/s/ghPSKJ9T4-ayz7H0BCQTWA)的复现代码不如我写的代码普适性强。\n",
    "\n",
    "本章结。收获不小。\n",
    "2019-12-14 01:07:57"
   ]
  }
 ],
 "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.0"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": false,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {
    "height": "542.4px",
    "left": "1228.8px",
    "top": "88.4px",
    "width": "307.2px"
   },
   "toc_section_display": false,
   "toc_window_display": false
  },
  "varInspector": {
   "cols": {
    "lenName": 16,
    "lenType": 16,
    "lenVar": 40
   },
   "kernels_config": {
    "python": {
     "delete_cmd_postfix": "",
     "delete_cmd_prefix": "del ",
     "library": "var_list.py",
     "varRefreshCmd": "print(var_dic_list())"
    },
    "r": {
     "delete_cmd_postfix": ") ",
     "delete_cmd_prefix": "rm(",
     "library": "var_list.r",
     "varRefreshCmd": "cat(var_dic_list()) "
    }
   },
   "oldHeight": 122.4,
   "position": {
    "height": "370.8px",
    "left": "220px",
    "right": "20px",
    "top": "283px",
    "width": "798.8px"
   },
   "types_to_exclude": [
    "module",
    "function",
    "builtin_function_or_method",
    "instance",
    "_Feature"
   ],
   "varInspector_section_display": "block",
   "window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}