-
- 组织电脑棋比赛初步
-
- Aaron Tay/文
-
- 【编译前注:文章所说的组织电脑比赛,主要指个人自己测试进行软件之间的比赛。文章不是定义式地讲课,而是指引式的初步知识,因为将很快看到,软件之间的比赛有很多不定变数的】
-
- 一、前言
-
- 总的来说,组织电脑之间,或者说软件之间的比赛,可以是测试,是学习,也可以只是纯粹的喜爱和乐趣。话必须说在前头,组织这样的比赛会大量占用你的电脑时间和电脑资源。玩不玩由你自己定了。
-
- 二、软硬件选择
-
- 这是第一步要做的事,但难以一言而蔽之,因为都是很具体的情况,还取决于你准备使用什么软件。若棋弈软件能运行在同样的界面下或者使用特别协议使彼此之间能联系上,那就简单了,否则比较麻烦。以前曾采用人工帮忙输入棋步的办法,若只有一台电脑还只好用切换屏幕的笨办法,这不但费劲,而且效果不好,因为有些棋弈程序很独占资源,如果这样做甚至连它的棋力也大大下降。【译注:有些来信提到因找不到合适办法只好这样,并且很困惑高级的商业软件怎么还下不过旧的软件。毫不奇怪,越是高级复杂的软件,对电脑资源的独占性依赖一般越大,这样靠切换来走棋简直是毁了它】
-
- 三、用一台电脑还是两台?
-
- 理论上说,使用两台电脑分别运行两个软件优于只用一台同时运行它们,因为如此确保每台电脑的所有资源只用于各自一个软件,而且这样解决了软件的“同步思考功能”该不该打开的难题[后面还要说]。
- 可是,为玩电脑棋而专门准备一台电脑的人不是很多吧?使用两台电脑还最好是硬件配置一样的才公平,一台快一台慢就难办了。而且把它们连接起来有点复杂,对技术有些要求。更好的办法,可能是上ICS去寻找对手,不过依然有不好解决的问题:网上对手的硬件配置多种多样肯定有差别,“公平”难求。
- 目前可能还是用一台电脑的占多数。
-
- 四、“同步思考”(Ponder)功能打开还是关闭?
-
- 所谓“同步思考”,下棋的人其实一点都不陌生:当轮到对手走棋,他在想棋的时候,你是不是也在想当前局面和可能的续着?这就是同步思考。棋弈软件,哪怕很多免费的引擎,一般都有这个功能,当对方在思考时,不是走棋方的也在根据当前局面搜索、计算、推测续着。显然当人机对弈的时候,同步思考功能打开比关闭能提高软件的棋力。但软件之间的对弈,情况就有争议了。
- 有人认为在同一台电脑上进行软件对弈时,双方都要关闭同步思考,理由是这样确保一方思考时将独占全部电脑资源特别是CPU速度,不因对方软件也在思考而分走了部分资源。【译注:在Fritz内的引擎对战时,默认是关闭同步思考的。你可以打开它,但正如Fritz的帮助文件所说,这样意味着每个引擎只能用到CPU的50%速度。如果是50%还好,这样还算公平,但如果由于引擎程序设计等原因不是呢?】
- 另一方面,有人认为如果关闭了软件的同步思考,它简直是部分残废,不符合软件的本来面目,因为它在设计时程序作者通常是在一台电脑上打开这个功能来测试的。
- 例如Crafty有基于同步思考功能打开的时间管理,这样它通过同步思考假如能准确预测对手的下一着棋,就为以后节省了时间。但如果同步思考被关闭,就没这个好处了,结果导致Crafty在对局早段就花过多时间,后来陷于时间紧张。现在还不清楚关闭同步思考对有些引擎的伤害是不是也象对Crafty那样更显著,曾有人试验过指出关闭同步思考对所有引擎的影响是一样的,但另一方坚持己见。
- 一方打开另一方却关闭同步思考的情况,大概是最不可取的,因为对电脑资源特别是CPU速度的分享极不公平,软件对弈时要注意。
- 若使用两台电脑,那这个问题比较好解决,因为对弈软件之间不互相干扰抢资源了,这时候一般应该打开它们的同步思考功能。
-
- 五、选择赛制
-
- 若只是两个软件,当然用对抗赛形式了;5-10个软件的比赛,循环赛最常用,这时一般都挑选估计水平差不多的软件,不过这样决出的结果,你想得到实质性的结论更困难;若比赛的软件很多,水平不一时,通常用瑞士制;淘汰制比较少用;当然你也可以采用“应众赛”的形式,让要测试的软件依次挑战已知水平的软件,以检验它的棋力。【译注:有没有人使用擂台制?在目前技术水平下,似乎不推荐这种赛制,因为软件棋实际上很不稳定的。当然如果是娱乐那就随意了。】
-
- 六、选择对局时限
-
- 这个任务不简单。最起码有些软件是不支持部分特定时限设置的【译注:比如现阶段的Winboard就设不了多时限段】。有意见认为闪电战的参考意义远不如长时限对局,而且太短的时限对于很多软件来说由于在时间管理上因处理不当,容易出现时间恐慌以致崩溃。【译注:这主要是说软件之间的比较。的确,有些软件尽管本身棋力不凡,但在时间管理方面似乎设计不是很好,比管理较好的软件更容易出现超时现象,但这主要在闪电战中显著,长对局时限则基本没有影响。】
- 相反意见则认为,下快棋能短时间内完成更多对局,而谁都知道下的对局越多,所得到的结果更有说服力。
- 要注意的是,起码有些引擎在不同时限下的水平不同,象yace引擎,它在(超)快棋中的表现优于标准时限下,而有些引擎则相反。另一要考虑的是CPU速度,在慢速电脑上的某时限设置对局,相当于在快速电脑上的更短时限对局。假如你有兴趣搞超慢时限的对局,比如运算一天才走一步棋,让软件算得很深,那么可一瞥而猜测当今软件在未来硬件上的水平表现。
-
- 七、选择参赛软件
-
- 你面临的选择很多,而且情况多样,因而没有固定的,但我建议其中至少要有一个棋力比较明确的软件,把它作为测试基准。
- 还有,同一引擎同时包含不同版本的情况可能不太好,除非各版本之间区别很大,并且你就是要测试不同版本之间的差别。
- 有些测试者坚持认为参赛引擎必须能够识别50步自然限着、子力不足以杀棋、三次重复等和棋情况。有道理,否则它们就会在官和局面里还无聊地继续走棋,徒浪费大量时间。
-
- 八、开局库和开局学习
-
- 软件对弈中若开局库选得不好,影响很大的。有人认为有些商业棋弈软件的新版本改进,与其说是引擎加强了,还不如说是使用了更好的开局库。看法是偏激了些,但我们绝不能否认开局库的重要地位。很多引擎都有自己配套的开局库,有些测试者觉得应该用原配的;另一方面,也常有测试者使用自制的开局库。可想而知,不同的开局库里面的内容或多或少会有不同。
- 于是有一种叫“努恩测试”(Nunn's test)的软件比赛形式,要求起始局面是各种默认设定好的局面,这样避免不同开局库的影响。但是我们知道,人们下棋时会选择适合自己棋风的开局准备,故为不同引擎设计能使它发挥最大效力的开局库也是可以理解的,开局库应视之为软件的完整组成部分。何况努恩测试也有它不完善的一面。
- 至于很多引擎所具有的“开局学习”功能该不该打开,尤其是一方有此功能而另一方没有的情况下?我个人意见认为应该打开,因为这个没有对对方构成妨碍。
-
- 九、哈希表的内存分配
-
- 通常情况下,如果你在同一台电脑上让引擎对战引擎,两个引擎所设置哈希表的内存占用总和为系统所有内存的一半。【译注:指物理内存,不考虑虚拟内存】
- 要指出这只是对低内存系统[比如低于256MB]的限制。因为Windows系统本身占用内存数目变动不大,因此如果你的内存够大,就不必遵守这个“50%”规则。512MB内存的设为双方占用总数达到420MB也没有问题。
- 要分配多少内存,对局的长短也有关系,这个前文也说了。太大的哈希表对于闪电战帮助不大甚至反而不利;长对局时限才需要更大的哈希表。
- 一般来说人们为了追求公平,在为对战引擎双方分配内存时是采用对半平分的做法,大家数目一样。不过如果看过前面关于哈希表的文章,你应该也知道事情还不是那么简单,还有些变数待定。【译注:所以改用配置相同的两台电脑上进行,可避免不少困惑】
-
- 十、自动进行循环赛
-
- 如果你使用Fritz(界面),它内建支持自动进行循环赛功能;如果你用Winboard,目前的Winboard没有带这项功能。不过,如果你只是让两个引擎之间进行一定局数的对抗,可以以命令方式启动Winboard,加上 /mg 参数。【译注:Winboard的命令行参数是Winboard另一个让人觉得有趣的地方,可以实现不少单纯图形方式不方便实现或实现不了的操作,值得较熟练者去研究】。
- 非常感谢Peter
Berger寄给我一个批处理文件,使用它可以在Winboard上自动进行引擎之间的循环赛,适合不熟悉批处理的读者参考使用。【译注:每个人拥有的程序和存放的环境肯定不一样,所以该文件没必要提供下载;想用的请到
- http://www.aarontay.per.sg/Winboard/batch.html参考那个例子后,举一反三修改而用。另外为简便,可考虑用Arena或其它支持Winboard引擎而有赛程安排功能的界面,比如chesspartner来做】
- 循环赛的赛程表,你可以自己编;如果不熟悉,看看这两个工具是否有点帮助。
- ftp://cap.connx.com/pub/tournament_software/roundrobin.exe 和
- ftp://cap.connx.com/pub/tournament_software/tourney.exe
-
- 十一、程序崩溃的处理
-
- 比赛过程中或许有软件无故崩溃的事情发生,你要有决断,是该判结果,或者重下?比较棘手的情况是一方本来就要胜了,却在这时崩溃。
- 有人坚持认为如果一方明显胜势的,崩溃了也应判它胜。然而,很多人(可能大多数?)不同意这点。就如人类比赛一样,连棋都不走了自然应算他输;另外假如软件崩溃了也可判赢,那对引擎的作者写作引擎时也可能产生不良导向。
-
- 十二、比赛过程中的更新和修补错漏的处理
-
- 这在CCC网站(Computer Chess Club)曾有很大争论,那就是比赛还进行时是否可以更新软件。【译注:这里的“更新”更多不是指明显升级到新的版本,它可能只是局部调整,或者修改一些BUG】
- 一方认为如果是不同引擎参加的比赛,这样做等同于成绩无效,相当于人类比赛过程中换人。另外如果允许这样做,那么就有可能出现面对特定引擎而有针对性地选择不同“克星”版本的情况。
- 但是,在有些正式的电脑国际象棋赛中,比如WCCC联赛,还真允许这样做的!引擎作者可以根据不同对手选择不同开局、调整参数等,希望在面对不同对手时有最佳应对。人类棋手也是这样,会根据不同对手调整不同战略。
- 即使这种更新没有提升软件的棋力,而只不过修补了它的一些程序设计小错漏以防止崩溃,有些人还是认为不应该,因为他们认为错漏是程序的一部分,应该一并考虑。但这个看法再次遇到相反意见,他们认为如果一个低级的程序错漏导致软件一而再地崩溃【并且因为这而判负】,那还有什么用?
- 这个问题大概没有绝对答案的,取决于你的意图。不管你采用哪方意见,最好是事前就确定下来并且不带偏见地执行。
-
- 十三、计算表现等级分和公布结果
-
- 如果根据比赛结果计算等级分,可以用这个工具Elostat【计算等级分的工具还有其它可选择】http://www.amateurschach.de/schach/download/elostat/elostat_11b.zip。
- 至于公布结果,倘若你只是个人测试或娱乐,那公不公布随你高兴的。倘若想和别人分享交流,可以公布在网上,影响较大的有
Winboard Forum
- (http://www.f11.parsimony.net/forum16635/)和Computer Chess Club [CCC]
- (http://www.icdchess.com/ccc.html)。【译注:当然,中文读者公布到中文国际象棋论坛也可以,只要有同好者就行】
- 按照惯例,公布软件比赛结果要提供以下信息:
- 1) 使用的CPU速度;
- 2) 同步思考有否打开;
- 3) 对局时限;
- 4) 每个引擎分配的内存数量;
- 5) 是否使用了残局库,使用了哪种级别残局库。【译注:是的,原文没有谈到是否使用残局库的问题】
- 其它的,你可自行决定是否加入必要评论和意见,指出你认为的优点和缺点,包括程序设计上的缺陷,尤其是在帮忙测试软件时。至于对局本身,倒不一定要全部公布于论坛,除非你认为很特别的那些。
-
- 出处:Aaron's
Winboard and Chess Engines FAQ
- 译者:michael
- 类型:略有删节
上一篇 人机大战:魅力无穷
下一篇 先进国际象棋
返 回 象棋百科全书——电脑象棋