飞扬围棋

 找回密码
 注册
搜索
查看: 5042|回复: 2
打印 上一主题 下一主题

奇文欣赏 --- 墨绿[转帖]

[复制链接]
跳转到指定楼层
1#
发表于 2004-2-19 07: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级与专业棋手还有很大的差距。虽然如此,这
个级别的棋已经有相当的水平,再往上进步已经不能单靠计算,还要讲究对棋有
感觉。而感觉这个东西是现在的任何程序都不具备的。这次停下来,一停就是半
年。虽然也随时在网上与别人下棋,但总是没有长进。出路在哪里呢?
             五.模糊函数与量子波
  计算机程序的一大优点是对任何棋形都可以有个好坏判断,在搜索范围内一
切都不会错过。可是,从某种意义上来说这也是一种缺点。一切都靠算,能覆盖
的面积自然就少了。而且,许多棋的好坏要到十几步甚至几十步以后才会表现出
来,这是不可能算出来的,主要是靠感觉。另外,一个棋形的好坏并不是一成不
变的,在某些情况下坏棋形也会有好价值。就连被认为是最坏棋形的空三角也经
常在专业棋手的对局中出现。如果我们把一个棋形的好坏价值定死了,就没有产
生这种变化的可能。我很早就想过要把模糊函数的概念弄到我的判断程序里面去。
可是无论怎样模糊,在运算过程中,模糊量的大小还是得人为地规定。对一个固
定棋形还是会算出同样的结果(虽然结果以模糊的形式出现)。
  每一块棋除了死变化以外,都是有生命的。它的生命力以辐射方式向外散发,
所以有“空提一子三十目”的说法。固定的程序是没有办法算出这种生命力来的。
有一天读到一篇讲量子计算的文章,突然想到可以试一试在我的程序中加入量子
波。这样一切运算都以概率的方式出现,没有固定结果,但通常会产生最自然和
理想的结果。加进去以后,它果然变得丰富多采起来。居然可以走出很多从前绝
对想不到的棋。不过,加进量子运算以后,效率变得比较低,搜索范围变小了,
棋力居然比以前小有退步。但我并不为此失望,退一步进两步,只要大方向是朝
前就行。关键是方法,效率问题总是有办法提高的。后来我花了一些时间把程序
彻底整理了一下,又把我的计算机硬件升了级。如此一来,它的运算效率比以前
增加了一倍,棋力也随之猛长起来,而且这次长起来就没有停。几个月下来就升
到一段(1D★),而且根本没有停的意思。我的兴趣也跟着高起来,随时随地
都在思考它的问题和解决办法。什么事情都想看看对我的程序是否有帮助,连开
车等红灯都在想这最短路径问题是否可以用到这程序的搜索路径中去。这样一来,
新的想法天天都有。
  IGS是国际性的网站,任何时候世界上总有一半的地方是白天,也就是说
任何时候都有人下棋。我的任何新想法都可以立即得到是否有用的验证。我每天
下班回家就全力扑在它上面。不断地改进,不断地加上新的想法。我把这程序没
日没夜地挂在网上,它的棋力每天都在长。两年下来它终于达到4D★。
  这个程序的运作很依赖计算机的速度,这包括主机速度,硬盘阅读速度,以
及内存容量。为了充分发挥它的潜力,我当然想给它配置最好的装备,这就需要
钱。而且如果想买刚上市的新产品,就要花大钱。台湾每年一次的计算机围棋比
赛,如果能拿第一名,就可以得到相当数量的奖金,至少买新机器不成问题。但
我又不愿引起别人的注意。于是我把我的程序简装了以后去参加这个比赛。所谓
简装就是拿掉一些子程序。但我的程序比别的程序高出太多,拿掉子程序后我又
给它加了一些限制,基本上就是让它每盘能赢,但总在十目以内。最后一轮以前,
我的程序全胜,即使输掉最后一盘也稳拿第一。于是,我在最后一场比赛前又拿
掉了最主要的子程序,输了最后一盘。这样别人都认为它与别的程序属于一个档
次。我又不像别的参赛人总想打名声好卖他们的程序,而是拿了第一名的奖金就
赶快走人。因此,我的程序虽然拿了第一,却没有造成什么影响。第二年的比赛
我没有去参加,这程序就渐渐地从大家的记忆中消失。有少数人记得,也只知道
它大约是业余5级的水平。
2#
 楼主| 发表于 2004-2-20 05:05 | 只看该作者
SORRY,看偶粗心的.下次再也不转东西了.
回复 支持 反对

使用道具 举报

3#
发表于 2004-2-19 10:13 | 只看该作者
虽然是不错的文章,可是有人刚贴过啊
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|Archiver|手机版|飞扬围棋网 ( 苏ICP备11029047号-1 )

GMT+8, 2024-12-1 20:08 , Processed in 0.333889 second(s), 19 queries .

since 2003飞扬围棋论坛 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表