蒙特卡洛树算法 (MCTS)

实质上可以看成一种增强学习


蒙特卡罗树搜索(MCTS)会逐渐的建立一颗不对称的树。可以分为四步并反复迭代:


(1)选择
从根节点,也就是要做决策的局面R出发向下选择一个最急迫需要被拓展的节点T;局面R是第一个被检查的节点,被检查的节点如果存在一个没有被评价过的招式m,那么被检查的节点在执行m后得到的新局面就是我们所需要展开的T;如果被检查的局面所有可行的招式已经都被评价过了,那么利用ucb公式得到一个拥有最大ucb值的可行招式,并且对这个招式产生的新局面再次进行检查;如果被检查的局面是一个游戏已经结束的游戏局面,那么直接执行步骤4;通过反复的进行检查,最终得到一个在树的最底层的最后一次被检查的局面c和它的一个没有被评价过的招式m,执行步骤2。


(2)拓展
对于此时存在于内存中的局面c,添加一个它的子节点。这个子节点由局面c执行招式m而得到,也就是T。


(3)模拟
从局面T出发,双方开始随机的落子。最终得到一个结果(win/lost),以此更新T节点的胜利率。


(4)反向传播
在T模拟结束之后,它的父节点c以及其所有的祖先节点依次更新胜利率。一个节点的胜利率为这个节点所有的子节点的平均胜利率。并从T开始,一直反向传播到根节点R,因此路径上所有的节点的胜利率都会被更新。


之后,重新从第一步开始,不断地进行迭代。使得添加的局面越来越多,则对于R所有的子节点的胜利率也越来越准。最后,选择胜利率最高的招式。


实际应用中,mcts还可以伴随非常多的改进。我描述的这个算法是mcts这个算法族中最出名的uct算法,现在大部分著名的ai都在这个基础上有了大量的改进了。


第二种解释:

传统意义上讲,算法名字带有蒙特卡洛的意思就是,他对搜索空间的搜索都是随机给一个方向的,譬如说蒙塔卡罗算圆周率,就是在一个正方形里面随机取点,看看落在圆里面有多少。蒙特卡洛光线追踪,在需要对环境积分的时候随机取角度射光线。蒙特卡洛走迷宫,随便走。


你可能感兴趣的:(编程,算法,搜索)