强化学习 五子棋算法
本文会以AI五子棋展开,讲解一些强化学习中博弈方向的算法。
全文只涉及算法讲解,不会展现代码。
蒙特卡洛树搜索 MCTS
随着计算机算力的发展,利用随机采样的样本值来估计真实值的蒙特卡洛方法 (Monte Carlo method) 得到了充分的发挥与利用。
如上图用蒙特卡洛方法以模拟面积比例,达到求出π的近似值的目的。
以五子棋举例,在不考虑任何其他算法与规则的情况下,我们在一个棋局的空位黑白交替随机落子,直至其中一方获胜或满棋盘。在这样的随机尝试中我们会记录双方胜负并在有足够大量的数据时依据胜率评价其中的每一步。这样的算法好处巨大,它可以在理想情况下求出每一步的理论最大胜率解。
蒙特卡洛树搜索 (The monte carlo search tree) 又称随机抽样或统计试验方法,属于计算数学的一个分支。在蒙特卡洛方法的基础上,我们利用树结构来更加高效的进行结点值的更新和选择。
蒙特卡洛树搜索算法
一般来说,蒙特卡洛树搜索会有一个根结点。像这样的根结点会有模拟后续选择的子结点若干个。
以五子棋为例,若以正中的H8位为根结点,棋盘大小为15 * 15,那么根结点的后续子结点就会有15 * 15 - 1个。
若是随机落子,那么这15 * 15 - 1中的某一个子结点会继续被分配15 * 15 - 2个子结点。在棋局结束时,我们会利用反向传播将结果返回各个参与结点,并以胜率评价该结点。随着数据量的增加,每一步棋(每个结点)的胜率会被更加完善。
看起来已经大功告成,不过,这样下来,我们的空间和时间复杂度会随着回合数n变得越来越高,节点个数会达到接近 22 5 n 225^n 225n. 这样的算法明显需要耗费极大的计算空间。所以,我们将要用到UCT算法及基于minimax算法的alpha beta剪枝来减少结点的个数,同时,我们还可以用到一些小窍门,比如用估值函数来省去不必要的尝试。
上限置信区间算法 UCT
UCT算法(Upper Confidence Bound Apply to Tree)是UCB算法(Upper Confidence Bound)在蒙特卡洛树搜索中的算法。UCB算法的背景起源于一种多臂老虎机(Multi-Armed Bandit),可以追溯到上世纪三十年代。
多臂老虎机问题描述如下:
- 老虎机有K个摇臂,每个摇臂以一定的概率吐出金币,且概率是未知的
- 玩家每次只能从K个摇臂中选择其中一个,且相邻两次选择或奖励没有任何关系
- 玩家的目的是通过一定的策略使自己的奖励最大,即得到更多的金币
要是你是一个手持筹码的赌徒,如何才能在付出最少的情况下找出回报概率最大的老虎机摇臂?UCB算法很好地解决了这个问题。想象一下,要是我们想要找出高回报的老虎机摇臂,就必须先把所有的老虎机摇臂尝试到一定次数,再根据回报率将回报率高的摇臂的尝试机会加大一些,直到数据足以确定出最高回报率的摇臂。UCB算法公式也就类似于以上的思考方法。
UCB算法公式:
A = V i + C ∗ l n