http://www.chessit.net
 
棋艺探讨之一   棋艺探讨之二   人物棋史译文   实战评局译文   专题译文

当前栏目:专题译文

发信本站 正文字体:[默认 小字 大字 更大
Shredder成功背后的秘密
Stefan Meyer-Kahlen


  Shredder赢得了去年的Paderborn世界电脑象棋冠军【译注:指1999年。Shredder,著名的德国电脑棋弈软件。本文是它的作者写的,当时是指Shredder4.0版。2001年最新版是Shredder5.32。】 在最高水平的软件中,我的软件是并非运行在昂贵高速多CPU电脑系统中的唯一一个,于是许多人就问它是如何赢得这场不平等的战斗的。接下来本文就准备回答这个问题,并且大概地介绍一下电脑象棋的背景知识。你无须是个专家就可以读懂下面的内容。
  首先,我要避免使用太多技术词汇,解释一下电脑是如何下棋的。一个电脑程序由两个主要部分组成:一个估值函数(evaluation function )和一个树状搜索算法(tree searching algorithm)。后者是用来搜索几乎全部可能的棋步次序,目的是为了找出对于程序来说是最佳的一条路线,而程序依靠估值函数来判断对于一方来说什么局面是好而什么局面是坏。
  在每一个局面中平均有35个合法的移动,因此所有可能的变化数目大得难以想象。如果你只想为自己和为对手各考虑仅一步棋,我们就把这称为2层(plies),于是你将得到35*35=1225个不同的变化。如果只是各考虑多一步棋,或者说又多2层,那么你就会碰到35*35*35*35=1500625种可能性。可见,所有可能的变化是指数式增长的,意味着它们增长得非常、非常的快。甚至最快的象棋程序也无法检查全部的可能变化棋步;如果你只是往前看5、6步棋,就需要几个月的时间才能完成。我们该怎么办呢?好,诀窍就是电脑必须尽可能快地丢弃那些明显坏的变化,以把省下来的时间用于更多重要的任务。虽然从理论上说这看起来容易,但实践中依然有困难,比如王后一步看起来愚蠢的移动到最后却可能变成一步辉煌的胜利弃子。
  当查看几乎所有变化时,程序还必须对该变化的最终局面进行估值。第一个标准是子力,可以告诉程序一个后通常强于一个车,而一个车通常优于一只象或马,所有棋子强于兵。王并不被赋予价值,因为一旦它完蛋了棋局就结束了。问题是象棋还有很多事情是需要程序知道的。例如中局里一对叠兵或一个没有保护的王,通常是坏的。残局里一只推进的通路兵常常很厉害,而仅仅双马是无法杀王的等。有些因素要估值并不那么容易,比如位于d4的孤兵究竟强还是弱。你看到了,许多程序都可以被教,但要记住了几乎每条规则都有例外。上述例子中,叠兵也可能很强的。
  就我所知,如今所有强的、成功的象棋程序都是这样工作的。不过不要紧,仍然存在足够的空间可以让作者加入他们的想法和运算法则,因此无疑令每个程序跟其它的有迥然相异之处。我仅仅罗列现今象棋程序中运用到的一些基本概念而已。
  迄今为止,显然欲提高你的象棋程序的水平可以有两条路子:一是你可以尽力令它更快,这样它能在给定shredder的界面之一时间里检查更多局面并在棋局树里向前看得更远。二是令它更智能更聪明,如此令它更懂下象棋并且有能力更精确、犯更少错误地去评价局面。两者兼有是最优的,但很不幸那不可能,因为加入更多知识将会导致程序执行得更慢,而要得到一个更高的速度就只能删除一些知识。尽管并非绝对如此,你经常可以通过优化代码或算法来获得速度,不过我确实认为今天所有的高水平象棋程序的作者都已经是那样去做的。对于象棋程序来说,总能提供帮助的是一台飞快的电脑,因为每个程序在当今完美的快速机器上比在旧日的硬件上都会下得更好。无须去掉程序中一些内嵌的象棋知识就可以执行得更快。正是这个原因,重要的电脑象棋活动和联赛总是提醒我哪里有展示最新最高级硬件改进的硬件展览会。在去年的电脑象棋世界锦标赛上也不例外。
  在程序员和用户当中,总是有就如何达到优化棋弈水平的大讨论:是快但愚笨,还是慢但智能。我不太肯定究竟对这个难题是否有优化解决方案【译注:原文小小的笔误,weather和whether】,不过我将力图披露我对Shredder使用的方法并解释我的决定。
  我的意见是,提高程序的速度只能带来电脑棋弈水平一点点的提高。今天顶尖的程序已经达到这么一个高度,即要取胜就只能去选择抓住那很小的胜机。在这样的水平上,棋局并非取决于一方没注意到一个战术性的威胁以及可能的失子,而是取决于战略。要战略性地走棋你就必须懂得象棋。对于象棋程序,做到前瞻5、6步棋,在这范围里不犯战术性大错并等待对手出错,这是不足够的。我同意在与人类下快棋时这很有效,但如果时限较长,事情就变得显然了,如果缺乏对棋局的战略知识是不可能走得很远的。正如有位专业人士所说那样:“我不知道要去哪但我走的很快。”
shredder界面之二  另一个问题是,提高前瞻步数是一个非常缓慢的过程。当搜索树呈指数级增长时,在搜索树里每多深入一层就需要大约多三倍的时间。所以不幸的是,前瞻10步棋比起前瞻5步棋,你需要的时间不是两倍,而是59049倍更多的时间!在某些局面尤其是在残局即使你前瞻20步也未必找得到正确的那步棋。你只是必须知道“如何去做”但你无法去计算。
  然而,还有另外一件事你务必记在心里。象棋程序不仅仅是因为它们是象棋程序而存在。它们还被用来与使用者下棋,帮助使用者分析或支持他们。与当今的程序对弈,使用者当然会输掉大多数棋。但我的意见是,一个人必须分辨出棋是怎么输的。面对一个“智能”的程序你输是因为战略上被超越了,而面对一个“愚笨”的程序你输是因为在某个有希望的局势里却没注意到一个战术性诡计。有人可能会说:“恩,不管怎么样,输就是输嘛。”但有区别的:在这些范例中作为棋手你学到了什么呢?后一种情况你只是学会以后要小心,但在其他棋局你学晓了你在下棋方面的弱点所在。因此你需要一个能发现和挖掘那些弱点的程序。只是不巧,在面对一个“智能的”程序时,你也会碰到没注意一个简单的战术威胁或失去了一个子却什么也得不到这种情况的。
  对于家庭分析,更明显的你需要一个带有象棋知识的程序,否则程序对一个平静局面的分析对你来说没更多帮助。你或许说只是想就战术性漏着验证自己的分析,所以为这个目的程序不需要太多知识。当然,在那种情况下部分是对的。但是,今天所有的程序的战术能力都如此的高,以至无论多强的每一位棋手,如果程序能发现隐藏的战术,都可以从中得到教益。
  我当然不想质疑树状搜索的全部概念,但以今天的计算力量而言我们来到了这么一个点,在这里我们必须考虑如何发展电脑象棋了。
  已经说了那么多,我为Shredder选择的方向应该清晰了。当然我不能没有树状搜索,但我的确力图为了使Shredder能够下出好的成功的棋而给它加入许多重要的知识。我愿意摆几盘去年Paderborn世界锦标赛中的棋局,在那里Shredder走出了一些非常妙的棋。我并非在说其它的程序就不能发现这些好棋。关键是在多数对局里我的方法带来了更好的更有趣的棋局。

(20) Fritz – Shredder [C88]
WCCC99 Paderborn (2), 15.06.1999
1.e4 e5 2.Nf3 Nc6 3.Bb5 a6 4.Ba4 Nf6 5.0–0 Be7 6.Re1 b5 7.Bb3 0–0 8.a4 b4 9.d3 d6 10.a5 Be6 11.Nbd2 Rb8 12.Bc4 Qc8 13.Nf1 Nd4 14.Nxd4 exd4 15.Bf4 Nd7 16.Nd2 Bxc4 17.Nxc4 (图1)
图1
Shredder打开了对方的后翼,它暂时弃掉一个兵。
17...b3 18.cxb3 Nc5 19.b4 Rxb4 20.Ra3 Qe6 21.Bd2 Nxd3 22.Rxd3 Rxc4 23.b3 Rc5 24.Rxd4 Bf6 25.Rd3 Rb8 26.h3 Bb2 27.Qe2 Rcb5 28.Rd5 Be5 29.Qc4 c5 30.b4 cxb4 31.Rxb5 Rxb5 32.Qc6 h6 33.Qxa6 (图2)
图2
Shredder排除所有阻吓,准备支持它自己的通路兵。
33...Qd7 34.Rc1 b3 35.Qc8+ Qxc8 36.Rxc8+ Kh7 37.Rc1 b2 38.Rb1 Rb3 39.Bc1 bxc1Q+ 40.Rxc1 Kg6 41.g3 f5 42.exf5+ Kxf5 43.Rc6 Ra3 44.Kg2 Ra2 45.Ra6 Ke4 46.Ra8 d5 47.Rc8 d4 48.Rc4 Rxa5 49.Rb4 g5 50.Rc4 Ra1 51.Rb4 Bd6 52.Rb6 Kd5 53.Kf3 d3 54.Rxd6+ Kxd6 55.Ke3 0–1

(42) Shredder – Rebel [D23]
WCCC99 Paderborn (3), 15.06.1999
图31.d4 d5 2.c4 c6 3.Nf3 Nf6 4.Qc2 dxc4 5.Qxc4 Bf5 6.g3 e6 7.Bg2 Nbd7 8.Nc3 Be7 9.0–0 0–0 10.Re1 Ne4 11.e3 Re8 12.Nd2 Nd6 13.Qe2 e5 14.d5 cxd5 15.Nxd5 Rc8 16.e4 Be6 17.Nxe7+ Qxe7 18.b3 Rc2 19.Ba3 Rec8 20.Rec1 Rxc1+ 21.Rxc1 Rxc1+ 22.Bxc1 Qd8 23.Ba3 Qb6 24.Bf1 Nc5 25.Bb2 f6 26.Qe3 Ncxe4 27.Nxe4 Qxe3 28.Nxf6+ gxf6 29.fxe3 Ne4 30.Be2 Kf7 31.Bd3 Bd5 32.g4 Kg6 33.h4 f5 34.Be2 Kf6 35.g5+ Ke6 36.Kh2 a5 37.Kg1 a4 38.bxa4 Bxa2 39.a5 Bd5 40.Ba3 Nc3 41.Bh5 Bc6 42.g6 hxg6 43.Bxg6 Nd5 44.h5 Kf6 45.Bc5 Nc3 46.Kf1 Bf3 47.Bb6 Bg4 48.Bd8+ Kg7 49.Bc7 Kf6 50.Kg2 Nd5 51.Bd8+ Kg7 (图3)
一个只剩下几个棋子的残局。Shredder弃去一个兵以使它的王活跃。这个很难去计算,因为白方需要好久才能明显地从这只兵得到补偿。另外,对方有一对双联通路兵,这个被评价为比活跃的王的价值高得多。
52.Kg3 Nxe3 53.Kh4 Nd5 54.Kg5 Bh3 55.h6+ Kg8 56.Be8 Nf4 57.Bd7 Bg4 58.Bc8 Kh7 59.Bc7 Nh3+ 60.Kf6 Nf2 61.Bxb7 Ne4+ 62.Kxe5 Be2 63.a6 Bxa6 64.Bxa6 Kg6 65.h7 Kxh7 66.Kxf5 Nc5 67.Bc4 Nd7 68.Bb5 Nc5 69.Bb6 1–0

(106) Shredder – Ferret [A29]
WCCC99 Paderborn - Playoff, 19.06.1999
1.c4 e5 2.Nc3 Nf6 3.Nf3 Nc6 4.g3 d5 5.cxd5 Nxd5 6.Bg2 Nb6 7.0–0 Be7 8.d3 0–0 9.a4 a5 10.Be3 Ra6 11.Rc1 Bb4 12.Re1 f6 13.Bd2 Be6 14.Ne4 Nd7 15.Bxb4 axb4 16.e3 Bd5 17.Ned2 Qe7 18.b3 Raa8 19.d4 e4 20.Nh4 f5 21.Bh3 g6 22.Rf1 Qe6 23.Ng2 g5 24.Qh5 Qe7 25.Ne1 Qg7 26.Qe2 Nb6 27.Nc2 Be6 28.Bg2 Na5 29.Na1 Nd5 30.Rfe1 Nc3 31.Qf1 c6 32.Rc2 Kh8 33.Nb1 Nxb3 34.Nxc3 bxc3 35.Rxc3 Qf7 (图4)
图4我同意,Shredder把自己弄进了一个非常拮据的局势。不过,现在它走得很积极,作为一只弃兵的补偿,发起了反击。
36.g4 fxg4 37.Nxb3 Bxb3 38.Bxe4 Rxa4 39.Rc5 Be6 40.Rec1 h6 41.R1c2 Rfa8 42.Rb2 Bc4 43.Qc1 Be6 44.Qf1 Bc4 45.Qc1 Ra1 46.Rb1 Rxb1 47.Qxb1 Be6 48.Re5 Rf8 49.Qb2 Qf6 50.Ra5 Kg8 51.Ra7 Bc8 52.Ra8 Qe7 53.Bb1 Be6 54.Ra7 Rb8 55.Bd3 Qc7 56.Qb1 Bf7 57.Be2 Kg7 58.Bxg4 Bg6 59.Qb3 Bf7 60.Qb4 Kh8 61.Bf5 Kg8 62.e4 Kg7 63.Qb2 Kg8 64.Qa3 Kg7 65.Qa1 Kg8 66.Qa4 Qd6 67.e5 Qd8 68.e6 Bh5 69.Qc4 Qf6 70.e7+ Kg7 71.Qc5 Be8 72.Bg4 Qf4 73.Bf3 Kf6 74.Be2 Bd7 75.Bh5 Be8 76.Bf3 h5 77.Be2 g4 78.Bd1 h4 79.Qb4 Bd7 80.Ra3 Re8 81.Re3 Kg7 82.Be2 Qf6 83.Bd3 Rb8 84.Re5 b5 85.Bf5 Bxf5 86.e8N+ Rxe8 87.Rxe8 Bg6 88.Re7+ Kg8 89.Rd7 Be8 90.Qe7 Qg6 91.Rb7 Qb1+ 92.Kg2 h3+ 93.Kg3 Qg1+ 94.Kf4 Qxf2+ 95.Kxg4 Qg2+ 96.Kh4 Qf2+ 97.Kxh3 Qf3+ 98.Kh4 Qf4+ 99.Kh3 Qf3+ 100.Kh4 Qf4+ 101.Kh3 Qf3+ 0.5-0.5

  由于Shredder内建知识的巨大储量,它乐于为了积极行事或取得主动而弃兵。在非常多的情况下这导致好的积极的走棋,不过我不得不承认,有时Shredder的优势也会慢慢减弱所以它就会始终少一兵却没有补偿。幸运的是那种事情越来越少见了,只不过哪怕Shredder表现得越来越好我也会重视这种情况的。所谓电脑象棋的老毛病,即只会计算子力是不再正确的了,有办法去治愈这点。
  我有不少如何提高电脑象棋的想法。就在现在我正做着把两个分开的棋弈程序自动融合一起的工作。理论上,对于给定的局面有更好理解的那个程序的走法应该被选择。两个程序的实力被合加而缺点被避免。很快,我们就会看到这是否又是一条提高电脑象棋水平的途径。
  我不肯定地说本文中所表述我的所有理论是否正确,但是我的程序,运行在低配置硬件上的Shredder在世界电脑锦标赛的成功的确支持了我的观点。

【补充:本文发表一年后,在2001年世界微电脑国际象棋锦标赛上,运行在1.4Hz CPU上Shredder后续版本取得总成绩第三名。而在单CPU配置级别中成绩最好,也被授予了这个范畴的冠军,虽然这个比赛因事先没有严格规范硬件配置而引起后来的一些争议。
又补:时间过得真快,这就到了2003年阳春三月。这时候的Shredder最新出到了Shredder7,而且由Chessbase公司发行了;Shredder7可运行在多CPU下,在最近一期的SSDF电脑棋弈软件等级分排行榜上暂列第一名,时间是截止至2003-02-13】

 

出处: 卡斯帕罗夫网站的Columns之Man and machine(该网站已结束)
译者: Michael
类型: 节译

  原文  相关文章  棋局下载 

 

  返回首页   回本栏目   发表意见  

返回顶部