最强围棋软件Zen的开发历程
更新时间:2013-2-4、浏览次数:
ZEN受让四子战胜武宫这一历史性事件,让大家对计算机围棋又产生了很大的兴趣,以前转载过一篇《计算机围棋的发展概况——国立台湾大学研究报告》,棋友反映资料不够新,这次我特意找到《碁世界月刊》关于ZEN的特别报道,分享给九歌棋友。
译自:碁世界月刊2012年六月号「电脑围棋特集」
对电脑来说,围棋是一种既漫长又困难的游戏。因为围棋的变化数量比起西洋棋或是将棋多很多,局面判断也很困难。过去的围棋程式是希望藉著把围棋知识塞入其中而能做出正确的形势判断来胜出,然而这样的做法却很难突破业余初段的程度。更糟的是,在国际的电脑围棋竞争中,日本总是只能步他国之后尘。
在2006年,出现了电脑围棋之**,就是大家明白了蒙地卡罗演算法这种统计搜寻手法在电脑围棋运算中非常有效。所谓的围棋蒙地卡罗演算法,就是在某个局面下以乱数的方式反覆模拟下到终局的状况几十万次。从这几十万次的模拟计算中挑出机率上最容易获胜的著手,并针对其中有力的著手进行更深更多的计算,这样就很容易发现好棋。藉著这样的方式,电脑围棋的棋力一举突破的业余初段的境界。
Zen的开发历程
Zen就是尾岛阳儿先生以上述年表一个人开始开发的程式。尾岛先生虽然是永远带著太阳眼镜而产生出独特气氛的人物,事实上他也是游戏业界中名不虚传的天才程式师。
在尾岛先生开始开发围棋程式后没多久,蒙地卡罗演算法这种崭新的手法非常有效之态势也逐渐明朗起来。这可以说是佳妙的命运相会。吸收新手法优点的尾岛先生又逐渐加上自己独特的心思,并且藉著踏实的努力让Zen持续变强。终於在2009年替日本创下首次拿下令人引颈期盼的国际大赛冠军。
而加藤英树先生也是尽早导入蒙地卡罗法而开发出名为「不动碁」的厉害程式,但他很快就看清光靠自己一人绝对无法到达世界最强的水准,所以找了尾岛先生来一起组成开发小组。这就是TeamDeepZen的诞生由来。虽然Zen原本的规格是只用一台电脑就能运作,但加藤先生又将它修改成可以在多台电脑上平行运算,而将棋力再提升了一子左右的程度。
加藤先生除了平行运算以外,也分担了其他伴随运用而产生的杂务工作,而让尾岛先生能够花更多的精力在改善Zen上面。如果没有加藤先生的助力,Zen的进化程度可能就不会像现在这麼顺利。在这个小组成立后,Zen的棋力就以每年变强一子半的速度增长下去。
虽然因为Zen的出现,使得日本在电脑围棋中到达了世界领先的程度,但欧美各国也是仍然热烈地开发突破,所以Zen的对手们也是非常厉害。看起来,以世界最强为目标的竞争情势,一定会持续下去。
Zen开发者的感想
尾岛阳儿:我会为了不让竞争对手的软体追上Zen而持续努力下去。但基本上的开发感觉不是以「软体vs人类」为目标,而是「日本的软体vs世界各国的软体」。我的认知是,和人类之间的胜负结果是伴随上述目标达成之后的附属品。加藤英树:四子打赢武宫九段时,真的让我吓了一跳。现在藉由平行运算的方式仅使Zen的棋力增强一子而已,所以我希望能提升到二子的程度。
计算机围棋的发展概况——国立台湾大学研究报告
颜士净 国立台湾大学资讯工程研究所博士班研究生
许舜钦 国立台湾大学资讯工程系教授
摘 要
计算机对局是人工智能领域中相当重要的一个分枝。而在围棋方面,由于它本身的特质,使得计算机围棋在继西洋棋、象棋之后,成为人工智能中一个相当引人注目的新挑战。
在本篇文章当中,我们首先简单介绍围棋的特性和计算机围棋的基本原理。再简述推动计算机围棋进步的重要比赛。经由了解这些比赛,可大略知道一些较强程序的发展情形,而后再进一步介绍这些程序的特性及其优缺点。最后我们根据各程序的发展情形,概略分析计算机围棋未来的发展空间。
一、围棋简介
1.1 起源
围棋是起源于中国的一种棋戏,相传是数千年前由尧所发明。虽然发明围棋的确实日期已不可考,但可以确定的是早在公元前十世纪,围棋已经广为流行。目前围棋在许多东方国家都很盛行,而且也渐渐推广到全世界。事实上,围棋在许多人的心中,不仅仅是娱乐,由于其本身的许多特质,早已被看做是一种艺术。
围棋吸引人的地方除了是因为它的规则简单及变化复杂,可供人们发挥最大的自由想象创造空间外,另一方面也是由于它已被研究了数千年,许许多多的战术观念及思考方法已被研究开发出来,人们可经由学习这些东西而迅速地进入围棋的世界。
1.2 基本规则及棋力计算方式
围棋可以说是两个人在棋盘上争地的游戏。两人分持黑白,轮流将棋子下在棋盘的空点上。在棋盘上的每个棋子的邻接点若为空点,则称是这颗棋子的气点,当棋子的气点全被对方占据时,则此棋子必须被对方提取。某些提子的时候,会产生同型反复的情况,此时为避免同型反复而无法解决,规定当刚提吃对方一颗棋子时,不可马上提回,必须间隔一手之后才可提回。最后胜负的决定则是根据棋局终了时,计算双方所占有的地域的大小来决定。以上为基本的围棋规则,详细完整的围棋规则可以参考应昌期围棋教育基金会的”计点制围棋规则”[围棋基金会1995]。
目前世界上一般通用的棋力计算方式是用级跟段来表示棋力的强弱。图一说明级与段表示棋力的方式。级较段为弱,一般所称的入门的初学者大约是九级以外的棋力,而段位以上的棋力则可算是对围棋的各种技巧已有相当的了解,普通人要到达段位的棋力,是要花上相当大的时间与精力的。而在棋力差距方面,在业余的棋力中,相差一级约相差一子的力量,例如三级约可让七级先在棋盘上摆四子(围棋中的术语称让四子为相差四先的手合)。而在业余中差三段约相差一子的力量,例如五段约可让一段先在棋盘上摆二子。在职业中则是差五段约相差一子的力量,所以职业九段可让职业一段两子。目前世界上职业九段的棋士并不多,而一般来说,由于围棋的各种理论已被发展得相当完备,职业九段对棋局的看法,都可视为是对的。
二、计算机围棋的基本原理
运用计算机来下围棋,似乎是一个很直接的想法,因为围棋的规则很简单,胜负定义也很明确,棋盘上每点的状态也只有黑子、白子和空点三种,这些都和计算机本身的特性相符合。另一方面也是由于它已被全世界研究了数千年,许许多多的战术观念及思考方法已被研究开发出来,这些几乎可以看做是真理的理论,都是可以在发展计算机围棋时去应用或参考的。
但是计算机围棋的发展过程,却没有想象中顺利,虽然围棋规则很简单,但是由于盘面广大(一般的对局棋盘是19×19),实际上对局时的变化却比其它的棋戏复杂得多。例如西洋棋或象棋,已能藉由一些简单的推理与深度的搜寻思考而达到相当高的棋力,但这种方法却不太适合应用在围棋这种高复杂度的棋戏中。A.Samuel估计checker的复杂度大约是10的40次方[Samuel, 1959],而A.Newll估计西洋棋的复杂度大约是10的120次方[Newell et al., 1958]。这两种棋戏的复杂度虽然已是天文数字,但比起围棋的复杂度则要小得多了,Brown及Dowsey估计围棋所有可能的变化大约是10的700次方[Brown and Dowsey 81]。