蒙特卡洛树搜索算法

目录

1.单一状态蒙特卡洛规划(以多臂赌博机为例) 

2.多臂赌博机

3.上限置信区间(Upper Confidence Bound,UCB)

4.蒙特卡洛树搜索

5.蒙特卡洛树搜索示例


1.单一状态蒙特卡洛规划(以多臂赌博机为例) 

特点:

  • 单一状态,k种行动(既有k个摇臂)

  • 在摇臂赌博机问题中,每次以随机采样形式采取一种行动a,好比随机拉动第k个赌博机的臂膀,得到R(s,a_{k}  )的回报

问题:

下一次拉动哪个赌博机的臂膀,才能获得最大回报呢?

多壁赌博机问题是一种序列决策问题,这种问题需要在利用和探索之间选择平衡。

利用:保证在过去决策中得到最大回报

探索:寄希望在未来能够得到更大回报

2.多臂赌博机

如果有k个赌博机,这k个赌博机产生的操作序列为 X_{i,1}X_{i,2},...(i = 1,...,k) 。在时刻t = 1,2...,选择第 I_{t}个赌博机后,可得到奖赏X_{I_t,t}  ,则在n次操作 I_{1},...,I_{n}  后,可如下定义悔值函数

悔值函数表示了如下意思:在第t次对赌博机操作时,假设知道哪个赌博机能够给出最大奖赏(虽然在现实生活中这是不存在的),则将得到的最大奖赏减去实际操作第  I_{t}个赌博机所得到的奖赏。将n次操作的差值累加起来,就是悔值函数的结果。

很显然,一个良好多臂赌博机操作的策略是在不同人进行了多次玩法后,能够让悔值函数的方差最小。

3.上限置信区间(Upper Confidence Bound,UCB)

在多臂赌博机的研究过程中,上限置信区间(UCB)成为一种较为成功的策略学习方法,因为其在探索-利用之间取得平衡。

在UCB方法中,使 X_{i,T_i(t-1))}来记录第i个赌博机在过去t-1时刻内的平均奖赏,则在第t时刻,选择使如下具有最佳上限置信区间的赌博机:

 其中c_{t,s}取值定义如下:

  T_{i}(t)为在过去时刻(初始时刻到t时刻)过程中选择第i个赌博机的次数总和。也就是说,在第t时刻,UCB算法一般会选择具有如下最大值的第j个赌博机:

 \bar{X_{j}}是第j个赌博机在过去时间内所获得的平均奖赏值,  n_{j}是过去时间内拉动第j个赌博机臂膀的总次数,n是过去时间内拉动所有赌博机臂膀的总次数。C是一个平衡因子,其决定着在选择时偏重探索还是利用。

从这里可以看出UCB算法如何在探索-利用之间寻找平衡。既需要拉动在过去时间内获得最大平均奖赏的赌博机,又希望去选择拉动臂膀次数最少的赌博机。

4.蒙特卡洛树搜索

蒙特卡洛树搜索是一种将上限置信区间算法UCB应用于游戏树的搜索方法,包括了四个步骤:选举(selection),扩展(expansion),模拟(simulation),反向传播(BackPropagation)

  • 选举

        从根节点R开始,向下递归选择子节点,直至选择一个叶子节点L。具体来说,通常用UCB(Upper Confidence Bound,上限置信区间)选择最具有"潜力"的后续节点

  • 扩展

     如果L不是一个终止节点,则随机创建其后的一个未被访问节点,选择该节点作为后续子节点C。

  • 模拟

    从扩展节点开始,运行一个模拟的输出,直到博弈游戏结束。比如,从该扩展节点出发,模拟了十次,最终胜利九次,那么该扩展节点的得分就会比较高,反之则比较低。这里也给出一个模拟过程的伪代码:

    def Rollout(S_i): 
      ## S_i:当前状态
      loop forever: 
        ## 无限循环
        if S_i a terimal state: 
          ## 如果当前状态是博弈的终止状态
          ## 则返回对 S_i 这个状态的价值,跳出循环
          return value(S_i)   
    
        ## 如果还没到终止状态
        ## 随机选取当前状态下能够采取的一个动作
        A_i = random(available_action(S_i)) 
        ## 通过当前状态 S_i 与随机选取的动作 A_i 来计算出下一步的状态并赋值给 S_i
        S_i = transform(A_i, S_i)
  • 回溯

    使用第三步模拟的结果,反响传播以更新当前动作序列。

5.蒙特卡洛树搜索示例

(1)初始化

    最初有一个根节点 s_{0} ,树中每个节点都有两个值,节点的价值T和该节点的访问次数N。

图片

(2)第一次迭代

    节点s_{0} 为根节点也是叶节点,并且不是终止节点,因此对其进行扩展。假设s_{0} 后有两个策略,转移后分别为s_{1} 和 s_{2} 

图片

随后,可以使用 UCB 公式来选择对s_{1} 扩展还是 s_{2} 扩展。这里 N_{1} 与 N_{2}均为0,因此两个节点的UCB值都是无穷大,因此选哪个节点都可以,假设这里选择s_{1}进行模拟,模拟后,发现最终值为20,于是回溯更新,此时 T_{1} = 20, N_{1} = 1, T_{0} = 20, N_{0} = 1

(3)第二次迭代

    从s_{0}出发进行选择,此时s_{1}的UCB值已经不是无穷大了,而s_{2} 的UCB值仍是无穷大,因此选择s_{2} 进行扩展。到了s_{2} 后发现s_{2} 为叶子节点,并且没有被探索过,因此对其进行模拟。模拟的结果假设为10,那么进行回溯,则  T_{2} = 10, N_{2} = 1, T_{0} = 30, N_{0} = 2

图片

4)第三次迭代

    从s_{0}出发进行选择,计算s_{1}s_{2} 的UCB值,选择较大的进行扩展。

因此,选择 s_{1}进行扩展。到了s_{1}后,发现它是叶节点,并且已经被探索过,那么就枚举出当前节点的所有可能的动作,并添加到树中。然后就像之前一样,随机选择s_{3}或者s_{4}进行扩展,以此类推。

图片

 6.参考文章

蒙特卡洛树搜索(MCTS)详解-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值