MCTS-蒙特卡洛树搜索

       最近想去做一个小型的五子棋对弈,中间会用到蒙特卡洛树,在此标记一下。

       MCTS,即蒙特卡罗树搜索,是一类搜索算法树的统称,可以较为有效地解决一些搜索空间巨大的问题。

       如一个8*8的棋盘,第一步棋有64种着法,那么第二步则有63种,依次类推,假如我们把第一步棋作为根节点,那么其子节点就有63个,再往下的子节点就有62个……

       如果不加干预,树结构将会繁杂,MCTS采用策略来对获胜性较小的着法不予考虑,如第二步的63种着法中有10种是不可能胜利的,那么这十个子节点不予再次分配子节点。

MCTS的主要步骤分为四个:

1, 选择(Selection)

       即找一个最好的值得探索的结点,通常是先选择没有探索过的结点,如果都探索过了,再选择UCB值最大的进行选择(UCB是由一系列算法计算得到的值,这里先不详细讲,可以简单视为value)

2, 扩展(Expansion)

       已经选择好了需要进行扩展的结点,那么就对其进行扩展,即对其一个子节点最为下一步棋的假设,一般为随机取一个可选的节点进行扩展。

3, 模拟(Simulation)

       扩展出了子节点,就可以根据该子节点继续进行模拟了,我们随机选择一个可选的位置作为模拟下一步的落子,将其作为子节点,然后依据该子节点,继续寻找可选的位置作为子节点,依次类推,直到博弈已经判断出了胜负,将胜负信息作为最终得分。

4, 回溯更新(Backpropagation)(此处应该也可以叫做反向传递)

       将最终的得分累加到父节点,不断从下向上累加更新。


对于UCB值,计算方法很简单,公式如下:

image

       其中,v'表示当前树节点,v表示父节点,Q表示这个树节点的累计quality值,N表示这个树节点的visit次数,C是一个常量参数。

参考:https://blog.csdn.net/qq_34470213/article/details/79490534

猜你喜欢

转载自blog.csdn.net/qq_35014850/article/details/80568007