【来点技术】蒙特卡洛树搜索与决策AI
本文主要根据个人理解写成,若有出错请指正。
这篇文章能够帮助你快速理解蒙特卡洛树搜索的基础知识,但具体原理并不会具体讲解。因为我也不是特别懂。
蒙特卡洛树搜索(Monte Carlo Tree Search,MCTS)
基本原理
各种蒙特卡洛的思想主要是对于状态空间极大的环境进行多次简单的模拟,以求获得一个接近现实的近似值。例如,求一个圆形的面积,可以用一个矩形将圆形框起来,然后在矩形中大量随机取点并计算是否在圆内,即可按照在圆内点数与总点数的比值获得圆面积与矩形面积的比值。
而蒙特卡洛树搜索算法的核心就是,通过多次模拟策略的结果来统计获得一个接近于最佳的策略。结合形成的树上节点模拟中获得的被访问的次数和总价值可以判断出一个选择是否是较优的。因此,模拟的次数越多,最后的策略一般也越好。
算法适用
蒙特卡洛树搜索主要适用于离散且能知道全部信息的决策,例如下棋这种一步一步地走向终点且过程中并没有无法模拟的问题。这也是我了解到MCTS的原因(虽然最后我想做的东西失败了)。
主要流程
MCTS的每一个循环主要有4个步骤:选择、扩展、模拟和反向传播。
选择
从根节点(即当前状态)出发,通过一种策略(UCB公式,或者叫UCT,我不是很能理解这俩的区别)一步一步选择,直到选择到叶节点。
UCB公式如下:
其中指当前节点,指某个子节点,为价值,为访问次数,是一个自定义常数,一般用,根据经验调整。由此可知,随着模拟次数(即增大,加号后面的部分被主导,使得UCB值更倾向于让小的节点被选择。
在比较子节点的UCB值后,选择最高的那个,接着下一步选择,直到叶节点。
扩展
这是我采取的策略。
在到达一个叶节点时,对其添加所有可选的行动对应的子节点。用下棋的话来说就是,添加所有走子的下一个棋盘状态。
另一种策略是只扩展一个子节点,如果按这种策略,上面的选择步骤的终结就可以是访问到未完全扩展的节点。选择结束后,即对当前节点添加一个未添加的动作的子节点。
模拟
如果当前节点不是终结态(例如棋局结束),则从当前节点开始,随机进行动作直到终结条件(棋局结束或者到达限制时间),得出一个价值(例如赢了就是1分,输了就-1分)。
反向传播
也叫回溯价值。主要是根据选择的路径和模拟的结果,将选择的所有节点访问数+1,价值加上最终价值。
与神经网络的结合
如果真的每一次计算都模拟很多次构建一棵树,那对计算要求还是挺高的。
一种思路是,用MCTS可以计算出估计的最佳策略和价值,用这个值来训练神经网络模型,让模型有决策和估值的能力。
因为模型有了决策和估值的能力,因此也可以用于模拟部分来计算最终价值。
因为放弃了模拟,因此在选择部分也加入模型的影响:
其中表示从状态转移到的概率,通过神经网络得出。
我本来想写一个五子棋AI,用DeepSeek写了过后,加上各家AI的修改,结果效果非常差,不知道是不是因为模拟次数太少了。
写完这篇过后我要去重新写一遍了,感觉有些地方有问题。