注:本文其实只介绍mogo程序所采用的MC+UCT算法。
记得以前还曾为深蓝击败顶尖人类棋手而暗喜,庆幸自己选择了围棋这一体现人类智慧优越感的游戏。因为人机博弈的设计不外乎两个方面:估值和搜索,而这两者在国际象棋上表现非常好,深蓝仅仅靠的暴力搜索下出的妙手让大师也手足无措,你要不信,去问问卡斯帕罗夫和深蓝对局时什么感受。
然后估值和搜索用在围棋上似乎失灵了,一来无值可估,计算机如何看待局部的好手成了全局的恶手,它又如何学会弃子呢?二来搜索空间太大,计算机算不了多少步,它的基本思路是考虑我方可能下的每手棋,对方的所有可能应对,而对每一个应对,又考虑我方接下来的所有应对……这是一个指数增长的算法,用不了几步就成了一个天文数字。但是围棋中的征子动辄二三十步,摩尔定律十八个月翻一番充其量也就是个平方,追的上指数吗?
深蓝拿下国象,黑石拿下五子棋,唯有围棋几十年来固若金汤,可说是仅存的一片乐土了。我也曾经坚信,除非基础理论出现重大变革,否则计算机在围棋上战胜人类是痴人说梦。然后这个信念随着2007年mogo的出现,动摇了。确切的说,我的信念是在前几天和mogo下过几盘棋后动摇的。
直到昨天我才好好研究了一下mogo所用的算法,心中狂喜,我为这样天才的想法而叫好,我不再为信念动摇而悲伤了,反正我业余玩玩,总也玩不过职业的。等到计算机真的攻下围棋,我就叛变,何况我的主业本就是计算机。
话说我闻道欣喜之余,总想找个人去传道,我可怜的妻子,没有半点程序基础的人,就成了第一个受害者,在她理解了我的倾述欲望后,问我:“要多久?”我想了想,坚定的回答:“十分钟。”
一个真正天才的想法只是常人没想到而已,它本身不会很复杂的,因此我觉得十分钟足矣。
MC方法
我先介绍蒙特卡罗(即MC)方法,这是一个赌城的名字,Monte Carlo,位于摩纳哥。这个方法与赌博有关,如果你愿意,你也可以把它叫做拉斯维加斯方法,或者麻糕方法,没听过麻糕?那么插播一个笑话:
a:听到一特好听的歌,歌词只记得是“一个芝麻糕,不如一针细”,求歌名啊!
b:你可知Macau,不是我真姓……-_-!
为了启发她使用MC方法,我从