蒙特卡洛树搜索算法概念:
我们经常会听到“蒙特卡洛树搜索”这个概念,事实上,蒙特卡洛树搜索是在完美信息博弈场景中进行决策的一种通用技术,除游戏之外,它还在很多现实世界的应用中有着广阔前景。
蒙特卡洛树搜索(Monte Carlo Tree Search)并不是一种"模拟人"的算法。而是通过随机的对游戏进行推演来逐渐建立一棵不对称的搜索树的过程。可以看成是某种意义上的强化学习,当然这一点学界还有一些争议。
蒙特卡洛树搜索可以分为哪四个过程
蒙特卡洛树搜索大概可以被分成四步。选择(Selection),拓展(Expansion),模拟(Simulation),反向传播(Backpropagation)。
在开始阶段,搜索树只有一个节点,也就是我们需要决策的局面。搜索树中的每一个节点包含了三个基本信息:代表的局面,被访问的次数,累计评分。
1. 选择(Selection)
在选择阶段,需要从根节点,也就是要做决策的局面R 出发向下选择出一个最急迫需要被拓展的节点N,局面R 是是每一次迭代中第一个被检查的节点;对于被检查的局面而言,他可能有三种可能:
1) 该节点所有可行动作都已经被拓展过。
2) 该节点有可行动作还未被拓展过。
3) 这个节点游戏已经结束了。
对于这三种可能:
1) 如果所有可行动作都已经被拓展过了,那么我们将使用UCB 公式计算该节点所有子节点的UCB 值,并找到一个值最大的子节点继续检查。反复向下迭代。
2) 如果被检查的局面依然存在没有被拓展的子节点(例如说某节点有20个可行动作,但是在搜索树中才创建了19个子节点),那么我们认为这个节点就是本次迭代的目标节点N,并找出N 还未被拓展的动作A。执行步骤2
3) 如果被检查到的节点是一个游戏已经结束的节点。那么从该节点直接执行步骤4。
每一个被检查的节点的被访问次数在这个阶段都会自增。在反复的迭代之后,我们将在搜索树的底端找到一个节点,来继续后面的步骤。
2. 拓展(Expansion)
在选择阶段结束时候,我们查找到了一个最迫切被拓展的节点N,以及他一个尚未拓展的动作A。在搜索树中创建一个新的节点〖 N〗_(n )作为N 的一个新子节点。〖 N〗_(n )的局面就是节点N 在执行了动作A 之后的局面。
3. 模拟(Simulation)
为了让〖 N〗_(n )得到一个初始的评分。我们从〖 N〗_(n )开始,让游戏随机进行,直到得到一个游戏结局,这个结局将作为〖 N〗_(n )的初始评分。一般使用胜利或者失败作为评分,只有1或者0。
4. 反向传播(Backpropagation)
在〖 N〗_(n )的模拟结束之后,它的父节点N 以及从根节点到N 的路径上的所有节点都会根据本次模拟的结果来添加自己的累计评分。如果在步骤1的选择中直接发现了一个游戏结局的话,根据该结局来更新评分。
每一次迭代都会拓展搜索树,随着迭代次数的增加,搜索树的规模也不断增加。当到了一定的迭代次数或者时间之后结束,选择根节点下最好的子节点作为本次决策的结果。