|
国际象棋引擎:穿越困惑
Aaron Tay
前言
过去,购买能下棋的国际象棋软件是简单事情,你买下它,它是一套能下国际象棋的程序,就是那样了。不过在今天,棋弈程序(或者,我应该称之为引擎)是高度“可移植的”。
随着越来越多的棋弈程序遵从如Winboard和UCI协议等各种协议,它们不再被限定于一个软件或界面了。用户现在可以把一个棋弈程序(引擎)从一个他们所购买的软件/界面中“输出”到另一个[软件/界面]。
如果你还一点都不了解Winboard和UCI,本系列文章正适合你。
棋弈引擎所走的棋
首先让我们来定义几条术语。当我们谈论起你所购买的一套常规软件时,比方说 Chessmaster
,你可能以为整个软件包就是完整的一个整体。实际上,我们可以把这套软件分开成彼此很不相同的两个组成部分来看待。第一部分是我所说的用户界面或者图形用户界面(GUI),而另一部分就是棋弈引擎(Chess
engine)。【译注:往往分别简称界面和引擎】
关于用户界面,我指的是与用户有交互操作功能的软件部分。这可以是程序中显示棋盘、让用户走动棋子,以及棋局数据库搜索过滤器或实现ICS客户端在线功能的任何功能部分,等等。用户界面要与棋弈引擎区分开来,棋弈引擎是指实际决定或计算该走哪步棋的程序部分。
那么对于Chessmaster来说,虽然整个包装被命名为Chessmaster,但实际上它可被视作由两部分所组成:Chessmaster界面和名字叫"The
King"(国王)的棋弈引擎,引擎的作者是Johan de Koning。这两部分,常常是由同一人所写,但也不一定这样。
灵与肉
通过这样把国际象棋软件分开成两个组成部分,现在你可知,一个棋弈引擎有可能在不止一个界面下都能够良好地运行。
思考一下这种情况:你可以把比如Crafty(著名的免费棋弈引擎)“输入”到Winboard,Fritz, Chess assistant等或者其它任何界面中去,令Crafty运行,这个事实暗示了肯定存在某些方法让Crafty与软件之间建立联络。这也暗示了有两个程序在工作着,“大脑”或者说是引擎部分命令该走哪步棋,同时用户界面(也称作GUI,即图形用户界面)处理棋步显示的工作以及与用户建立互动交流。
所有工作是同时地、无间隙地进行着的,你看上去就象只有一个程序在运行。不过如果你观察任务管理器里的程序运行情况,你就可以清楚看见有两个程序在工作着。作个粗略比喻,可认为界面就是“肉体”;而棋弈引擎就是“灵魂”,是它在作决定。上述例子中,Crafty充当灵魂,它在任何一个能忠实地反映由Crafty所决定全部棋步的“肉体”/界面中都能工作得同样的好。
显然,每当提及一个国际象棋软件包的时候,我们必须小心指明我们是在说它的界面还是引擎,特别是当这两者顶着同一个名字时【译注:比如说起Fritz,必要时必须分清是指Fritz界面还是Fritz引擎,还是指整套Fritz软件。后面还有进一步说明】。不是所有的棋弈引擎都能运行在全部用户界面中的。对于能良好运行在某用户界面(Fritz,Chess
assistant, Winboard等)的某棋弈引擎,它们两者必须通过共享一种通用的通讯协议或“语言”来进行交流。
协议为什么重要?
前面已经讲过了,当所有引擎和界面共享同样的协议时,你就可以在同一界面里切换引擎以及它们彼此之间对战了!为什么要这样做?原有界面默认所带的那一个难道还不足够了吗?原因可以有以下这几点:
·你弄得到外部的引擎,它们很多是免费的;
·很多免费的棋弈引擎比你能买得到的商业性产品水平要低,所以免费的作为训练对手可能正合适,因为它们的水平与你相近。当然,你可以使用“降格”功能(比如Fritz里的Friend
mode,即友好模式),多数现代程序都有这个功能,但是据我的经验,这样做经常导致不真实的棋。
·你可以把引擎迎合转到你最喜欢的界面上。
·你能够从风格不同的棋弈引擎的宽广范围里得到分析结果。你可以视之为寻找“第二选择”,毕竟每种引擎都有其长处和短处。这可以通过比较分析来做到,甚至就让两个引擎之间进行比试!
·至于你属于那些对电脑与电脑之间进行对战以决出哪个引擎实力更强甚感兴趣的,现在可以了,因为现在是每个引擎轮流走棋。
注意尽管这是可行的,但只有在棋弈引擎和界面都使用同一协议的情况下才能做到。倘若你所用的引擎不支持任何一种主流协议,那基本上没办法。目前有两大开放协议和一个主要的非开放协议。
“语言”
到目前为止最通行的协议或者说所使用的语言,是Tim Mann所提出的Winboard通讯协议【译注:Tim
Mann同时也是Winboard这个工具的主要作者】。现在至少有120种免费的国际象棋棋弈引擎支持这个协议。另一个是Shredder的作者Stefan
Meyer-Kahlen和SOS的作者Rudolf Huber所提出的通用国际象棋界面协议(UCI),到写这篇文章的时候,它有大约20种引擎支持。
Winboard协议
Winboard(以及它的Linux版兄弟Xboard)可能作为连上网下棋的软件客户端更为著名些。但严格来说我们有必要把它的界面本身和它的协议进行区分。
Winboard协议最初是随Winboard的出现而出现,但Winboard(指用户界面)不是唯一支持Winboard协议的界面。事实上,Winboard作为支配标准,它被多数商业性和很多免费的界面(包括数据库、棋弈程序)所支持。简单列几个包括Chessbase
GUI(通过适配器,在系列第二部分再谈及)、Chessmaster 8000、 Chess Assistant、Chess Academy、Chess
Partner以及更多。
国际象棋通用界面(UCI)
正得到普及的另一开放性协议是国际象棋通用界面协议(UCI)。第一个支持UCI协议的界面是商业性的Shredder 5,它的作者也是UCI的提出者。最近,其它界面已开始支持它了,包括Chess
Assistant 6、 Chess Partner 和
Fritz 7。【译注:因此自从Fritz 7之后,支持UCI的引擎都能够在Fritz界面下使用--注意又再次提出这两个(甚至该说是三个)概念的区分,一般说的Fritz是指这整套软件;Fritz有它独特的界面和显示、功能选单和操作,这就是Fritz界面;而负责棋步计算的核心,即引擎,在商业上也叫Fritz引擎,但在技术上,它有别的名字,如Quest。使用过Fritz的人都知道,除了"Fritz"这个引擎外,它还带有别的其它引擎,而且可以添加。这样就很容易理解什么叫引擎、什么叫界面、又什么叫整个(套)会下棋的软件。】
开放与非开放协议
Winboard和UCI都是开放性协议的例子。意思是协议自由公开,任何程序员都可以(如果愿意)设计使他们的程序适应其标准。这与非公开协议相反,后者的标准不公开,既包括私有的不打算让别的引擎理解的界面;另一方面也指秘密/版权协议,它只被属于同一家公司的引擎、或付了许可费用而有权使用该协议的作者所写的引擎理解。Chessbase协议可能就是最出名的一个。【译注:作为国际象棋数据库的那套chessbase工具,知道的人应该比较多;但说起"chessbase",要注意可能指:1)chessbase协议,正是本段所述;2)chessbase所出版的那些软件的统一界面或典型界面,以Fritz的最典型;3)名字就叫chessbase的那套国际象棋数据库工具;4)chessbase这间公司,或者它的网站;等等】
一般而言非开放协议不太令人感兴趣,因为它们只支持一小部分的棋弈引擎。而Chessbase协议受人关注是因为一些当世最强的棋弈引擎在使用它。这个系列包括Fritz、Junior、Nimzo、HIARCS
和(最近的) Tiger以及Shredder,当然它们都是商业性的。不过除了个别例外,一般没有外人能知道Chessbase通讯协议标准是如何工作的,或怎么样去使自己的引擎去遵照这些标准。
例如,最著名的自由引擎Crafty也可作为Chessbase引擎。但是Crafty的作者Robert Hyatt博士爽快地承认他自己不知道怎么样写作Chessbase引擎,因为Chessbase版本的Crafty遵从Chessbase的人员。对于多数你能够自由下载的Chessbase本地引擎也是如此。
虽说Chessbase界面也可支持Winboard协议,但这样的引擎在可以运行于Chessbase前必须进行“适应化”。而经过这样的适应,Winboard引擎相对于使用Chessbase秘密通讯协议的“本地”棋弈引擎,棋力大大下降了(第二部分再详述)。
上述协议还不是全部,还有被例如Shredder 3/4、Zarkov 5、WChess2000和Genius 6.5所支持的世纪国际象棋系统(MCS)。但是我提到的上面三个是大家最可能遇到的。
以后几篇我再和大家简单说关于各种协议的历史及区别、引擎和界面使用的问题,还要简单说各种协议在ICS支持上的情况。现在我列一个表格,里面包括常用界面和它们所支持的协议。
|
名称
|
Winboard协议
|
UCI协议
|
Chessbase协议
|
备注
|
|
Arena
|
协议 1 & 2
|
支持
|
不支持
|
Arena是一个将要发布的新界面
|
|
Bookup
|
协议 1
|
不支持
|
不支持
|
NA
|
|
Chess Academy 6
|
协议 1
|
版本7支持
|
不支持
|
也支持Millennium Chess System (MCS)
|
|
Chess Assistant 6
|
协议 1 & 2
|
支持,但不包括简化版
|
不支持
|
也支持Millennium Chess System (MCS)
|
|
Chessbase GUI like Fritz, Junior, Hiarcs, Shredder
|
支持,要带适配器
|
打上补丁的Fritz7支持
|
支持
|
Shredder 5.32只有CB GUI. Shredder 6 有两个不同的界面, 一个CB的和一个UCI的
|
|
Chessmaster 8000
|
协议 1
|
不支持
|
不支持
|
Chessmaster 8000是一winboard引擎
|
|
Chess Partner 5.0.0.4
|
协议 1 & 2
|
支持
|
不支持
|
NA
|
|
Chess Vision
|
协议 1 & 2
|
不支持
|
不支持
|
NA
|
|
Gandalf 5.1
|
协议 1 & 2
|
支持
|
不支持
|
由Rebel发售, Gandalf 5.1 (引擎)只适用于Winboard
|
|
SCID
|
协议 1 & 2
|
不支持
|
不支持
|
SCID是一免费的国际象棋数据库
|
|
Shredder 5
|
支持,带适配器
|
支持
|
不支持
|
Shredder 3到5 也支持Millennium Chess System (MCS)
|
|
Winboard
|
协议 1 & 2
|
不支持
|
不支持
|
最早支持Winboard协议的界面
|
【译后注:原文写于2002年3月,译文几经修订,最新订于2004年10月。此时Arena已经推出1.08版(不含内部测试版);Fritz发展到Fritz8和Deep
Fritz8,不用打补丁也直接支持UCI了;Shredder发展到Shredder8和Deep Shredder 8;Chessmaster发展到10000版;Chess
Partner发展到5.3版;ChessBase刚推出第9版。没有特别说明的各协议支持情况和表中一样】
出处: Aaron的国际象棋引擎FAQ主页
译者: Michael
类型: 摘译
|