早期的棋类 AI 基本上使用的是博弈树算法——但是用在围棋上,效果很差,原因有两个:一是棋局评判能力要求更高,不能像国际象棋一样给每个棋子和位置设置不同的分值。二是计算能力要求更高,因为其搜索空间已经达到3361,绝对算是天文数字了。我们首先想到,使用蒙特卡洛方法解决这一问题。注意,这和蒙特卡洛树搜索不是同一种算法。蒙特卡洛法方法是评判棋盘局面的一种方法,由于围棋很难写出好的估值函数,于是上世纪有人提出了一种神奇的方法:双方在某个局面下”随机“走子,直到终局或者残局为止,随机很多次,计算胜率,胜率越高的局面就越好。不需要写极其复杂的估值函数,直接随机很多盘棋,就可以得到每个动作的估值。这种方法看似简单,但其实是有弊端的。比如当算法下了某步棋之后,对方有 100 种应对—— 其中99 种会导致劣势,但是有 1 种必胜下法,那算法就绝对不能下这步棋,因为对方会只选择必胜算法。而蒙特卡洛树搜索正是解决这一问题的算法,它首先是一棵树,每个结点就是一种决策,采用不断迭代采用选择、扩展、模拟、回溯等操作,最终结果就是,越优秀的节点,越有可能走,而走得越多的节点,越是优秀的选择。蒙特卡洛树搜索在 2006年提出,就能够战胜业余的段级选手,在当时是很大的突破,当前现在又有不少变种被提出。需要注意的关键一点是,蒙特卡洛树搜索是采用自己的UCB公式来作为选择的依据,而非完全依赖于结点的value、访问频度或概率。每个结点的UCB考虑了平均value,总次数,本结点经过的次数。
随着深度学习技术的出现,基于深度神经网络的强化学习技术终于解决了围棋问题。