当前位置:文档之家› 中国象棋算法

中国象棋算法

入神蛋”,ElephantEye遗憾地以2:3败北。我有充分的信心表明ElephantEye的棋力比梦
入神蛋强得多,因为两者用了相同的评价函数,但同样时间ElephantEye通常要比梦入神
蛋多搜索一层以上,那么2:3的比分又能说明什么问题呢?
(3)跟人类比和跟电脑比是两回事,每个电脑程序都有弱点,这些弱点很容易被人
源代码充分发挥它的作用。
下面我先简要谈一下我自己对ElephantEye的体会。
1.1 ElephantEye用到了哪些算法?
在我写本次连载以前,我已经完成了《象棋百科全书》网站上《对弈程序基本技术
》专题中所有文章的翻译,ElephantEye的大部分算法都参考了这些文章,这些算法我会
在连载中一笔带过,详细的内容希望读者参考这些译文,那里还有我加的很多译注,希
类棋手抓住,但其他电脑程序则不会抓住你的弱点。一般认为,知识缺乏的程序弱点也
多(例如ElephantEye不懂得防守空头炮),因此对阵人类棋手失败的几率要比对阵其他程
序高得多。
1.3 ElephantEye对象棋有哪些认识?
要说ElephantEye一点象棋知识都不具备,这种观点我是无法接受的。很多搜索算法
顶尖程序去比呢?也有人认为它能战胜中等商业软件,但电脑对电脑和电脑对人类根本
就不是一回事,这么一个不懂得防守空头炮的程序怎能说它厉害呢?还有人喜欢在同一
搜索水平(比如6层、8层或10层)上比较两个不同的程序,这种标准去比较“蛮力型”程
序和“知识型”程序,这有意义吗?
要正确认识这个问题,我想说明几点:
管如此,ElephantEye短短10行的将军判断也许是程序的一个亮点吧,那么这部分内容我
将尽量介绍得详细一点。
此外,一些看似和棋力关系不大的技术,诸如开局库、长将检测、后台思考、时间
策略、引擎协议等等,其实也直接影响着象棋程序的稳定性,因此也有必要逐一讲解。
总之,每个技术都很重要,我的连载虽然不能面面俱到,但我会尽我所能来作详细
接近了中等商业软件的水平,在公开源代码的象棋程序中,ElephantEye是最强的一个。
我希望能通过公开源代码的方式,推动中国象棋程序水平的整体发展,然而根据很
多网友的反馈意见,发现源代码中的很多部分并不是那么容易理解的。因此我才打算以
《中国象棋程序设计探索》为题,写几篇详细介绍ElephantEye算法的连载,希望能让的
(1) 测试标准要合理,这个标准只能是“时限”,即给两个程序以同样多的时间,
可以对每步都限定时间,也可以是比赛所采用的时段制或加时制,而不能以同样的搜索
水平作标准。另外,如果两个程序运行在同一台电脑上,那么不能启用后台思考功能。
(2)某几盘对局并不能说明问题,我以“浅红象棋”为平台用ElephantEye对阵“梦
我的连载中重点介绍。
我猜读者最感兴趣的内容是ElephantEye的着法生成器,这应该算是象棋程序的核心
部分,同时也是各个程序差异最大的部分。在写ElephantEye以前,我在《象棋百科全书
》网站上刊登了大量介绍“位棋盘”的文章,这是个非常有吸引力的思想,但是我试验
下来觉得它的速度并不快,在ElephantEye的程序里我只把位棋盘运用在将军判断上。尽
e.net)
(一)引言
我在今年2月写出了象棋程序ElephantEye的第一个版本(0.90),本来它只是象棋界
面ElephantBoard的调试引擎。在设计程序的过程中,我尝试性地加入了很多算法,发现
每次改进都能让程序的棋力有大幅度的提高,因此便对象棋程序的算法产生了浓厚的兴
趣。到现在我已经陆续对ElephantEye作了几十次加工(目前版本为0.94),使得它的棋力
望它们能够加深读者对这些算法的体会。
当然,仅根据这些文章所提供的算法,是写不出很好的程序的,我参考了王小春的
《PC游戏编程——人机博弈》一书,也参考了一些国际象棋的源程序,并通过自己的探
索,在ElephantEye中加入了另外的非常重要的算法,尤其是启发算法,我认为它们在程
序中发挥了关键性的作用,而且很多细节在绝大多数文字资料中没有详细给出,我会在
“适应性”的),最近我对该算法作了改进,使得它能正确处理残局中的等着杀和连等着
杀,速度也快了很多。
这些算法使得ElephantEye有很强的处理杀局和残局的能力,我相信绝大多数商业软
件都没它做得好。如果一个程序能在很短的时间内告诉你,几步之后必定有一方会被将
死,或者几步之后优势一方就可以破士或破象,那么这个程序的实用价值还算小吗?
确实只能用在象棋上,这一点ElephantEye做得比很多商业程序都好,这些算法体现在以
下几个方面:
(1)杀棋局面在置换表中的特殊处理,这使得ElephantEye识别杀棋的速度快了很多
;
(2)将军扩展,这使得ElephantEye对可能有杀棋的线路特别感兴趣,它会在搜索上
增加对这些路线的投入;
(3)带检验的适应性空着裁剪,这个算法首先由一个以色列学者发表于2002年(不是
阐述的。
1.2如何正确评价ElephantEye目前的棋力?
ElephantEye是“蛮力型”象棋程序,与大多数商业程序的不同之处在于,它没有审
局能力,那么它的棋力到底有多强?网友对这个问题众说纷纭,有人认为它无法跟一流
的商业软件相比,毕竟ElephantEye是免费程序,其源代码又是公开的,为什么非要去和
(二)棋盘结构和着法生成器
在阅读本章前,建议读者先阅读《象棋百科全书》网站中《对弈程序基本技术》专题的以下几篇译文:
(1)数据结构——简介(David Eppstein);
(2)数据结构——Leabharlann 棋盘(JamesSwafford);
(3)数据结构——旋转的位棋盘(JamesSwafford);
(4)数据结构——着法生成器(James Swafford);
中国象棋算法
———————————————————————————————— 作者:
———————————————————————————————— 日期:
解剖大象的眼睛——中国象棋程序设计探索
黄晨*2005年6月
( *联系地址:复旦大学化学系表面化学实验室,eMail:morning_yellow@elephantbas
相关主题