| ZT墨绿 (1) |
| 送交者: cruiser 2004年02月15日20:44:52 于 [竞技沙龙] 发送悄悄话 |
|
◆ 墨 绿 ·万精油· 墨绿的出现,同时震惊了中日韩三国棋院,一个共同的问题是:墨绿究竟是谁? ——人民日报体育版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级与专业棋手还有很大的差距。虽然如此,这个级别的棋已经有相当的水平,再往上进步已经不能单靠计算,还要讲究对棋有感觉。而感觉这个东西是现在的任何程序都不具备的。这次停下来,一停就是半年。虽然也随时在网上与别人下棋,但总是没有长进。出路在哪里呢?
|
|
![]() |
![]() |
| 实用资讯 | |




