{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "> **前言:** 之前讨论了(1步)时序差分方法([ipynb链接](https://github.com/PiperLiu/Reinforcement-Learning-practice-zh/blob/master/practice/05-01-Temporal-Difference-Prediction.ipynb))与蒙特卡洛方法([ipynb链接](https://github.com/PiperLiu/Reinforcement-Learning-practice-zh/blob/master/practice/04-Monte-Carlo-Methods.ipynb))。刚刚学习完 Sutton 的[《强化学习(第二版)》](http://rl.qiwihui.com/zh_CN/latest/chapter1/introduction.html)的第七章:n步自举法。它是时序差分方法与蒙特卡洛方法的折中,一般地,效果要好于二者。\n",
    "\n",
    "*本次笔记不记录公式、算法框架,介绍思想。具体内容请见中文电子书:*\n",
    "\n",
    "[第7章 n 步引导(Bootstrapping)方法](http://rl.qiwihui.com/zh_CN/latest/partI/chapter7/n_step_bootstrapping.html)\n",
    "\n",
    "****\n",
    "\n",
    "### n步自举法与时序差分方法、蒙特卡洛方法\n",
    "\n",
    "![](images/06-01.png)\n",
    "\n",
    "如上图:\n",
    "- 时序差分方法中,下一状态的价值是“估计”出来的;\n",
    "- 蒙特卡洛方法中,下一状态的价值是在整个幕都终止后,更加后续状态的折扣算出来的,是“已知”的;\n",
    "- n步自举法有“部分估计”、“部分已知”的特性。但是,所有n步方法都要在更新之前延迟至n个时刻步长。\n",
    "\n",
    "### 同轨策略下的控制:为什么n步比1步收敛得更快\n",
    "\n",
    "![](images/06-02.png)\n",
    "\n",
    "如上图,取自 Sutton 的书,只有G点有收益,状态到达G点后:\n",
    "- 在1步控制中(即之前所谓的“时序差分学习”),到达G的前1步的“状态-动作”价值得到了增强;\n",
    "- 在10步控制中,到达G的前的第10步就可以“感受”到价值的增强。\n",
    "\n",
    "### 离轨策略下的n步学习:共4种\n",
    "\n",
    "![](images/06-03.png)\n",
    "\n",
    "在[蒙特卡洛方法](https://blog.csdn.net/weixin_42815609/article/details/104025586)中我讨论过“重要度采样率”,用于离轨策略下的学习(包括估值与控制);在[时序差分控制](https://blog.csdn.net/weixin_42815609/article/details/104069627)的“期望Sarsa”中,采用后续状态的动作期望,对节点进行估值。**这两个思想在离轨策略下的n步学习中得以混合、应用。**\n",
    "\n",
    "上图取自 Sutton 的书,从左到右的解释见下表:\n",
    "\n",
    "|名称|介绍|\n",
    "|---|---|\n",
    "|可推广为带控制变量的每次决策型方法|基于后续n步状态的采样率对收益进行学习|\n",
    "|不使用重要度采样:n步树回溯算法|基于后续n步状态的“状态-动作”-收益期望进行学习|\n",
    "|n步期望Sarsa|基于后续第n步状态的“状态-动作”-收益期望进行学习,其他进行重要度采样*|\n",
    "|n步Q(σ)|对后续n步交叉采取重要度采样率与期望进行学习|\n",
    "\n",
    "[*] n步期望Sarsa 与 n步Sarsa略有不同:\n",
    "- 在期望Sarsa中,采样率取$\\rho_{t+1:t+n-1}$而非Sarsa的$\\rho_{t+1:t+n}$;\n",
    "- 因为在期望Sarsa方法中,最有一个状态考虑所有可能的动作,实际采取哪个动作不重要,无需修正。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 代码:n步时序差分预测\n",
    "\n",
    "使用例子 6.2 ,如下图。\n",
    "\n",
    "![](images/06-04.png)\n",
    "\n",
    "n步时序差分预测算法框图如下。\n",
    "\n",
    "![](images/06-05.png)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-01-28T16:09:18.304522Z",
     "start_time": "2020-01-28T16:01:02.458074Z"
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|████████████████████████████████████████████████████████████████████████████████| 100/100 [08:14<00:00,  4.81s/it]\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": [
    "#######################################################################\n",
    "# Copyright (C)                                                       #\n",
    "# 2016-2018 Shangtong Zhang(zhangshangtong.cpp@gmail.com)             #\n",
    "# 2016 Kenta Shimada(hyperkentakun@gmail.com)                         #\n",
    "# Permission given to modify the code as long as you keep this        #\n",
    "# declaration at the top                                              #\n",
    "#######################################################################\n",
    "\n",
    "import numpy as np\n",
    "import matplotlib\n",
    "%matplotlib inline\n",
    "import matplotlib.pyplot as plt\n",
    "from tqdm import tqdm\n",
    "\n",
    "# all states\n",
    "N_STATES = 19\n",
    "\n",
    "# discount\n",
    "GAMMA = 1\n",
    "\n",
    "# all states but terminal states\n",
    "STATES = np.arange(1, N_STATES + 1)\n",
    "\n",
    "# start from the middle state\n",
    "START_STATE = 10\n",
    "\n",
    "# two terminal states\n",
    "# an action leading to the left terminal state has reward -1\n",
    "# an action leading to the right terminal state has reward 1\n",
    "END_STATES = [0, N_STATES + 1]\n",
    "\n",
    "# true state value from bellman equation\n",
    "TRUE_VALUE = np.arange(-20, 22, 2) / 20.0\n",
    "TRUE_VALUE[0] = TRUE_VALUE[-1] = 0\n",
    "\n",
    "# n-steps TD method\n",
    "# @value: values for each state, will be updated\n",
    "# @n: # of steps\n",
    "# @alpha: # step size\n",
    "def temporal_difference(value, n, alpha):\n",
    "    # initial starting state\n",
    "    state = START_STATE\n",
    "\n",
    "    # arrays to store states and rewards for an episode\n",
    "    # space isn't a major consideration, so I didn't use the mod trick\n",
    "    states = [state]\n",
    "    rewards = [0]\n",
    "\n",
    "    # track the time\n",
    "    time = 0\n",
    "\n",
    "    # the length of this episode\n",
    "    T = float('inf')\n",
    "    while True:\n",
    "        # go to next time step\n",
    "        time += 1\n",
    "\n",
    "        if time < T:\n",
    "            # choose an action randomly\n",
    "            if np.random.binomial(1, 0.5) == 1:\n",
    "                next_state = state + 1\n",
    "            else:\n",
    "                next_state = state - 1\n",
    "\n",
    "            if next_state == 0:\n",
    "                reward = -1\n",
    "            elif next_state == 20:\n",
    "                reward = 1\n",
    "            else:\n",
    "                reward = 0\n",
    "\n",
    "            # store new state and new reward\n",
    "            states.append(next_state)\n",
    "            rewards.append(reward)\n",
    "\n",
    "            if next_state in END_STATES:\n",
    "                T = time\n",
    "\n",
    "        # get the time of the state to update\n",
    "        update_time = time - n\n",
    "        if update_time >= 0:\n",
    "            returns = 0.0\n",
    "            # calculate corresponding rewards\n",
    "            for t in range(update_time + 1, min(T, update_time + n) + 1):\n",
    "                returns += pow(GAMMA, t - update_time - 1) * rewards[t]\n",
    "            # add state value to the return\n",
    "            \"\"\"\n",
    "            这里的 if update_time + n <= T\n",
    "            表示如果后续第 n 步状态没有终止,那么对于n步状态之后的状态( n+1, ... , 终止)采用估值\n",
    "            即: value[state[(update_time + n)]]\n",
    "            否则,无需估值。\n",
    "            \"\"\"\n",
    "            if update_time + n <= T:\n",
    "                returns += pow(GAMMA, n) * value[states[(update_time + n)]]\n",
    "            state_to_update = states[update_time]\n",
    "            # update the state value\n",
    "            if not state_to_update in END_STATES:\n",
    "                value[state_to_update] += alpha * (returns - value[state_to_update])\n",
    "        if update_time == T - 1:\n",
    "            break\n",
    "        state = next_state\n",
    "\n",
    "# Figure 7.2, it will take quite a while\n",
    "def figure7_2():\n",
    "    # all possible steps\n",
    "    steps = np.power(2, np.arange(0, 10))\n",
    "\n",
    "    # all possible alphas\n",
    "    alphas = np.arange(0, 1.1, 0.1)\n",
    "\n",
    "    # each run has 10 episodes\n",
    "    episodes = 10\n",
    "\n",
    "    # perform 100 independent runs\n",
    "    runs = 100\n",
    "\n",
    "    # track the errors for each (step, alpha) combination\n",
    "    errors = np.zeros((len(steps), len(alphas)))\n",
    "    for run in tqdm(range(0, runs)):\n",
    "        for step_ind, step in enumerate(steps):\n",
    "            for alpha_ind, alpha in enumerate(alphas):\n",
    "                # print('run:', run, 'step:', step, 'alpha:', alpha)\n",
    "                value = np.zeros(N_STATES + 2)\n",
    "                for ep in range(0, episodes):\n",
    "                    temporal_difference(value, step, alpha)\n",
    "                    # calculate the RMS error\n",
    "                    errors[step_ind, alpha_ind] += np.sqrt(np.sum(np.power(value - TRUE_VALUE, 2)) / N_STATES)\n",
    "    # take average\n",
    "    errors /= episodes * runs\n",
    "\n",
    "    for i in range(0, len(steps)):\n",
    "        plt.plot(alphas, errors[i, :], label='n = %d' % (steps[i]))\n",
    "    plt.xlabel('alpha')\n",
    "    plt.ylabel('RMS error')\n",
    "    plt.ylim([0.25, 0.55])\n",
    "    plt.legend()\n",
    "\n",
    "    plt.show()\n",
    "\n",
    "figure7_2()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "ExecuteTime": {
     "start_time": "2020-01-28T15:56:59.965Z"
    }
   },
   "source": [
    "来自:[Zhang's GitHub](https://github.com/ShangtongZhang/reinforcement-learning-an-introduction/tree/master/chapter07)\n",
    "\n",
    "运行结果:\n",
    "\n",
    "我对代码进行了1处标注。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 其他:数学性\n",
    "\n",
    "本章公式较多,值得一提的是,n步时序差分方法有坚实的数学基础,引用书上的话:在最坏的情况下,采用它的期望值作为对$v_k$的估计可以保证比$V_{k+n-1}$更好;即n步回报的期望的最坏误差能够保证不大于$V_{t+n-1}$的最坏误差的$\\gamma^n$倍($\\gamma \\le 1$)。\n",
    "\n",
    "$$\\max _{s}\\left|\\mathbb{E}_{\\pi}\\left[G_{t: t+n} | S_{t}=s\\right]-v_{\\pi}(s)\\right| \\leq \\gamma^{n} \\max _{s}\\left|V_{t+n-1}(s)-v_{\\pi}(s)\\right|$$\n",
    "\n",
    "但 n 并非越大越好,从代码产生的例子中我们可以看出。\n",
    "\n",
    "此外,更新公式间的递推转换,不予过分关注。\n",
    "\n",
    "另外提一点: Sutton 在第一版中认为“n步算法在实际中不可行”,而见过Cichosz(1995),van Seijen(2016)的研究后,认为其为很实用的算法。"
   ]
  },
  {
   "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.0"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "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()) "
    }
   },
   "types_to_exclude": [
    "module",
    "function",
    "builtin_function_or_method",
    "instance",
    "_Feature"
   ],
   "window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}