蒙特卡洛树搜索(MCTS)算法

转载自:https://blog.csdn.net/ljyt2/article/details/78332802

对Alpha-zero很感兴趣,所以耐心阅读了mastering the game of go without human knowledge
Deepmind 官网的介绍:AlphaGo Zero: Learning from scratch
在阅读的过程中,对蒙特卡洛树搜索算法不甚了解,下面翻译了youtube上一位英国教授的网络课程视频。
同时,我在CSDN资源中上传了自己研究AlphaGo的两篇文章后,写的两个版本的AlphaGo算法结构和MCTS结构的对比分析的文章,名为"AlphaGo VS AlphaGo Zero 对比分析讲解",有兴趣的读者可以下载。
##蒙特卡洛树搜索(MCTS)算法
MCTS算法是一种决策算法,每次模拟(simulation)分为4步:

  1. Tree traversal:
  2. Node expansion
  3. Rollout (random simulation)
  4. Backpropagation

步骤1,2的流程图如下:

步骤1,2的流程图如下:

步骤3 Rollout 的细节:

Rollout(S_i):
	loop forever:
		if S_i is a terminal state:
			return value(S_i)
		A_i = random(available-actions(S_i))
		S_i = simulate(A_i,S_i)

讲一个具体的例子:

  1. 树的初始状态:
    T 表示总的 value, N 表示被访问的次数(visit count)。A表示动作(action).这里写图片描述
  2. 第一次迭代(iteration)

    从状态S0​开始,要在下面两个动作中进行选择(假设只有两个动作可选),选择的标准就是UCB1(Si)值。显然可算得:

  3. 这种情况下,我们就按顺序取第一个,即A1​。从而,达到状态S1​。

    按照步骤1,2的流程图,我们现在需要判断目前的结点S1​(current node)是不是叶节点,这里叶节点是指其没有被展开(expansion)过。显然,此结点没有被展开过,所以是叶节点。接下来,按照流程图,需要判断结点S1​被访问的系数是否为0。是0,所以要进行Rollout。

    Rollout其实就是在接下来的步骤中每一步都随机采取动作,直到停止点(围棋中的对局结束),得到一个最终的value。

    假设Rollout最终值为20.

    这里写图片描述

    接下来,进行步骤4 Backpropagation,即利用Rollout最终得到的value来更新路径上每个结点的T,N值。

    这里写图片描述

    之后把Rollout的结果删除:

    这里写图片描述

    MCTS的想法就是要从S0出发不断的进行迭代,不断更新结点值,直到达到一定的迭代次数或者时间。

    第二次迭代

    我们从S0​出发进行第二次迭代(iteration):

    首先,计算下面两个结点S1,S2的 UCB1值:
    UCB1(S1)=20    UCB1(S2)=∞
    所以,选动作A2​,从而达到状态S2。

    同上,现在要判断结点S2​是否是叶结点。是,所以继续判断其被访问的次数。是0,所以进入Rollout, 假设Rollout最终值为10.

    这里写图片描述

    之后进行Backpropogation:

    这里写图片描述

    第三次迭代:

    首先,计算UCB1值:UCB1(S1)≈21.67   UCB1(S2)≈11.67

    执行动作A1​,进入状态S1​。
    是否是叶节点? 是。
    被访问次数是否为0?否。
    按照流程图所示,现在进入Node expansion步骤。同样假设只有两个动作可选。

    这里写图片描述

    选择S3进行 Rollout,假设Rollout最终值为0.

    这里写图片描述

    更新路径上每个结点的值,之后删除Rollout的值:

    这里写图片描述

    第四次迭代

    首先,计算UCB1值:

  4. 选择A2​,进入状态S2​, 接下来和第三次迭代一样的步骤:

    这里写图片描述

    更新路径上的结点:

    这里写图片描述

    假设我们设定最大迭代次数为4,则我们的迭代完毕。这时,利用得到的树来决定在S0​处应该选择哪个动作。根据UCB1值,显然我们要选择动作A2​.

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值