{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "toc": "true"
   },
   "source": [
    "# Table of Contents\n",
    " <p><div class=\"lev1 toc-item\"><a href=\"#greedy\" data-toc-modified-id=\"greedy-1\"><span class=\"toc-item-num\">1&nbsp;&nbsp;</span>greedy</a></div><div class=\"lev1 toc-item\"><a href=\"#epson-greedy\" data-toc-modified-id=\"epson-greedy-2\"><span class=\"toc-item-num\">2&nbsp;&nbsp;</span>epson-greedy</a></div><div class=\"lev1 toc-item\"><a href=\"#optimistic-exploration-greedy\" data-toc-modified-id=\"optimistic-exploration-greedy-3\"><span class=\"toc-item-num\">3&nbsp;&nbsp;</span>optimistic exploration greedy</a></div><div class=\"lev1 toc-item\"><a href=\"#upper-confidence-bound\" data-toc-modified-id=\"upper-confidence-bound-4\"><span class=\"toc-item-num\">4&nbsp;&nbsp;</span>upper-confidence bound</a></div><div class=\"lev1 toc-item\"><a href=\"#gradient\" data-toc-modified-id=\"gradient-5\"><span class=\"toc-item-num\">5&nbsp;&nbsp;</span>gradient</a></div><div class=\"lev1 toc-item\"><a href=\"#All-Together\" data-toc-modified-id=\"All-Together-6\"><span class=\"toc-item-num\">6&nbsp;&nbsp;</span>All Together</a></div>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 667,
   "metadata": {},
   "outputs": [],
   "source": [
    "import tensorflow as tf\n",
    "import numpy as np\n",
    "import random\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 253,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 假设老虎机标准差为 1/2 倍均值\n",
    "# 假设所获得的奖励符合高斯分布\n",
    "BANDITS = [0.10, -0.20, 1.0, -5.0, 5.0, -20.0, 10.0, 3.0, -2.0, -1.0]\n",
    "def bandit_reward(bandit):\n",
    "    # 所有 bandits 的期望\n",
    "    mu = BANDITS[bandit]\n",
    "    sigma = np.abs(mu)/2.0\n",
    "    return np.random.normal(mu, sigma, 10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 254,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 每次拉老虎机,随机从奖励结果中取一个\n",
    "def pull_bandit(bandit):\n",
    "    banditreward = bandit_reward(bandit)\n",
    "    choose = np.random.randint(0,len(BANDITS)-1)\n",
    "    return banditreward[choose]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 255,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Actual reward: 0.1; Estimated reward: 0.09796116798626889\n",
      "Actual reward: -0.2; Estimated reward: -0.20212861914465624\n",
      "Actual reward: 1.0; Estimated reward: 1.0073434318381687\n",
      "Actual reward: -5.0; Estimated reward: -4.944275196351961\n",
      "Actual reward: 5.0; Estimated reward: 5.044439253974279\n",
      "Actual reward: -20.0; Estimated reward: -19.83753643354374\n",
      "Actual reward: 10.0; Estimated reward: 9.93844320243506\n",
      "Actual reward: 3.0; Estimated reward: 2.9231116309948253\n",
      "Actual reward: -2.0; Estimated reward: -2.016187174943\n",
      "Actual reward: -1.0; Estimated reward: -0.9936313263386887\n"
     ]
    }
   ],
   "source": [
    "# 验证一下, 可以发现基本能够达到期望值\n",
    "for i, rew in enumerate(BANDITS):\n",
    "    result = []\n",
    "    # 重复 1000 次\n",
    "    for j in range(1000):\n",
    "        result.append(pull_bandit(i))\n",
    "    print(\"Actual reward: %s; Estimated reward: %s\" % (rew, np.average(result)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# greedy"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 287,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "获得的总收益:8047,你选择的老虎机期望收益:5.0...\n",
      "\n",
      "你估计的 Q_table: [0.1, -0.3, 1.0, -4.0, 8.3, -16.0, 8.2, 3.7, -1.9, -0.2], 你选择额的最大 Q: 8.3, 5 号老虎机。\n",
      "实际中的 Q_table: [0.1, -0.2, 1.0, -5.0, 5.0, -20.0, 10.0, 3.0, -2.0, -1.0]\n",
      "\n",
      "You haven't chosen the best bandit....\n"
     ]
    }
   ],
   "source": [
    "# 贪心算法\n",
    "\n",
    "total_reward = 0\n",
    "try_reward = []\n",
    "trial = 3\n",
    "ite = 0\n",
    "total_iter = 1000\n",
    "while ite < total_iter:\n",
    "    # 各 三次 实验求平均,然后以贪心算法选择最大的 Q\n",
    "    if ite < trial * len(BANDITS):\n",
    "        for i in range(len(BANDITS)):\n",
    "            ite += 1\n",
    "            reward = round(pull_bandit(i),1)\n",
    "            try_reward.append(reward)\n",
    "            total_reward += reward\n",
    "    else:\n",
    "        Q_table = np.average(np.array(try_reward).reshape(trial, len(BANDITS)), axis=0)\n",
    "        # 保留两位小数\n",
    "        Q_table = list(np.around(Q_table, decimals=1))\n",
    "        Q = max(Q_table)\n",
    "        index = Q_table.index(Q)\n",
    "        ite += 1\n",
    "        total_reward += Q\n",
    "\n",
    "assert sum(try_reward) + Q*(total_iter - trial * len(BANDITS)) - total_reward < 1.0\n",
    "print(\"获得的总收益:%d,你选择的老虎机期望收益:%s...\\n\" % (total_reward, BANDITS[index]))\n",
    "print(\"你估计的 Q_table: %s, 你选择额的最大 Q: %s, %s 号老虎机。\" % (Q_table, Q, index+1))\n",
    "print(\"实际中的 Q_table: %s\\n\" % BANDITS)\n",
    "if index == BANDITS.index(max(BANDITS)):\n",
    "    print(\"You have chosen the best bandit!\")\n",
    "else:\n",
    "    print(\"You haven't chosen the best bandit....\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "贪心算法小结:  \n",
    "\n",
    "注意这个结果是和 bandits 的期望以及标准差相关的。  \n",
    "\n",
    "- BANDITS 期望一定时:如果标准差很小,那么选择基本会限定在最高的几个老虎机上,如果标准差非常大,则有可能选择到其他的老虎机。\n",
    "- BANDITS 标准差一定时:期望相差越大,越容易选到最高的几个老虎机上,期望相差越小,则可能选到其他老虎机。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# epson-greedy"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 674,
   "metadata": {
    "scrolled": false
   },
   "outputs": [],
   "source": [
    "# epson-贪心算法1:上来就探索\n",
    "\n",
    "def epson_greedy(epson):\n",
    "    total_reward = 0\n",
    "    is_best = 0\n",
    "    epson_num = 0\n",
    "    try_reward = []\n",
    "    ite = 0\n",
    "    total_iter = 1000\n",
    "    Q_table = [0] * len(BANDITS)\n",
    "    while ite < total_iter:\n",
    "        if random.random() < epson:\n",
    "            ite += 1\n",
    "            epson_num += 1\n",
    "            choose = np.random.randint(0,len(BANDITS))\n",
    "            rew = pull_bandit(choose)\n",
    "            total_reward += rew\n",
    "            # 更新的值保留两位小数,方便看结果\n",
    "            Q_table[choose] = round(rew, 2)\n",
    "            Q = max(Q_table)\n",
    "            index = Q_table.index(Q)\n",
    "        # 保留两位小数\n",
    "        else:\n",
    "            ite += 1\n",
    "            Q = max(Q_table)\n",
    "            index = Q_table.index(Q)\n",
    "            total_reward += Q        \n",
    "\n",
    "    print(\"共探索了 %s 次.\" % epson_num)\n",
    "    print(\"获得的总收益:%d,你选择的老虎机期望收益:%s...\\n\" % (total_reward, BANDITS[index]))\n",
    "    print(\"你估计的 Q_table: %s, 你选择额的最大 Q: %s, %s 号老虎机。\" % (Q_table, Q, index+1))\n",
    "    print(\"实际中的 Q_table: %s\\n\" % BANDITS)\n",
    "    if index == BANDITS.index(max(BANDITS)):\n",
    "        print(\"You have chosen the best bandit!\")\n",
    "        is_best = 1\n",
    "    else:\n",
    "        print(\"You haven't chosen the best bandit....\")\n",
    "        is_best = 0\n",
    "        \n",
    "    return total_reward, is_best"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 675,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "共探索了 96 次.\n",
      "获得的总收益:9815,你选择的老虎机期望收益:10.0...\n",
      "\n",
      "你估计的 Q_table: [0.11, -0.17, 1.13, -7.44, 5.52, -39.23, 18.85, 3.26, -2.3, -1.1], 你选择额的最大 Q: 18.85, 7 号老虎机。\n",
      "实际中的 Q_table: [0.1, -0.2, 1.0, -5.0, 5.0, -20.0, 10.0, 3.0, -2.0, -1.0]\n",
      "\n",
      "You have chosen the best bandit!\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "(9815.84295988971, 1)"
      ]
     },
     "execution_count": 675,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# epson = 0.1,10% 的概率在探索新的老虎机\n",
    "epson_greedy(0.1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 735,
   "metadata": {},
   "outputs": [],
   "source": [
    "# epson-贪心算法2:先确定一个 Q table 再探索,结合了贪心算法\n",
    "\n",
    "def epson_greedy2(epson):\n",
    "    total_reward = 0\n",
    "    is_best = 0\n",
    "    epson_num = 0\n",
    "    try_reward = []\n",
    "    trial = 3\n",
    "    ite = 0\n",
    "    total_iter = 1000\n",
    "    Q_table = [0] * len(BANDITS)\n",
    "    while ite < total_iter:\n",
    "        \n",
    "        # 先三次实验确定 Q_table,再探索\n",
    "        if ite < trial * len(BANDITS):\n",
    "            for i in range(len(BANDITS)):\n",
    "                ite += 1\n",
    "                reward = round(pull_bandit(i),1)\n",
    "                try_reward.append(reward)\n",
    "                total_reward += reward\n",
    "        \n",
    "        else:\n",
    "            Q_table = np.average(np.array(try_reward).reshape(trial, len(BANDITS)), axis=0)\n",
    "            Q_table = list(np.around(Q_table, decimals=1))\n",
    "            # epson 概率选择下一个要拉的老虎机,1-epson 选目前奖励最高的 \n",
    "            # 如果是非静态的 bandit,可以把 Q_table 中每台 bandit 的 reward 存成 list,然后\n",
    "            # 用 Q_{n+1} = \\sum_{i=1}^n \\alpha (1-\\alpha)^{n-i} R_i + (1-\\alpha)^{n} Q_1 计算即可\n",
    "            # alpha 为超参数,R_i 为存储的所有 Reward,Q1 为第一次的 Reward\n",
    "            if random.random() < epson:\n",
    "                epson_num += 1\n",
    "                choose = np.random.randint(0,len(BANDITS))\n",
    "                rew = pull_bandit(choose)\n",
    "                total_reward += rew\n",
    "                # 更新的值保留两位小数,方便看结果\n",
    "                Q_table[choose] = round(rew, 2)\n",
    "            else:\n",
    "                ite += 1\n",
    "                Q = max(Q_table)\n",
    "                index = Q_table.index(Q)\n",
    "                total_reward += Q\n",
    "\n",
    "    print(\"共探索了 %s 次.\" % epson_num)\n",
    "    print(\"获得的总收益:%d,你选择的老虎机期望收益:%s...\\n\" % (total_reward, BANDITS[index]))\n",
    "    # 如果你选的 Q(两位小数)没有在 Q_table,说明最后一次的 Q_table 是 Q_table_new,最大的 Q 是探索出来的\n",
    "    # 实际中不需要 新建一个 Qtable,这里为了看起来更加直观\n",
    "    print(\"你估计的 Q_table: %s, 你选择额的最大 Q: %s, %s 号老虎机。\" % (Q_table, Q, index+1))\n",
    "    print(\"实际中的 Q_table: %s\\n\" % BANDITS)\n",
    "    if index == BANDITS.index(max(BANDITS)):\n",
    "        print(\"You have chosen the best bandit!\")\n",
    "        is_best = 1\n",
    "    else:\n",
    "        print(\"You haven't chosen the best bandit....\")\n",
    "        is_best = 0\n",
    "    return total_reward, is_best"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 737,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "共探索了 99 次.\n",
      "获得的总收益:14300,你选择的老虎机期望收益:10.0...\n",
      "\n",
      "你估计的 Q_table: [0.1, -0.2, 1.0, -3.8, 3.0, -20.0, 14.9, 4.9, -2.6, -0.9], 你选择额的最大 Q: 14.9, 7 号老虎机。\n",
      "实际中的 Q_table: [0.1, -0.2, 1.0, -5.0, 5.0, -20.0, 10.0, 3.0, -2.0, -1.0]\n",
      "\n",
      "You have chosen the best bandit!\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "(14300.636224221827, 1)"
      ]
     },
     "execution_count": 737,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# epson = 0.1,10% 的概率在探索新的老虎机\n",
    "epson_greedy2(0.1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "epson-贪心小结:  \n",
    "\n",
    "- 获得最高的收益时,不一定就是选择了期望收益最大的老虎机。相反也是。当然大部分的情况下,最高的收益对应的是选择了期望最大的老虎机。\n",
    "- 对 BANDITS 值没有那么敏感。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# optimistic exploration greedy"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 596,
   "metadata": {},
   "outputs": [],
   "source": [
    "# optimistic exploration:直到 “失望” 前,一直探索,然后贪心\n",
    "\n",
    "def opt_greedy(init_q):\n",
    "    total_reward = 0\n",
    "    is_best = 0\n",
    "    epson_num = 0\n",
    "    try_reward = []\n",
    "    trial_num = 0\n",
    "    ite = 0\n",
    "    total_iter = 1000\n",
    "    Q_table = [init_q] * len(BANDITS)\n",
    "    indexes = range(0, len(BANDITS))\n",
    "    while ite < total_iter: \n",
    "        # 当 最大值 是初始乐观值时,一直保持探索(不死心……)\n",
    "        if max(Q_table) == init_q:\n",
    "            trial_num += 1\n",
    "            ite += 1\n",
    "            choose = indexes[np.random.randint(0, len(indexes))]\n",
    "            reward = round(pull_bandit(choose), 1)\n",
    "            total_reward += reward\n",
    "            \n",
    "            # 更新 Q table\n",
    "            Q_table[choose] = round((Q_table[choose] + reward)/2, 1)\n",
    "            # 更新 indexes\n",
    "            indexes = [i for i in range(len(Q_table)) if Q_table[i]==init_q]\n",
    "            \n",
    "        else:\n",
    "            ite += 1\n",
    "            choose = Q_table.index(max(Q_table))\n",
    "            reward = round(pull_bandit(choose), 1)\n",
    "            total_reward += reward\n",
    "            \n",
    "    print(\"尝试次数:%s\" % trial_num)\n",
    "    print(\"获得的总收益:%d,你选择的老虎机期望收益:%s...\\n\" % (total_reward, BANDITS[choose]))\n",
    "    print(\"你估计的 Q_table: %s, 你选择额的最大 Q: %s, %s 号老虎机。\" % (Q_table, max(Q_table), choose+1))\n",
    "    print(\"实际中的 Q_table: %s\\n\" % BANDITS)\n",
    "    if choose == BANDITS.index(max(BANDITS)):\n",
    "        print(\"You have chosen the best bandit!\")\n",
    "        is_best = 1\n",
    "    else:\n",
    "        print(\"You haven't chosen the best bandit....\")\n",
    "        is_best = 0\n",
    "        \n",
    "    return total_reward, is_best"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 597,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "尝试次数:10\n",
      "获得的总收益:10080,你选择的老虎机期望收益:10.0...\n",
      "\n",
      "你估计的 Q_table: [5.0, 5.0, 5.5, 0.8, 6.3, -7.4, 13.0, 5.2, 3.4, 4.8], 你选择额的最大 Q: 13.0, 7 号老虎机。\n",
      "实际中的 Q_table: [0.1, -0.2, 1.0, -5.0, 5.0, -20.0, 10.0, 3.0, -2.0, -1.0]\n",
      "\n",
      "You have chosen the best bandit!\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "(10080.3, 1)"
      ]
     },
     "execution_count": 597,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "opt_greedy(10)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "optimistic exploration 小结:  \n",
    "\n",
    "- 非常重要:结果与 BANDITS **数据分布**关系极大,当分布方差极大时,很容易收敛到绝对值比较小的期望上。\n",
    "  - 这点很容易理解,因为方差大(比如 2 倍均值),所以期望大的老虎机总会获得到一个很大的负值 Q,取平均就会导致 Q 变小,结果就再也没有机会选到这台老虎机。\n",
    "- 相对来说,上面的这种情况在 epson-贪心 和 贪心算法上就会好很多。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# upper-confidence bound"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 633,
   "metadata": {},
   "outputs": [],
   "source": [
    "# upper-confidence bound\n",
    "\n",
    "def ucb(c):\n",
    "    total_reward = 0\n",
    "    is_best = 0\n",
    "    try_reward = []\n",
    "    ite = 0\n",
    "    total_iter = 1000\n",
    "    Q_table_choose = [0] * len(BANDITS)\n",
    "    Q_table_true = [0] * len(BANDITS)\n",
    "    N_table = [0] * len(BANDITS)\n",
    "    while ite < total_iter:\n",
    "        ite += 1\n",
    "        # 控制探索次数\n",
    "        # 也可以用 epson 来控制,epson 满足条件时探索,其他时间贪心\n",
    "        if ite <= 100:\n",
    "            choose = np.random.randint(0,len(BANDITS))\n",
    "            rew = pull_bandit(choose)\n",
    "            total_reward += rew\n",
    "            N_table[choose] += 1\n",
    "            Q_table_choose[choose] = round(rew, 2) + c * np.sqrt(np.log(ite)/N_table[choose])\n",
    "            Q_table_true[choose] = round(rew, 2)\n",
    "            index = Q_table_choose.index(max(Q_table_choose))\n",
    "            Q = Q_table_true[index]\n",
    "        else:\n",
    "            total_reward += Q\n",
    "\n",
    "    print(\"获得的总收益:%d,你选择的老虎机期望收益:%s...\\n\" % (total_reward, BANDITS[index]))\n",
    "    print(\"你估计的 Q_table: %s, 你选择额的最大 Q: %s, %s 号老虎机。\" % (Q_table, Q, index+1))\n",
    "    print(\"实际中的 Q_table: %s\\n\" % BANDITS)\n",
    "    if index == BANDITS.index(max(BANDITS)):\n",
    "        print(\"You have chosen the best bandit!\")\n",
    "        is_best = 1\n",
    "    else:\n",
    "        print(\"You haven't chosen the best bandit....\")\n",
    "        is_best = 0\n",
    "        \n",
    "    return total_reward, is_best"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 626,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "获得的总收益:17448,你选择的老虎机期望收益:10.0...\n",
      "\n",
      "你估计的 Q_table: [0.1, -0.3, 1.0, -4.0, 8.3, -16.0, 8.2, 3.7, -1.9, -0.2], 你选择额的最大 Q: 19.49, 7 号老虎机。\n",
      "实际中的 Q_table: [0.1, -0.2, 1.0, -5.0, 5.0, -20.0, 10.0, 3.0, -2.0, -1.0]\n",
      "\n",
      "You have chosen the best bandit!\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "(17448.197086410153, 1)"
      ]
     },
     "execution_count": 626,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ucb(0.1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# gradient"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 480,
   "metadata": {},
   "outputs": [],
   "source": [
    "def softmax(xlist):\n",
    "    ex = np.exp(xlist - np.max(xlist))\n",
    "    return ex/np.sum(ex, axis=0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 728,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "# gradient\n",
    "# 不是特别确定理解是否有误\n",
    "def gradient(alpha):\n",
    "    is_best = 0\n",
    "    H_table = np.random.rand(len(BANDITS))\n",
    "    pi = softmax(H_table)\n",
    "    ite = 0\n",
    "    total_iter = 1000\n",
    "    ht = 0\n",
    "    total_reward = 0\n",
    "    while ite < total_iter:\n",
    "        ite += 1\n",
    "        # 随机投掷,看 pi 分布下哪个最高就选择哪个\n",
    "        throw = np.random.multinomial(100, pi)\n",
    "        choose = list(throw).index(max(throw))\n",
    "        rew = pull_bandit(choose)\n",
    "        total_reward += rew\n",
    "        if rew > 0:\n",
    "            htnext = ht + alpha * rew * (1 - pi[choose])\n",
    "        else:\n",
    "            htnext = ht - alpha * rew * pi[choose]\n",
    "        H_table[choose] = htnext\n",
    "        ht = htnext\n",
    "        pi = softmax(H_table)\n",
    "    \n",
    "    print(\"获得的总收益:%d,你选择的老虎机期望收益:%s...\\n\" % (total_reward, BANDITS[choose]))\n",
    "    if list(pi).index(max(pi)) == BANDITS.index(max(BANDITS)):\n",
    "        print(\"You have chosen the best bandit!\")\n",
    "        is_best = 1\n",
    "    else:\n",
    "        print(\"You haven't chosen the best bandit....\")\n",
    "        is_best = 0\n",
    "        \n",
    "    return total_reward, is_best"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 730,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "获得的总收益:9931,你选择的老虎机期望收益:10.0...\n",
      "\n",
      "You have chosen the best bandit!\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "(9931.761125811887, 1)"
      ]
     },
     "execution_count": 730,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gradient(0.1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# All Together"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "best_list = []\n",
    "aver_reward = []\n",
    "# 重复 100 次实验\n",
    "N = 100\n",
    "x = np.logspace(-7, 2, num=10, base=2)\n",
    "\n",
    "for radio in x:\n",
    "    ed_best, oeg_best, ucb_best, gra_best = 0, 0, 0, 0\n",
    "    ed_rew, oeg_rew, ucb_rew, gra_rew = 0, 0, 0, 0\n",
    "    for i in range(N):\n",
    "        edr, egb = epson_greedy(radio)\n",
    "        ed_best += egb\n",
    "        ed_rew += edr\n",
    "        oegr, oegb = opt_greedy(radio*100)\n",
    "        oeg_best += oegb\n",
    "        oeg_rew += oegr\n",
    "        ucbr, ucbb = ucb(radio)\n",
    "        ucb_best += ucbb\n",
    "        ucb_rew += ucbr\n",
    "        grar, grab = gradient(radio)\n",
    "        gra_best += grab\n",
    "        gra_rew += grar\n",
    "    best_list.append([ed_best/N, oeg_best/N, ucb_best/N, gra_best/N])\n",
    "    aver_reward.append([ed_rew/N, oeg_rew/N, ucb_rew/N, gra_rew/N])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 732,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nurT+y7E899xzvPHGGyE/NhQmTZrEjBkzQt5ubm4ut912W8jbbShTp07l/vvvD8u1wlFTroCysjJg\nM4WFqXi9YLNxYDVPnX1FKaWUanSKiop4+OGHuecea4Hyg52p5eqrr651/+TJk3nsscfqdWw0e+65\n5xgyZAjdunWjX79+9OvXL9Jdikphy5SLyMVBHuNFZLCIJIarH5HidDqBTfh8Nnbu9G/My7N+aqZc\nKaWUanTy8vL473//22DtT58+vcHaDqeZM2eSVx7zhFm4Vq4PhXCWr1wKPAycBZwLPAVMAKYCa0Xk\niJ613uFwAJsB2FQ+e7sG5UoppVTUeOutt+jRowedOnViwoQJFBYWAnDKKadw//3307t3b9q3b8/r\nr79OaWkpp5xyCps3byY7O5vVq1dXKvno2LEjd999N1lZWZx88sksWbKE/v3707p1a+bMmQNULo24\n//776dChAx06dODHH3/kxBNPxOv1kp2dzUcffVTp2O3bt3POOeeQlZVFly5dqr2PjRs3Mnz4cDp3\n7sz5559PSUkJ9957LzfccAMAL7/8MpdddhkACQkJPPTQQ+Tk5NCrVy9WrlxZrb0ff/yRQYMGVbyX\n1atXV/T/iiuuoGfPnjz99NMsXryYXr160bFjR8aPH4/P5+OGG27gm2++YcKECUybNo1PP/2U006z\n1pZ0OBxcc8015OTkkJOTU7FQ0saNG8nOzmby5Mm0b9+e0047zR9HVfb1119z3HHH0b17d2655Ray\ns7Mr3t/555/PgAEDuPPOO3E4HFxxxRV07dqVAQMG8MsvvwCwfPlyBgwYQE5ODldddRU+nw+AadOm\nceyxx3LSSSfx888/A/DCCy9w8cUHJg288847Q74KajjLV+xAP2PMDgAR6QQ8bow5TUSGAk8CJ4ax\nP2FVnikH2LwZTj4ZDcqVUkqpYG6+GVasCG2bffrA44/XuHvt2rXcfvvtfP7557Ru3ZrJkydz7733\n8vDDDwOwevVqli9fzq+//sqQIUMYM2ZMRYC5bt26oG02a9aMdevWcfbZZ3PzzTfzxRdf8NFHHzFt\n2jTOOeeciuP27dvHI488wo4dO4iJicHlcvHtt98SGxtb0fbnn39ecfzvfvc7xowZw5w5c9izZ0+1\n61555ZU89thj9O7dm7/85S8899xz3HrrrfTu3ZsNGzbw6KOPsnDhQgBcLhfJycn8+uuvvPLKK9xw\n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\n9PPPP6/T0tL0pUuXtKenp96/f78+ceKEtrGx0T///LNOTU3VrVu31t98802W13j79m3t5uZmue6b\nb75p+V7Mnz9fV61aVV+6dEmnpaXpN9980/IaN2zYoLt166aTk5O1j4+PjomJ0VprHRISolesWKE3\nbpgG9V4AACAASURBVNyomzZtqq9fv66vXbumGzVqZPkeValSRScnJ2utta5fv76OjY29673P7ucY\niNJW5KfW7uh5G0gFNIBSqjJQOm9/PSjeSpcuTa1atbJ9LmORZwZ/f3jjDYiPh8ceK6AATWZjY8O8\nefM4d+4coaGhVK1alc6dO5sdlhBCCDO89NLfG3jklSZNYObMez69ceNGunfvTvXq1QEYOXIk/fr1\nszw/ePBgbGxsqFOnDnXq1OHIkSNUqlQpx1sGBQWhlKJly5Zcv36dMmXK4OPjQ2xsbJbjypUrR82a\nNXnppZeYOHEirq6u97zmzZs32bNnDz/88AMAlStXzvJ8QkIC27dvt9Sf37p1i+7du+Po6MiUKVNo\n164dY8aMoWrVqpZznnvuOQD69+9vmU3PcOTIEZycnAgIMJYSPvPMM4wcOdLyV4TAwEAcHBwAqFmz\nJnPmzGH//v3ExMQQd58FcuvXr2fevHkopahYsSI9e/YkIiKCbt26Ub16dUt9vp+fH6dOncpy7tGj\nRylfvjx+fn4ADBw4kEWLFlmeDwgIoGLFipb7XLlyhY8++oi0tDTKly/P4cOHOXDgAB07dgSMWXsf\nHx/OnDnD4MGDLWsAg4KCAKhQoQItWrTg559/xtnZmUqVKuHs7Jzj63tQ1ibl72Is8KyolJoO9ASK\nR6GTyW7cgD/+gEz/7mnd2vi4fTt062ZOXGYoVaoUy5cvJyAggF69erF161aaNWtmdlhCCCFKgJSU\nFGxsslb12traWj63t7e3fJ6YmEiZMmXue81SpUpZrlO6tDGXaWdnd1djA1tbW3bv3s28efPw8/Nj\n8eLFPPXUU9le8/bt29jY2KDusfV3amoqTk5OlhKNzEqXLs3169ezvBalFHZ2Rjp469YtHB0ds5yT\n3fuilLKMZS7LDQwMJCQkhKlTp5KcnHzfeu6c3vOM9wuM9/7O9+zmzZuW9xcgOTk5y/OZ40pJSWHl\nypU0bNjQMrZv3z68vLzYu3dvlvPGjBmT5f25deuW5ZeOfv36sWbNGh5//PEsv7DlFWtbIi7E2Mlz\n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\n2i50X3AAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1131ebc50>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "best_list = np.array(best_list)\n",
    "aver_reward = np.array(aver_reward)\n",
    "y_edb, y_oegb, y_ucbb, y_grab = best_list[:,0], best_list[:,1], best_list[:,2], best_list[:,3]\n",
    "y_edr, y_oegr, y_ucbr, y_grar = aver_reward[:,0], aver_reward[:,1], aver_reward[:,2], aver_reward[:,3]\n",
    "\n",
    "plt.figure(figsize=(12, 8))\n",
    "plt.subplots_adjust(left=.125, right=.9, bottom=.1, top=.9, wspace=.1, hspace=.3)\n",
    "\n",
    "plt.subplot(2,1,1)\n",
    "plt.title('All Bandit Algorithm Results Best')\n",
    "plt.plot(x, y_edb, color='black', label='epson-greedy')\n",
    "plt.plot(x, y_oegb, color='red', label='optimistic exploration greedy')\n",
    "plt.plot(x, y_ucbb,  color='skyblue', label='upper-confidence bound')\n",
    "plt.plot(x, y_grab, color='blue', label='gradient')\n",
    "plt.legend()\n",
    "plt.xlabel('radio')\n",
    "plt.ylabel('probability of getting the best bandit')\n",
    "\n",
    "plt.subplot(2,1,2)\n",
    "plt.title('All Bandit Algorithm Results Avereward')\n",
    "plt.plot(x, y_edr, color='black', label='epson-greedy')\n",
    "plt.plot(x, y_oegr, color='red', label='optimistic exploration greedy')\n",
    "plt.plot(x, y_ucbr,  color='skyblue', label='upper-confidence bound')\n",
    "plt.plot(x, y_grar, color='blue', label='gradient')\n",
    "plt.legend()\n",
    "plt.xlabel('radio')\n",
    "plt.ylabel('average reward')\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "和作者的结果不太一样,但大体结果差不多,可能的原因比较多,比如:  \n",
    "\n",
    "- BANDIT 初始期望设定\n",
    "- 各算法涉及的其他初始值设定\n",
    "- 其他代码细节\n",
    "\n",
    "任意一个原因都可能导致结果大相径庭。但我们的出发点是理解算法思想和流程,大可不必关注太多细节。"
   ]
  },
  {
   "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.6.2"
  },
  "toc": {
   "colors": {
    "hover_highlight": "#DAA520",
    "running_highlight": "#FF0000",
    "selected_highlight": "#FFD700"
   },
   "moveMenuLeft": true,
   "nav_menu": {
    "height": "12px",
    "width": "252px"
   },
   "navigate_menu": true,
   "number_sections": true,
   "sideBar": true,
   "threshold": 4,
   "toc_cell": true,
   "toc_section_display": "block",
   "toc_window_display": true
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}