墨绿的出现,同时震惊了中日韩三国棋院,一个共同的问题是:墨绿究竟是谁?
——人民日报体育版2005年9月10日
看着《人民日报》的这篇报道,我心里充满了喜悦,自豪和得意。这世界上除我之外再没有第二个人知道墨绿的真实身份了。
一.引子
话要从大约十年前说起。由IBM科研小组研制出来的“深蓝”国际象棋程序,战胜了当时的世界第一高手卡斯帕洛夫,西方舆论界为之哗然。被西方人作为第一智力游戏的国际象棋,人类被机器打成下手,惊呼当然是很自然的。但是,在一片叫好声中,纽约时报有一篇报道却在幽默中表现出冷静。它说:“我们这里的大呼小叫,最多让亚洲人(日本,中国和韩国)伸伸懒腰,不以为然。因为对他们所玩的游戏——围棋——来说,计算机还处在原始时代”。
计算机围棋程序处在原始时代,并不是因为没人重视。事实上,相当大的人力物力投入了围棋程序的开发。个人的,集体的;有计算机专业人员,也有职业棋手。最大的投入要数日本,他们的第五代机算机开发的一个重要课题就是围棋程序。台湾的亿万富翁应昌期先生生前还为此设了巨额奖金。说是在二十世纪末如有计算机程序战胜台湾职业棋手,则可得一百万美元的奖金。如此种种,目前的围棋程序却仍被冠以“原始时代”的雅号,追究起来其主要原因是围棋太难。国际象棋与它的难度相差不是一两个数量级的问题。
我对围棋程序的热衷由来已久。我写过很多别的游戏程序,但对自己最喜爱的围棋却一直没敢写,因为不知从何下手,想得到的思路别人早已试过了。这个愿望一直悬在那里,心里放不下,手上又搞不动。九八年上半年事情开始有了转机。由于工作需要,我接触到一些遗传编程(GENETIC PROGRAM-MING)的东西。有一天读一个样板程序,突然想到也许可以用同样的思路来写围棋程序。程序开始的好坏不要紧,关键是要有很好的鉴别函数使其能合理地进化。
二.原始版
照着样板程序,很快就写了一个原始程序。它没有任何高级技术,只懂得提子规则以及最后的点目。基本的想法是让它自己与自己下,利用它懂得的这两点基本功能来进化出高级技术。这样做成功的先例是有的。有人用这种想法写过一个BACKGAMMON的程序,没有任何高级技术,完全利用基本规则,在它自己与自己下完五万盘以后,进化出一个可以与人类最强手对抗的程序。不幸的是,同样的想法不能搬到围棋上来,因为围棋的变化实在是太多了。事实很快证明了这一点。我的原始程序进化来进化去,全是盲目的,看不出一点朝着好的方向前进的迹象。根本算不上进化,最多只能叫变化。看来完全靠原始程序是不行的,还得加一些高级一点的概念,比如角上的基本对应以及群体死活(而不是每颗子的死活)概念。从理论上来说,这些概念都可以从基本规则中推出来。但是,因为影响进化的因素几乎都是局部的,像群体死活这类的高级概念很难进化出来,但这些概念在基础阶段却尤其重要。
加进这些高级概念以后,情况开始有了一点起色。要死的棋居然知道逃。虽然明明逃不出去,但从局部来说,能延缓死亡时间就是进步。因为是程序同程序下,逃不出去的棋有时也居然就给它逃出去了,这又进一步强化了这种愚蠢的下法。但不管怎样,相对于先前的盲目变化,这种暂时性的进步也是很可喜的。许多别的高级概念也似乎有了一些模型。不过,从一些明显的愚蠢变化中,我也发现了许多原始程序的问题,并做了相应改动。就这样程序自己的进化加上我的随时改动,半年以后这程序居然有了一点会下棋的样子。再也没有自己撞紧气之类的明显错误,偶尔竟然会走出枷这样的概念。这种时候我感到特别的惊喜。估计照这样下去,它就会逐渐强大起来。
遗憾的是事情并不按照这种理想的路子走下去。初始时期的快速进步逐渐缓慢下来。因为总是程序跟程序自己下,没有外来的影响,基因库很快就达到局部稳定状态。不管再让它们自己下多少盘,结果总是在原地打转。而且,通过半年的进化,中间的一些程序我已经看不懂,也不可以像开始那样任意加上我的改动。当然我可以同它下,让它从我的下法中取得新变化的基因。但这种办法是几乎不可以想象的慢,因为进化的过程需要很多很多盘才可以实现,而我是不可能一天二十四小时都陪它下棋的。而且我也不会摹仿坏棋,我的棋下出去都是这程序不可以接受的跳跃。于是这程序就这样死在那里。
由于我的心思完全套死在这个程序上,一个明显的出路放在那里我竟然一直看不见。现在想起来很自然的事,当时却一直想不到。我在网络上下棋好多年了,但一直把它当成消遣娱乐的地方,从来没有想到过我的程序也可以从上面学棋。有一天我突然意识到,只要写一个界面程序,就可以把它一直挂在网上,一天二十四小时与人对弈。
三.网上学棋
网上下棋的人很多,各种水平的都有,而且风格各异,正适合我的程序用来学棋。我的程序挂在那里,只要有人邀请,不管什么水平,马上就跟他下。这样一天二十四小时下下来,比我跟它下不知好了多少倍。一方面时间多,另一方面网上可以找到很多初学者,学起来恰到好处。但真正的进化需要很多这样的机会,一天二十四小时我仍然嫌不够。于是我又给我的界面引进了多线功能,也就是说同时可以有好几个同样的程序在下棋。只要有人邀请,他就马上开一盘。这样一来每天都可以下很多盘,进化的机会也就多起来。每到周末我就对程序作一次全面整理。一个月以后,我的程序有了明显进步。而且居然有了带星号的27级。虽然很差,但比起最低级别,还算是赢面占多。这使我很兴奋,这至少说明它是在进步,而且这是在没有我介入的情况下获得的。又过了一个月,它又升到26级。高兴之余也发现了新问题。
这所谓自我学习,就是要不断产生新的子程序,新的模式。久而久之,程序就变得越来越大,运行起来就越来越慢。像生物学上的进化一样,新产生出来的东西并不是都有用的。事实上,我们人类的DNA链上绝大部分都是没有用的。开始阶段我还可以用人工的办法把那些没有用的东西去掉。到后来,新产生的东西越来越多,靠人工是完全不能胜任了。而且,最严重的是,我的判定并不可靠。我认为没有用的东西或许在意想不到的地方有用。这个问题困惑了我很久,我的程序也从网上取了下来,因为我不能再让它产生新的子程序。
正在我不知从哪里突破的时候,有一天在网上看见一篇讲进化论中的用进废退原理。我突然意识到我的程序中就缺少这么一个机制。于是,我就在我的程序里加了这样一个检验程序。如果一个模式或者一个子程序在一定时间里没有被调用过,主程序就自动把它去掉。这样一来,它虽然失去了一些可能产生好基因的途径,但主要障碍清除了,又创造出许多别的机会。很有意思的是,我发现有一个子程序被调用的特别多,就把它取出来看一看。一般来说它自已进化出来的子程序我是看不懂的。但我这次存了心一定要看它是干什么用的。花了好几个晚上一步步地看,终于发现它居然是用来判断征子是否有利的。这种子程序都能进化出来,我对它的前途产生了很大的信心。
重新上网以后,每天都有新程序产生,也有一些旧程序和模式被清除。程序逐渐快了起来(因为开始堆积的废物太多)。等级分又开始往上走,半年以后升到了15级。这时候它的棋已经下得有模有样,尤其是局部战斗,已经有一定的杀力。但围棋不是单靠局部拼杀定胜负的,必须要有整体观念,而这整体观念是不能从15级的对手中学来的。这程序又像上次那样停在那里,长久没有进步。好几个月都一直是15级。
四.向专家学棋
一般来说进化都是局部性的,在局部上有优势的走法就很自然地被保留下来,这样永远也不会有整体观念的突破。虽然加进了突变的概念,但也最多产生出枷、飞、伸大腿这样的局部技术,弃子取势这样的整体观念是不可能自动进化出来的。
有一天我在网上看富士通决赛,好几步棋都看不懂,仍然看得精精有味。突然想到要学棋并不一定只学完全懂的棋。专家的棋看多了,走起棋来自然而然就有了好形,而且也知道什么地方是大场。所谓“熟读唐诗三百首,不会作诗也会吟”就是这个道理。想到了这个思路,剩下的就好办了。专家的棋网上有的是,要多少有多少。几个晚上就从网上搞来了上千盘棋谱。我先给我的程序加了一些模式识别的功能,然后就让它没日没夜地打起谱来了。从打谱中学会了占大场,占完大场后接下来的变化它并不清楚。但这不是什么问题,因为这些变化大都是局部的,而我这程序的强项就是局部变化。几个星期下来,再把它放到网上的时候,棋力已经大长,在同级棋手中所向披靡,很快就升到7级,然后与7级的棋手盘旋了几个星期又慢慢地升到6级,5级,4级。
我这个程序的成长与我们大多数人学任何新东西一样,都是一个阶梯一个阶梯地上。许多人到了某个阶梯,因为没有明师指点,就长期停在那里。我自己就认识很多下棋十几二十年都不长棋,打牌十多年不长牌,打球十多年不长球的人,因为他们总是迈不过眼前这个阶梯。这是由游戏本身内在的复杂性所决定的,与学它的人无关。我这程序也一样,每过一段时间就要遇见一个阶梯而停步不前。IGS的4级似乎就是这样一个阶梯。它长到4级以后就再也不长了,长期停在那里。
说起来,IGS的4级已经比现在其它所有的围棋程序高出一大截,如果拿出去卖已经很可以大赚一笔了。但这不是我想要的,我的最终目的是要产生一个战胜专业棋手的程序。IGS的4级与专业棋手还有很大的差距。虽然如此,这个级别的棋已经有相当的水平,再往上进步已经不能单靠计算,还要讲究对棋有感觉。而感觉这个东西是现在的任何程序都不具备的。这次停下来,一停就是半年。虽然也随时在网上与别人下棋,但总是没有长进。出路在哪里呢?
五.模糊函数与量子波
计算机程序的一大优点是对任何棋形都可以有个好坏判断,在搜索范围内一切都不会错过。可是,从某种意义上来说这也是一种缺点。一切都靠算,能覆盖的面积自然就少了。而且,许多棋的好坏要到十几步甚至几十步以后才会表现出来,这是不可能算出来的,主要是靠感觉。另外,一个棋形的好坏并不是一成不变的,在某些情况下坏棋形也会有好价值。就连被认为是最坏棋形的空三角也经常在专业棋手的对局中出现。如果我们把一个棋形的好坏价值定死了,就没有产生这种变化的可能。我很早就想过要把模糊函数的概念弄到我的判断程序里面去。可是无论怎样模糊,在运算过程中,模糊量的大小还是得人为地规定。对一个固定棋形还是会算出同样的结果(虽然结果以模糊的形式出现)。
每一块棋除了死变化以外,都是有生命的。它的生命力以辐射方式向外散发,所以有“空提一子三十目”的说法。固定的程序是没有办法算出这种生命力来的。有一天读到一篇讲量子计算的文章,突然想到可以试一试在我的程序中加入量子波。这样一切运算都以概率的方式出现,没有固定结果,但通常会产生最自然和理想的结果。加进去以后,它果然变得丰富多采起来。居然可以走出很多从前绝对想不到的棋。不过,加进量子运算以后,效率变得比较低,搜索范围变小了,棋力居然比以前小有退步。但我并不为此失望,退一步进两步,只要大方向是朝前就行。关键是方法,效率问题总是有办法提高的。后来我花了一些时间把程序彻底整理了一下,又把我的计算机硬件升了级。如此一来,它的运算效率比以前增加了一倍,棋力也随之猛长起来,而且这次长起来就没有停。几个月下来就升到一段(1D★),而且根本没有停的意思。我的兴趣也跟着高起来,随时随地都在思考它的问题和解决办法。什么事情都想看看对我的程序是否有帮助,连开车等红灯都在想这最短路径问题是否可以用到这程序的搜索路径中去。这样一来,新的想法天天都有。
IGS是国际性的网站,任何时候世界上总有一半的地方是白天,也就是说任何时候都有人下棋。我的任何新想法都可以立即得到是否有用的验证。我每天下班回家就全力扑在它上面。不断地改进,不断地加上新的想法。我把这程序没日没夜地挂在网上,它的棋力每天都在长。两年下来它终于达到4D★。
这个程序的运作很依赖计算机的速度,这包括主机速度,硬盘阅读速度,以及内存容量。为了充分发挥它的潜力,我当然想给它配置最好的装备,这就需要钱。而且如果想买刚上市的新产品,就要花大钱。台湾每年一次的计算机围棋比赛,如果能拿第一名,就可以得到相当数量的奖金,至少买新机器不成问题。但我又不愿引起别人的注意。于是我把我的程序简装了以后去参加这个比赛。所谓简装就是拿掉一些子程序。但我的程序比别的程序高出太多,拿掉子程序后我又给它加了一些限制,基本上就是让它每盘能赢,但总在十目以内。最后一轮以前,我的程序全胜,即使输掉最后一盘也稳拿第一。于是,我在最后一场比赛前又拿掉了最主要的子程序,输了最后一盘。这样别人都认为它与别的程序属于一个档次。我又不像别的参赛人总想打名声好卖他们的程序,而是拿了第一名的奖金就赶快走人。因此,我的程序虽然拿了第一,却没有造成什么影响。第二年的比赛我没有去参加,这程序就渐渐地从大家的记忆中消失。有少数人记得,也只知道它大约是业余5级的水平。
六.墨绿问世
在达到4D★以前,我的程序有输有赢。虽然赢比输多多了(从30K升到4D★),但并没有引起人们的注意。我觉得该是给它起名字打名气的时候了。起什么名字好呢?因为我的最终目的是要打败人类最高手,所以一定要起一个与深蓝类似的名字。开始想叫它“深绿”,但又觉得与深蓝靠得太近。而且,深蓝的“深”有深层搜索的意思。我这个程序主要原理并不在深层搜索。叫它“浅绿”又觉得名字不够响亮。正在为起名字的事犯愁,恰好有多年不见的朋友来访,说是下一盘棋叙叙旧。于是从壁橱里拿出已经起灰的云子。这几年虽然也常下棋,但都是在网上下,手上摸的都是鼠标,这棋子已经有好几年没有摸过了。手里摸着这棋子,突然想到以前朋友曾告诉我鉴别真假云子的办法。说是把黑子拿起来对着光看,真云子会成墨绿色。这真是踏破铁鞋无觅处,得来全不费功夫。“墨绿”这个名字真是太合适不过了。既与深蓝相近,又有神秘深邃的意思。名字想好以后我就立即在IGS为它注册了一个4D的账号,英文名叫SLATEGREEN。
这时墨绿的棋力实际上已经比一般4D★强,但为了安全起见,开始只找弱4D下。主要目的是要连胜以造成轰动效应。IGS的概率指令可以用来判别强弱4D。因为它一天24小时全挂在上面,能找到对手就下,没有对手就跟自已下(我机器上还同时运行着另一个与它同时进化出来的程序)。几个星期下来,它连胜40盘,并且打成了5D★。一般人到了这种水平,一年半载也长不了什么棋。而墨绿不一样,它每下一盘棋都以最优方式重新整理内部联络,也就是说它一直都在长棋。打成5D★的时候,它的棋力其实已经高于5D★。所以,跟5D★下也一直赢。几个月以后又升到了6D★。6D★的级别,加上七八十盘的连胜很快引起了大家的注意。每次下棋的时候总有很多人观看,这种时候我特别得意。由于连胜,找它下棋的人越来越多,甚至还有7D★以上的。为保险起见,它只接受同级人的挑战。不到7D★就不接受7D★的挑战,而且也不跟新账号下。因为这些人或许是正在上升途中,实力可能很强。
因为墨绿成年累月都挂在网上,形形色色的人都会碰到。在4D★以前,时不时就会遇见耍赖的。开始的时候,耍赖对墨绿没有什么用处,因为他不在乎输赢,而且有的是时间。打到4D★以后这个问题就变得比较严重起来。因为要用连胜造影响,就一盘都不能输。如果遇见逃跑的还好,一个月以后IGS会自动判逃跑者负。可有时候墨绿明明大胜的棋,我这边突然断线。等我再连回去对方已经跑了,这样IGS算墨绿逃跑。好在4D★以上的人已经比较有棋品,这样干的不多。连胜二十盘的时候被我遇到过一次。于是我在它的程序里专门加了一句等候此人的指令。除非它一个月内不出现(届时IGS系统会算墨绿逃跑而判负),只要他一出现,墨绿就会抓住他。4D★的人棋瘾都已经很大了,要让这样的人一个月不上IGS是很不容易的。这些耍赖的人往往是出来探一下头,如果有他们欠棋的人在线上,他们就立即断线。由于墨绿有了这句等候他的指令,使得他连探头的时间都没有。他逃跑一星期后又联进了IGS,刚联进不到5秒钟就被墨绿发现,他还没来得及打退出的指令,墨绿已经恢复了他所欠的棋,这时候再要退出就算他逃跑,所以他只好把这盘棋下完,输棋走人。
另外经常碰到的是打听消息的。一般来说,墨绿对别人的问题一律不理。但有时如果我在看棋,我就会帮它回答一些问题。“你是不是职业棋手?”“是。”“你现在在哪里?”“计算机里。”“你24小时都泡在这里,不干别的事吗?”“是。”我总是用这种怎样解释都可以的答案来回答。
七.墨绿成长
墨绿的实力现在已远远高出我的实力,我跟它下棋几乎总是输。但因为我是看着它长大的,知道它的一些别人不知道的弱点,所以偶尔我也可以赢它一盘。但它如果在同一个弱点上连续两次吃亏,就会弥补掉这个弱点。因为我已经不可能去改它的程序了,只能通过这种办法来克服它的弱点,好象也很有效。我有时为了特意让它暴露出它的弱点,就跳过它的程序帮它走棋。为此还产生过一个小闹剧。
墨绿到了4D★以后,常常走出出乎我意料的棋。基本上要好几步以后我才能理解那一步的目的。有一次双方杀得很紧张时对方打吃,我觉得它只能长出去,否则棋筋被人提了就全完了。可是墨绿没有长出去,而是长考起来。我在旁边看得着急,以为它又出现什么漏洞,就擅自帮它长了出去。等到对方下一步棋走出来,我才知道它刚才为什么要长考,也意识到我帮了倒忙。对方的下一子同时威胁到两块棋,在另一块棋补一手后,刚才接上的一子又被堵了下来。几个回合下来,墨绿损失十几目棋。在此之前,墨绿一直没有输过。由于我的帮忙,眼看它的上百连胜就要被破了。好在墨绿的棋现在已经比一般的6D★高出一截,而且我很早以前给他加的风险系数现在起了作用。墨绿下棋的最终目的是赢,赢多赢少都不重要。所以它随时都在算自己领先多少。领先多了就走风险很小的棋,平手或微微领先时就走风险相对大一点的棋。现在落后很多,到了走风险很大的棋的时候了。风险大的棋大多都是无理棋。只要对方应对正确,下无理棋的一方会损失更多的目。没想到对方在墨绿一连串的无理棋下,居然没有采取应有的手法,而是一味的退让。大约自己认为领先很多,随便收收官就可以赢了。而且,鬼使神差,对方有一步棋居然应错了次序,吃了大亏,双方的目数一下就拉近了。收官的时候墨绿又再赚了几目,最后刚好赢了半目。真悬!从那以后,我再也没有帮它走过棋了。
上面那盘棋是墨绿连胜以来赢的目数最少的一盘棋。说起赢棋目数,与墨绿下棋的人都觉得很恼火。因为收官基本都是靠死算,是它的强项。一般一盘棋到了收官阶段,它几乎可以把各种变化都考虑到,然后宣布对方输多少目。如果对方继续下,而且没有按最佳下法下,它就会重新算一遍然后宣布一个新目数。刚才还说“黑输3目半”,现在或许说“黑输5目半”,9目,13目,就这样一直收到结束。开始我给它加这个功能是觉得好玩,后来就成了一个节目,许多观战者觉得这样很好玩。不过这让输棋的那方感到很不是滋味,好象被人宣布“你死定了”,然后自己一步步朝坟墓走去。
采用选对手的办法的结果又是只赢不输。因为它实际上总是与比它弱的人下,而且又不会出现昏着。没过多久,它就升到了7D★,然后是8D★。
八.争挑战权
8D★已经有不少专业棋手。由于连胜,墨绿的名气在IGS上已经到了家喻户晓的地步。只要是它的棋,总有上百人观看,有时超过500人。它的思路与人不一样,常常在大家意想不到的地方走棋,所以看的人特别多。尤其是职业棋手,都想来研究它的棋路。它基本也不照定式走棋。如果算出来的棋路与定式相同(大部分如此),就按定式走棋。如果算出来与定式不同,它也没有一般棋手的忌讳,总是按着自己算出来的路数走,根本不管定式不定式。这样一来,它的棋中产生出很多“新”定式,这就更吸引众多专业棋手了。大家开始都以为它是某个超一流棋手。看它保持上百盘不败,大家一致认为它是李昌镐。可看它的棋路又完全不像李。而且有人观察很仔细,发现有一次墨绿在IGS下棋的时候,李昌镐正在中国下富士通决赛。所以可以断定它不是李昌镐。用同样的方法,大家很快推出它不是中日韩三国任何一个等级分排前20名的棋手。这样一来,迷团就越来越大。看它下棋和找它下棋的人也越来越多。
由于连胜,墨绿很快升到了9D★。而且在信息栏里宣布只与9D★下棋。IGS上的9D★很少,就10来个。而且大多是以前的账号。如果别的9D★宣布只与9D★下棋,也许就找不到人下了。可墨绿的上百的连胜在职业棋手中造成了很大的轰动,大家都想来找它较量一下。可是要打到9D★必需要从7D开始。有些职业九段想请IGS管理员直接给他们9D★的账号。可IGS认为这正是吸引职业棋手来下棋的好机会,于是宣布绝不破例。这样一来,一大堆想找墨绿下棋的职业棋手涌进IGS,从7D开始往上打。好象本因坊之类的头衔比赛,先在循环圈里打,打出循环圈(升成9D★)才可以同墨绿下。
从7D★要打到9D★需要下很多盘棋,职业棋手一般不愿意花时间下这些棋。于是有些账号有好几个人在下,而且都是很强的九段,大家分任务,每人必需赢多少盘。不到两个月,IGS出现了好几个新的9D★。这些人一旦打进9D★就再也不相互下棋,而是追着墨绿下。墨绿当然是来者不拒。不过这两个月以来,墨绿与另一个同时进化出来的墨绿程序一直在下棋,棋力又有了长进,已经高出了这些职业九段。所以,与这些新9D★下,又是只赢不输。虽然现在在IGS上下得少了,但由于只赢不输,积分仍然慢慢往上爬,最后终于升到了10D★。
九.向最高手挑战
俗话说“人怕出名猪怕壮”。墨绿的名气越来越大,自然引起了越来越多的人的注意和好奇。有许多好事者为了证实墨绿的真实身份,追踪它的IP。为此我找了我在世界各地不下棋的朋友,有时用他们的机器上网。因为他们都不下棋,根本不知道我在干什么。这样一来,好事者们查出来分布在世界各地的IP,虽然不多,但也可以迷惑他们一阵子了。因为我把程序都放到我朋友的机器上,完全就是他们的机器在上网,我只不过远程操作而已。IGS的网管也查过一下,大约得出了我的几个常用IP,但总是不能最后确定。
墨绿变成了IGS上的唯一十段以后,很有一点高处不胜寒的感觉。与一般的专业棋手下也总是赢。开始时那些专业棋手还讲一点棋道,一盘棋就一个人下。后来看到没有一点赢棋的希望,就开始几个棋手联合起来下。也就是说每步棋都是几个人讨论以后再下。这样最大的优点是避免了昏着,但在战术上起不了太大作用。因为每个人的思路都不一样,时间有限,互相间很难谁说服谁。所以,虽然是大家讨论,仍然以一个人主下。由于没有本质上的突破,仍然没有赢的机会,只不过把输的目数减少了一点。这有点像武侠小说中高手同时与众多低手较量,低手人多也不大占得了便宜。
当今世界上的顶尖棋手们之间的差距很小,没有谁可以说肯定赢谁。像墨绿这样常胜不输,实际上实力已经高出所有的人类棋手。但由于从来没有像深蓝一样与人类最高手正式下过,还不能说就是最高手。事实上,由于IGS上一般都下很快的棋(从来没有人下双方各有三小时规定时间的棋),许多专业棋手都认为墨绿只不过是一个特别擅长下快棋的某一位专业棋手(居然没有人想到过其实没有任何擅长下快棋的专业棋手能有这样的常胜纪录)。为了更进一步证明自己的实力,造成更轰动的效应,墨绿在自己的信息栏里留下了向集本年三大世界棋赛冠军于一身的最高棋手挑战的宣言,使用时间由对方定。除此之外不再与别人下棋。宣言虽然发出去了,但并没有得到什么响应。因为世界冠军的身份是很高的,与一个隐姓埋名的人下棋,赢了被认为是自然的,输了这面子就丢大了,而且也没有什么实际利益。
这世上的事,你不操心,总有人会操心。大公司看准了这样的比赛有卖点,于是拍出了重金来赞助这个比赛。这样一来这项赛事的级别一下就高起来。世界冠军来下这样的比赛也不觉得丢份儿了,而且不管输赢都有大笔收入。说不定这世界冠军早就想下这盘棋,只不过一直没人给提供这个机会。为了防止运气问题,对方提出要下三番棋,对此我当然同意。因为我觉得墨绿的水平实际上比对方高,下得越多赢面就越大,赢得越多就越有说服力。另外对方提出双方规定时间为每方四小时。这也没有什么不利的地方,我当然也同意。于是墨绿与世界最高手挑战的比赛就成了现实。
十.三番棋(1)
从发宣言到正式比赛,中间耽误了有半年时间。因为大公司出了钱,自然觉得有权知道这笔钱出在谁身上。而我一律拒绝除了电子邮件以外的一切联络方式。因为我用的账号是那种可以免费申请的匿名账号,他们也查不出来。双方僵持了好一阵。大公司的主要观点是:如果最后结果是墨绿赢了,那他们就等于几十万美元扔出去,连个人影子都没有看到。而且对方是公开身份,为什么墨绿不公开。我的观点是,墨绿不愿意曝光这是他个人的隐私权。对方本来就是公众人物,而墨绿从来就没公开过,也不会为了这几十万美元就公开了。因为广告早已打出去了,大公司最后终于妥协。这半年时间里,我一直让墨绿与另外两个克隆出来的程序下。虽然这三个程序的起点都一样,但由于进化过程是随机的,而且我给他们加了不同的参数(比如突变率的大小,交差率是多少等等)。半年下来,我手上有了三个水平相当但完全不一样的程序。而且都比半年前的母程序又高出一截。
对墨绿迷来说,墨绿半年没有出现,使他们的期望和悬念达到了要爆炸的程度。正式比赛那天,IGS提前一小时就达到了饱和,以至于服务器不得不重新起动。重新起动以后,IGS设了上限,只允许一千人联接。先联的人很幸运地联上了,后面的人只能到别的服务器上看别人间接传来的棋谱。如果把所有服务器上观看此局的人加起来,保守估计在一万以上。
第一盘棋从第二十几手就开始杀起来。因为双方时间比平常多得多,墨绿想得比较深。一开始就走出了出乎意料的棋,如果不杀就要吃亏,双方被迫早早就杀起来。世界冠军还确实不一般。几个战场打下来,居然打了个平手。不过,一般来说,计算机程序的弱点在中盘。因为布局阶段有谱可查,收官阶段变化相对少一些。只有中盘变化太多,很难控制。中盘打完打成平手相当于墨绿领先,因为自己的弱项与对方打成平手,强项就应该领先了。但几乎所有看棋的人都不这么认为。他们觉得收官是这个世界冠军的强项,几乎从来没有人通过收官从他手中赢棋。于是看棋的人开始议论了。说是墨绿原来不过如此,这下终于遇见了对手,这连赢一百多盘的纪录今天总算要打破了。还有人说看来墨绿只能下快棋,慢棋遇到高手就不行了。然而,事情的发展却不像他们想象的那样顺利,而是像我先前预计的那样,收官阶段墨绿开始发挥出计算方面的优势,逐渐把目数拉开。最后以3目半的优势赢了第一盘。
这下IGS上炸开了。世界冠军都输了,而且还是下的慢棋。根据以前的推论,墨绿不是中日韩三国任何一国中排名前二十名的职业棋手。难道他会是一个业余高手?可是,再高的业余高手遇到这些超一流的专业棋手都要输棋,可墨绿却能常胜不败。有人说他可能是几个专业棋手联合起来的棋手。可是几个棋手要讨论起来,很少能达成共识。下快棋的时候就更没有时间讨论,看来这个假设也不成立。中国的一个围棋BBS上有人猜测说墨绿是早年的专业棋手,多年闭门不出,现在成了风清扬式的人物。
第一盘棋结束以后的几天里,IGS,各个与围棋有关的新闻组,BBS到处都是谈墨绿的话题。大家讨论墨绿的身份可说是众说纷云,但随便谁提出一种假设,马上就有人以很有力的论据把它给排除。因为当时市面上最强的计算机程序也就业余四级左右,根本没有人会朝这方面想。在此以前,墨绿的名气主要是在IGS上响,这盘棋下完以后,影响扩大到整个围棋界,各种报纸、杂志也开始报道起来。
十一.三番棋(2)
三番棋第一盘的时候,为了对付对方给出的各种难题,墨绿可以说是“绞尽脑汁”,而且随时要从硬盘里索取不太常用的模式。整个比赛过程硬盘都叽叽嘎嘎响个不停。为了怕出现意外,我专门去买了一个很高级的硬盘,把全部程序拷贝上去,三番棋第二盘的时候就用上了。殊不知这反到铸成大错。比赛到中盘,双方正为了一大块棋杀得难分难解的时候,新买的硬盘死了。其实它也没完全死,只是读不出东西来(我也没有意识到这个问题)。硬盘死了而联网却没有中断,也就是说墨绿的钟一直在走。我在一旁急出好几身汗也不管用。一个小时过去了,它仍没有得出结果。因为我一直用另一个帐号在看这盘棋,所以可以看到其它看棋的人的评论,就按照评论中我认为最好的走法帮它走了一步。当时提出这个走法的人看见墨绿走了它提出的棋还很得意,说是英雄所见略同云云。这步棋后来被证明是一步很坏的棋。几个回合下来,墨绿就损失十几目,随后因增大风险系数而采取的无理棋又被对方予以严厉的惩罚,越输越多。这个时候我才发现墨绿没有认输的“习惯”。在这之前,这从来都不是问题。因为对初学者来说输多少都照下不误。后来有点水平以后因为都与同级的人下,又没有昏着,也没有输太多的时候,不认输也没关系。最近一年以来,从来没有输过,不会认输的问题就更不成什么问题了。现在几步无理棋走下来已经落后二十多目,它还没有认输的意思,而且好象又要加大风险系数。我实在是看不下去了,这简直不是它这种水平应该走的棋,于是就绕过它的程序强行让它认输了。
墨绿输掉第二盘使它的众多支持者们很失望,他们从来没有看见过墨绿走出昏着的时候,完全不能理解出了什么问题。韩国的棋迷就不一样了,他们对这盘棋的结果异常激动。说是终于找到了墨绿的命门。连韩国的报纸上也打出了韩国必胜的大标语。中国的一些BBS上有人建议墨绿中途应该吸吸氧等等,说什么的都有。
一盘本来应该是惊天动地拼杀的棋,却在仅仅一百三十多步就结束了。不仅观棋的失望,主办单位也觉得很扫兴,言语间大有投资错误的意思。后来有人说,三番棋能打到第三盘应该更有吸引力,大家又都高兴起来。
十二.三番棋(3——准备)
二十多天很快就过去了,眼看三番棋的第三盘马上就要开始。报纸上也开始大力宣传,甚至还有些报纸搞起了类似于买马票一样的赌钱活动。韩国那边最高赌到一比十。也就是说他们认为他们的世界冠军赢第三盘的概率是十倍于墨绿。中国这边由于多年受韩国这个世界冠军的气,从心里希望墨绿赢,表现在赌票上的比是倒过来的八比一。对此我感到很欣慰。比赛还没有开始,双方的棋迷已经在报上,BBS,甚至在新闻组RGG上打起来。
根据我对墨绿的了解,我认为它已经比这位世界冠军要高出一截,所以我对墨绿充满了信心。但事关重大,而且由于我基本看不懂他现在的棋,我的看法或许不准。为小心起见,我把能找到的这个世界冠军所有的棋谱都给它找来,让它过一遍。以前为了全面发展,我特别注意让它不要只打一个人的谱,这次算是破例。说来奇怪,以前它读别的专业棋谱,总要花一小时左右才能读完一盘棋。这世界冠军的棋应该更难,时间应该更久才对。但他总是十来分钟就读完一谱,而且是越读越快。后来发现,它打所有韩国棋谱都快。仔细分析起来,这是有它的道理的。高手下棋,总讲究味道、感觉。而这些东西对墨绿来说是最难理解的了。而韩国棋手的棋大都讲究硬算,不管棋型、味道,算清楚以后什么难看的棋都能走出来。而要说起算棋起来,这当然是墨绿的强项。所以,它打起韩国棋谱感觉是得心应手。看它越打越快,我对它的信心更足了,可以说是到了不可动摇的地步。如果有人要与我赌一比一百我也愿意。
从各种报道中看到,不仅墨绿打这世界冠军的谱,这世界冠军也打墨绿的谱。据说从打谱中得出结论:墨绿擅长绞杀,一旦杀起来就没不占便宜的时候。所以这次这世界冠军的对策是尽量不与对方急战。说是要争取走成细棋,最后用他的收官功夫拿下这盘棋。
这次比赛,虽说是在IGS上,但中日韩三国的大电视台都有挂盘讲解。观众比上次又多了不止十倍。我住这里虽然收不到电视转播,但上网总是很容易的。比赛那天晚上,有棋友打电话来说准备通宵不睡,要与我一起从网上看这盘棋。没有人知道我与墨绿的关系,我的这些朋友当然也全蒙在鼓里。我必须要现场伺候,以备不时之需,当然不可能与他们一起看棋。于是胡乱编了一堆理由把他们挡了回去。
十三.三番棋(3——比赛)
晚上九点(韩国时间早上九点),比赛开始了。第三盘又重新抽签,墨绿抽到白棋。鉴于上次的教训,我这次买了三个硬盘,每个上面都装上了墨绿程序。如果有一个死了,我可以马上联上另一个,这样三保险就不应该有什么问题了。
由于黑棋的战术是不绞杀,所以开盘到中盘都在走简明的棋,白棋没有杀棋的机会。其实,墨绿并不是一定要走杀棋。那些杀棋都是为对付对方的凶狠棋而算出来的。它总是在计算后走出它认为目数上最优的棋,并不一味追杀。对方走简明棋,没有杀棋的必要。不过这也没有关系,它仍然走它自己算出的对它最有利的棋。这样一来,不知不觉走成黑棋占实地,白棋取外势的结果。一百一十几手走下来,黑棋的实地是有一些,但外势完全被白棋占了。如此走下去,黑棋必输无疑。网上的评论都一边倒,说是再不打入就没机会了。
果然,在一次长考以后,一颗黑子终于还是投进了白棋的厚势中。这步棋一走,网上看棋的人一下子就炸开了,说什么的都有。有人说这步棋真是妙啊,只有世界冠军才能想得出来。有人说早就该进去了,现在好象太晚了。
网上一片沸腾,我这边也热闹起来。黑棋一打入白阵,墨绿一下子就忙起来。只听见我的硬盘吱吱的响个不停。对打进来的棋,它有两种处理办法。一是从上面封住,这样还是可以成不小的空。一是把打进来的这一子切断,关起门来杀。这样走风险很大,但从上面封住的走法似乎目数会不够。经过一阵狂算以后,墨绿终于把打进来的黑棋同其大部队切断。这棋一旦被切断以后,就只能靠原地做活,而对方的目标就是不让你做活,一场大战是不可避免的了。于是双方昏天黑地地杀起来。一旦杀起来,墨绿的优势就出来了。一阵乱杀以后,走成了劫。在白棋的空里走出了劫,本来应该算黑棋成功了。但这个劫是个缓气劫,也就是说黑棋赢了劫以后还得再补一步才能彻底活净。这个劫黑棋是非赢不可,而白棋就有很多选择。因为白棋在绞杀过程中已经把黑棋围起来了,也就是说原来的厚势已经有相当一部分化成了实地。利用这缓气劫,白棋等于可以在别处连走三步。黑棋不但非活不可,别的地方也不能吃太大的亏,而白棋只需再利用打劫占一点小便宜即可,三个小便宜加在一起就大了。十几手劫材交换下来,黑棋已经没有大劫可找,而几乎白棋找的任何劫黑棋都得应。最后,只好丢卒保车,对墨绿在角上找的一个劫不应了。中间这块棋总算活出来了,但原来活生生的一个角被白棋弄死不说,另一个角也被弄成两目活,又损失了十几目棋。这一交换下来,双方现在的目数是盘面相同,也就是说黑棋贴不出目来。打劫过程中一切味道都被走尽了,黑棋再也没有地方可以把这七,八目棋找回来。一阵长考以后,黑棋投棋认输。
黑棋的认输并没有在观棋者中引起太大的惊诧。因为从打劫开始,大家就已经意识到黑棋不行了,输赢只不过是迟早的问题,除非白棋走昏着。但大家都知道白棋是几乎从来不走昏着的。墨绿的众多支持者们到现在也没想通第二盘是怎么一回事。
十四.三番棋以后
三番棋下完的当天中日韩三国的报纸就有了报道。因为世界冠军是韩国的,所以他们的报道比较偏向于黑棋。说是前半盘都是黑棋占主动,如果黑棋早一点打入,情况会如何如何。言下之意黑棋本来是很有希望的。中国的报道感情色彩比较重。因为好几年以来,中国的棋手都是因为这个世界冠军而输掉了重大国际比赛。这次看到终于有人把他宰了,而且宰得很干净,难免有点幸灾乐祸的心情。评论中充满了带感情成分的词语。什么“天王杀手被绞杀”,“铁官子无官可收”等等。日本的报道没有什么感情成分,基本上是照实报道,说这盘棋是墨绿完胜。也就是说黑棋从头到尾没有什么机会。一般来说,人们说完胜大都是说黑棋,因为黑棋先下,有主动权。如果说白棋完胜岂不是说黑棋还没下就输了。我觉得事实就是如此。墨绿现在已经有让人类最高手一先的实力,而且又不会走昏着,下平手的话,当然是黑棋还没走就输掉了。
原来说好胜方可得五十万美元。而且我已经告诉了主办单位我在瑞士的银行账号。但三番棋结束一周以后还不见有钱进去。打电子邮件去问,主办单位说是要搞一个隆重的发奖仪式,其主要目的就是要见一下墨绿其人。因为他们觉得五十万美元花出去,连人影都没有见到,有点不甘心。但我坚持不参加什么发奖仪式,说是宁可不领奖。只要他们丢得起这个脸,我不领奖也没有关系。当然,这个脸他们是丢不起的。堂堂大企业,说了要给五十万美元,怎么可能不给呢。相持一个星期以后,他们还是放弃了一定要见人的要求,把钱寄到了我给他们的账号上。
想要见人的还不光是主办单位。许许多多墨绿的支持者也在各种BBS,新闻组里提出,赢了世界冠军算是功成名就,应该是墨绿露面的时候了。墨绿的电子信箱两天之内就爆满了。基本意思是墨绿不应该让这么多支持者失望,应该满足大家的要求与大家见面等等。
墨绿到底是谁的话题从来没有停过,这次三番棋以后,这个话题几乎成了各个与围棋有关的BBS的唯一话题。
十五.神秘消失
猜墨绿的身份当然以BBS和新闻组最热烈。因为这里没人控制,猜什么的都有。有一天有一张贴子说,根据他对墨绿的棋谱的分析,墨绿很像一个计算机程序。他还列出了许多证据来支持他的观点。
世界上的许多事,主要是没有人想到。一旦有人想到了,你就会发现问题其实早就很清楚。由于现在人们知道的最强的围棋程序只有业余四级左右,墨绿的实力却如此之高,人们几乎从来没有朝这方面想过。现在有人朝这方面想了,而且提出了许多证据。人们才发现果然是很像,并且有越来越多的人提出了新证据。比如墨绿打字出奇的快,许多人在IGS上与墨绿对话,总是刚打完送出去就收到回话。这些回话都是我事先编好存在它的记忆里的,回答起来当然快。大家现在意识到不可能有人打字能这么快,而且它有时答非所问。还有人说他曾经看见过墨绿同时下两盘棋,而且同时落子。那其实就是上次抓耍赖的人的时候,当时正在下一盘棋,耍赖的人进来了当然不能放他走,于是马上另开一盘。因为那盘棋已经是墨绿大胜的棋,没花太多功夫就拿下来了,没想到就这一次还是被人注意到了。IGS的管理员也调出了许多历史记录来证实这些指证,问题看来是越来越清楚了。还有许多人给IGS管理员出主意,下次墨绿在IGS登陆的时候用什么样的手法可以判断墨绿是真人还是程序。这点我不是很害怕,因为我可以替墨绿登陆,他们不可能判断出来。但是,一旦有人开始往这方面注意了,被证实就只是迟早的事。
三番棋以后我一直在考虑要不要收手。我当初写这个程序的目的就是要战胜人类最高手,现在这目的达到了,似乎到了该收手的时候了。现在的事实是,墨绿已经比当今最强手还强。如果总是赢,就少了激情。这墨绿维护起来还是很花功夫的,没有激情的事我就不太愿意做。而且,有了这五十万美元,财政上也可以松一松了。最重要的一点是,墨绿的成长来源于进化。如果没有了外来促进因素,就没有了进化的来源。自己与自己下只能产生一些同水平的变种或小小的进步,不会有太大的实力上的区别。长此下去,自己不进步而别人却在追上来,墨绿就会有输的时候。激流勇退,通俗说起来就是见好就收。我正在考虑要不要见好就收的时候,看到了BBS上大家向IGS管理员提出的如何判断墨绿是否是程序的建议。任何事如果拖得太长,就会有漏洞出来。考虑了很长一段时间以后,我决定让墨绿金盆洗手,脱离这围棋江湖。决定做出后,我在IGS墨绿的信息栏里留下了这么一段话:
余弈棋于IGS五载有加,近一年来下棋过百,皆无敌手。与世界冠军三番棋以后,自认为棋力已可让当今所有高手一先。昔日闻有独孤求败之事,而今方识个中滋味。现如继续盘旋于IGS,定无先前之激情。有鉴于此,决定从此封盘。它日如有人主持与来年世界冠军让先之下的三番赛,余必随时赴约。
再见IGS。
墨绿从IGS世界中消失,它的爱好者们一下失去了崇拜目标,显得不知所措。有些特别激动的人居然也在BBS上说要随墨绿而去,从此不再下棋。说是没有墨绿的围棋世界就好象没了太阳,缺了生气。绝大部分人没有这么激进,只是说墨绿退出IGS的一天可以算是IGS历史上最黑暗的一天。还有人开始在各个新闻组写回忆文章,仿佛想借此追回失去的美好记忆,让墨绿在他们心目中多留一些日子。凡此种种,大家对墨绿的讨论非旦没有因它的消失而停止,反而变得更加激烈,生动。而且讨论范围不再局限于网上,连报纸也开始加入讨论。这就有了我们文章开始的那一段人民日报评论。
墨绿在IGS宣布封盘的第二天,IGS网管在IGS登陆首页加入了醒目的大字横幅:
墨绿是IGS永远的骄傲!
(全文完)
后 记
当今最强围棋程序不到业余三级,与职业棋手的差距可说是十万八千里。本文属幻想文字,里面提到的技术手法,虽然都是现在大家正在研究的,而且有些已经被用在一些程序中。但想法和具体执行还有很大的距离。我在文章中完全忽略了具体实现的问题,所以才会有墨绿这样的理想结果出现,这不过是表现了我们的一些梦想。另外,我自己的棋力大约只有IGS4D★,对职业高手们下棋时的思路并没有真正认识。但我相信,真正有实力的程序的出现,一定要有这些职业棋手的参与,单纯靠计算是不行的。据说深蓝设计组请了好几位职业国际象棋手做他们的顾问。不过,即使有专业高手介入,围棋计算机程序的任务还是很艰巨的,可谓任重道远。围棋与国际象棋完全不同,对计算机的要求要高很多数量级,要在程序上突破,单靠深层搜索是不行的,必须要有思想上的突破。我个人认为,二十年内不会有围棋程序战胜人类最高手。但梦想是一切新事物的动力,没有了梦想,人类就会停止进步。我有了关于计算机围棋程序的梦想,遂有了这篇文字。
2004年2月9日于美国波士顿西郊