- 中国象棋程序设计探索
-
- 2005年6月初稿,2007年12月修订
-
- (一) 引言
-
- 2005年2月我写出了象棋程序ElephantEye的第一个版本(0.90),本来它只是象棋界面ElephantBoard(现改名为象棋巫师)的调试引擎。在设计程序的过程中,我尝试性地加入了很多算法,发现每次改进都能让程序的棋力有大幅度的提高,因此便对象棋程序的算法产生了浓厚的兴趣。到现在我已经陆续对ElephantEye作了无数次加工,使得它的棋力接近了顶尖商业软件的水平,在非商业的象棋程序中,ElephantEye无疑是最强的一个。
- 我希望能通过公开源代码的方式,推动中国象棋程序水平的整体发展,然而根据很多网友的反馈意见,发现源代码中的很多部分并不是那么容易理解的,为此我花了大量的时间为源程序加了注释。尽管如此,很多思想还是有必要以文字的形式保留下来,因此我才打算以《中国象棋程序设计探索》为题,写几篇详细介绍ElephantEye算法的连载,希望能让源代码充分发挥它的作用。
- 总的来说,对弈程序是个系统工程,它是以下四个系统的有机结合:(1)
棋盘结构,(2) 局面评价,(3) 搜索技术,(4) 其他。以ElephantEye为例,这四个部分在程序中的比例各占25%,也就是说,每个方面都很重要。那么这四个部分应该以什么样的方式逐步建立呢?另一个公开源代码的程序VSCCP(Very Simple Chinese
Chess Program)给出了一个方向,这是本很好的对弈程序设计的入门教材。尽管VSCCP在棋力上还有很大的提升空间,但是它的结构体系是比较完整的,参考下面一组公式,找到有待提升的空间,只要稍作改进就能成为ElephantEye。
-
- 棋盘结构 = 局面表示
+ 着法移动 + 着法生成 + 特殊局面判断
- 局面评价 = 知识
+ 优化的局面表示
- 搜索技术 = 完全搜索
+ 静态搜索 + 启发 + 裁剪
+ 选择性延伸 + 置换表 + 残局库
+ 并行技术
- 其他 = 开局库 + 时间控制 + 后台思考 + 引擎协议
-
- 现在我来回答读者最关心的一个问题——ElephantEye的源程序可以从哪里找到。
- ElephantEye的源程序发布在SourceForge的XiangQi
Wizard项目中,其页面是:
- ElephantEye的版本改进,实时同步地发布在SourceForge的SVN站点上,获取地址是:
- 读者可以使用TortoiseSVN等SVN客户端程序获取到最新的(跟我完全同步的)代码,TortoiseSVN在SourceForge的页面是:
-
- 本文初稿时ElephantEye的版本为1.0x,现在已经升级到3.1x。尽管初稿完成之后又有几次修订,但本文所涉及的很多细节问题都没有再更新过,所以代码看上去可能面目全非了。但是万变不离其中,读者若是注意代码中的注释,就会发现其基本原理与本文是一致的。