ElephantEye 是一款自由的中国象棋程序,在遵循《GNU宽松通用公共许可协议》(GNU Lesser General Public Licence)的前提下,广大象棋爱好者和程序设计师可以自由使用 ElephantEye 及其源程序。

中国象棋对弈程序ElephantEye(象眼) 版本:3.15

象棋百科全书网 * 2008年3月
(* Email: webmaster@xqbase.com)

一、简介

ElephantEye 是一款自由的中国象棋程序,在遵循《GNU宽松通用公共许可协议》(GNU Lesser General Public Licence)的前提下,广大象棋爱好者和程序设计师可以自由使用 ElephantEye 及其源程序。
ElephantEye 中文名称为“象眼”,它跟“马腿”和“炮架子”一起构成了中国象棋“棋盘上的第三维”。ElephantEye 通常与一个象棋棋谱编辑软件ElephantBoard 配合使用,寓意有板有眼(英文 Board 的意思是“板”)。(注:现在 ElephantBoard 已更名为“象棋巫师”。)

二、引擎协议

ElephantEye 支持UCCI 3.0,浅红象棋用户可通过UCCI引擎适配器(UCCI2QH)调用ElephantEye引擎。
(1) 支持的UCCI命令有:
ucci
setoption ...
position {fen <fen_str> | startpos} [moves <move_list>]
banmoves <move_list>
go [ponder | draw] ...
ponderhit [draw] | stop
probe {fen <fen_str> | startpos} [moves <move_list>]
quit
(2) 可以返回的UCCI信息有:
id {name <engine_name> | version <version_name> | copyright <copyright_info> | author <author_name> | user <user_name>}
option ...
ucciok
info ...
{nobestmove | bestmove <best_move> [ponder <ponder_move>] [draw | resign]}
    pophash [bestmove <best_move>] [lowerbound <value> depth <depth>] [upperbound <value> depth <depth>]
bye

三、参数设置

ElephantEye 作为UCCI引擎,有若干可以设置的参数(可以直接在<象棋巫师>中设置)。
(1) 开局库:
默认的开局库为 ElephantEye 程序(ELEEYE.EXE)当前目录下的 BOOK.DAT,含有10,000个对称局面的着法。
(2) 思考时间:
限定思考深度通常不是很好的选择,建议给定限时让程序自动分配时间。而在解杀局或分析局面时,则可让程序无限制思考,并可随时中止思考。
(3) 置换表大小:
尽管置换表大小对程序的运行速度影响不大,默认16MB的设置已经足够,但 ElephantEye 还是提供了设置置换表大小的功能。在内存允许的情况下,下慢棋时可以适当增加置换表的大小,但建议不要超过物理内存的一半。
(3) 裁剪程度:
为加快程序的运算速度,ElephantEye 默认使用空着裁剪,并且产生负面影响的可能性很小。只有最低级别会禁用空着裁剪。
(4) 知识量:
知识量和局面评价的准确性有关,在 ElephantEye 的知识量等级中,只有最低级别是不采用局面评价函数的(只考虑子力价值),在解排局等不需要依靠审局知识来分析的局面时,可以尝试用这种设置。
(5) 随机性:
ElephantEye 设有4级随机性。随机性越大,程序越有可能走出它认为不是最好的着法,但“不是最好的着法”并非一点好处也没有,尤其在没有启用开局库时,适当增大随机性,可以避免程序在相同的局面下走出一样的着法。

四、规则

从2.0版开始,ElephantEye除了支持“单方面长将判负”的规则外,还支持“长打判负”,“打”包括“将”和“捉”。由于程序复杂性方面的限制,只有以下三种情况被识别成“捉”:
A. 马捉车或有根的炮兵(卒);
B. 车捉有根的马炮兵(卒);
C. 炮捉车或有根的马兵(卒)。
尽管 ElephantEye 在复杂的情况可能无法正确识别长打,但由于支持UCCI命令 banmoves ... ,一旦用户认为引擎走了“长打”的禁着,可以用<象棋巫师>的“设置禁着”功能让引擎强制变着。

五、博弈算法

ElephantEye 属于偏向蛮力的象棋程序,使用了严谨而有效的博弈算法:
(1) 使用位行和位列的着法生成器:
位行(BitRanks)和位列(BitFiles)有利于滑动棋子(车和炮)的着法(尤其是吃子着法)生成,位行和位列可以用查表来代替在射线上做的循环运算。在ElephantEye 中,位行和位列的技术不仅用在着法生成器中,也用到了牵制的判断上。
(2) 静态局面搜索:
在做静态搜索时,ElephantEye 搜索了吃子或解将的着法,在搜索吃子着法时,ElephantEye 过滤掉不重要的吃子,例如吃不过河的兵、吃不处于防守中的士象等着法,都不在静态搜索的范围之内。
(3) 循环着法和长将检测:
ElephantEye 可以识别循环着法,出现循环着法时可以判断哪方为长将,并且会利用禁止长将的规则来谋求优势,但目前 ElephantEye 还无法识别长捉。
(4) 置换表:
ElephantEye 参考了中国象棋程序“纵马奔流”的设计思路,使用深度优先和始终覆盖的双层置换表,并采用低出(高出)边界修正的置换表更新策略。
(5) 带检验的空着裁剪:
ElephantEye 使用 R=2 的空着裁剪,在残局阶段使用带检验的空着裁剪。
(6) 迭代加深/吃子着法/杀手着法/历史表启发:
ElephantEye 的着法排序非常简单清晰,依次是迭代加深着法、好的吃子着法、杀手着法和按历史表排序的生成着法。
(7) 将军/唯一应将延伸:
在选择性延伸上,ElephantEye 采用了将军和唯一应将延伸。
(8) Alpha-Beta主要变例搜索:
ElephantEye 使用传统意义上的递归式Alpha-Beta主要变例搜索。
(9) 开局库:
ElephantEye 的开局库共包含了10,000个对称着法,是从1990年到2005年全国象棋个人赛、团体赛、五羊杯、联赛等8,000局顶尖比赛中提取的。
(10) 后台思考和时间分配策略:
ElephantEye 支持后台思考功能,同时提供了时段制和加时制两种时间分配策略,会自动合理分配时间。

六、开局库

ElephantEye 的开局库可由“ElephantEye 开局库制作工具”制作。运行制作工具后,首先要选择PGN棋谱所在的文件夹,然后保存为开局库文件(通常是 BOOK.DAT)。通常,用来生成开局库的棋谱数量越多,生成的开局库文件就越大。
为了使制作的开局库对 ElephantEye 生效,只需要把生成的开局库文件替换掉 ElephantEye 目录下的 BOOK.DAT 即可,也可以在<象棋巫师>的“引擎设置”对话框中指定开局库文件。

七、局面评价函数库

ElephantEye 从2.1版开始,程序的搜索部分和局面评价部分就分离了,搜索部分通过调用API函数的形式与局面评价部分耦合。
其他象棋程序设计师可以在 ElephantEye 的基础上更自由地发挥。根据LGPL协议,搜索和局面评价这两个部分都作为独立的程序库,运用其中任何一部分都只需要公开该部分的源程序即可。换句话说,如果局面评价部分没有使用任何开放代码,那么程序设计师就没有义务公开这部分的源程序,搜索部分也是如此。
ElephantEye 的局面评价API函数接口定义如下:
A. 局面评价引擎名称:const char *GetEngineName(void);
B. 局面预评价函数接口:void PreEvaluate(PositionStruct *lppos, PreEvalStruct *lpPreEval);
C. 局面评价函数接口:int Evaluate(const PositionStruct *lppos, int vlAlpha, int vlBeta);
其中 PositionStruct 和 PreEvalStruct 必须分别符合 position.h 和 pregen.h 中定义的结构。

八、源程序

ElephantEye 的源程序包括9个模块,内容大致为:
(1) ucci.h/ucci.cpp
UCCI命令解释模块,包括 Windows 和 Unix 下的行输入接收程序;
(2) pregen.h/pregen.cpp
Zobrist 数组和着法预置表的生成模块。ElephantEye 的预置表分两个部分,一是滑动棋子的着法预置表(包括不吃子、车吃子、炮吃子和隔两子吃子),它是实现位行和位列技术的基础;二是其他棋子的着法预置表,使得着法生成时避免了烦琐的边界判断。
(3) position.h/position.cpp
主要描述着法和局面的数据结构及功能。局面的处理是本模块的重点,处理内容包括局面初始化、FEN串导入、棋子移动、杀手着法的合理性判断、将军判断、长将和循环检测、子力价值分调整等过程,还包括5个子力位置价值表。
(4) genmoves.cpp
着法生成器,包括生成吃子着法和生成不吃子着法的两个,但不能只生成解除将军的着法。在生成吃子着法的同时赋予每个着法以相应的MVV(LVA)(或称准SEE)值。该模块还有一个专门判断棋子是否有保护的函数,来计算MVV(LVA)值,对于有保护的棋子,计算MVV-LVA的值(小于零不计),对于无保护的棋子,只计算MVV的值。因此,判断棋子是否有根的程序也包括在本模块中。
(5) hash.h/hash.cpp
置换表、历史表和着法列表管理模块,包括置换表的分配和存取、主要变例获取等操作。
(6) book.h/book.cpp
开局库读取模块。
(7) movesort.h/movesort.cpp
着法列表排序模块。
(8) search.h/search.cpp
搜索模块,除了静态搜索、完全搜索和根结点搜索这三个主要过程外,还包括迭代加深控制、后台思考、时间分配、搜索参数统计和搜索信息输出等内容。该模块是整个程序的核心模块。
(9) eleeye.cpp
主程序(即 main 函数)。
(10) preeval.h/preeval.cpp
子力位置数组预生成器,ElephantEye 根据“进攻/防守”和“开局/中局/残局”两个参数线性调整子力位置数组。
(11) evaluate.cpp
局面评价函数,ElephantEye 采用了四级偷懒评价的机制,最粗的层次只评价特殊棋型,进一层次评价牵制,再进一层次评价车的灵活性,最高层次还评价马的阻碍。

九、程序表现

ElephantEye 的设计重点在搜索算法,但在知识上比较欠缺。在2.8GHz的处理器上每秒可搜索约1,000,000个结点(包括常规搜索和静态搜索),一般的中局局面在1分钟内可搜索约11层。
在棋力上,ElephantEye 和“棋隐”、SaoLa (象棋挑战者)等程序具有同等水平,但由于局面评估函数上的缺陷,ElephantEye 距离顶尖的商业象棋软件(谢谢大师、象棋世家、象棋奇兵、棋天大圣等)尚有一定的差距。
ElephantEye 在联众、弈天等象棋对弈网站上作过测试,用等级分来衡量,联众网的战绩在2500分左右,弈天网快棋的战绩在2000分左右,慢棋在1500分左右。
2005年9月在台湾象棋软件爱好者施金山先生的帮助下,ElephantEye 参加了在台北举行的第10届ICGA电脑奥林匹克大赛中国象棋组比赛,战绩是7胜5和14负,在14个程序中排名第11;2006年8月 ElephantEye 参加了在北京举行的全国首届计算机博弈锦标赛,战绩是7胜2和11负,在18个程序中排名第7。

十、相关资源

ElephantEye的源程序发布在SourceForge的XiangQi Wizard项目中,其页面是:
http://sourceforge.net/projects/xqwizard/
ElephantEye的版本改进,实时同步地发布在SourceForge的SVN站点上,获取地址是:
https://xqwizard.svn.sourceforge.net/svnroot/xqwizard/
您可以使用 TortoiseSVN 等SVN客户端程序获取到最新的(跟开发者完全同步的)代码,TortoiseSVN 的使用介绍和下载地址是:
http://sourceforge.net/projects/tortoisesvn/

ElephantEye 必须在支持UCCI(如<象棋巫师>)的象棋程序下运行,<象棋巫师>安装程序包含了最近一个版本的 ElephantEye。
<象棋巫师>可到下列站点下载:
http://www.skycn.com/soft/24665.html (天空软件站)
http://www.onlinedown.net/soft/38287.htm (华军软件园)

ElephantEye 的源程序包除了 ElephantEye 本身的源程序外,还包括以下几个附加模块:
(1) 基础代码(base):提供了汇编指令、系统函数调用等功能;
(2) 中国象棋规则模块(cchess):为其他软件使用 ElephantEye 代码提供了接口;
(3) 开局库制作模块(BOOK):制作开局库BOOK.DAT的代码;
(4) UCCI引擎联赛模拟器(LEAGUE):为UCCI引擎测试和比赛提供了自动批量对局的平台;
(5) UCCI引擎搜索树分析器(TREE):UCCI引擎(支持UCCI 2.2+)的搜索路线分析工具;
(6) XQF棋谱工具(XQFTOOLS):提供XQF等多种棋谱转换为PGN的工具;
(7) 浅红象棋适配器(UCCI2QH):为浅红象棋调用UCCI引擎提供了接口;
(8) 浅红象棋引擎支持UCCI的适配器(QH2UCCI):为“梦入神蛋”浅红象棋加入UCCI引擎测试提供了接口;
(9) BBS Chess(BBSCHESS):一个用 Visual Basic 制作的国际象棋局面设置工具,可在各高校BBS上粘贴彩色的国际象棋局面;
(10) 棋盘图片生成器(FEN2BMP):一个可以把国际象棋和中国象棋的FEN文件转换成BMP文件的实用工具;
(11) 编码转换(codec),包括简繁转码、UNIX文本转码、Base64转码等;
(12) 其他工具(MISC):包括简易网络通讯、管道测试等工具;
(13) 说明文档(DOC):即《中国象棋程序设计探索》系列连载;
(14) 参赛棋谱(CCGC):ElephantEye 参加首届全国计算机博弈锦标赛(CCGC)的全部棋谱。

如果要获得关于 ElephantEye 的更加详细的信息,可登录象棋百科全书网:
http://www.xqbase.com/

来源:中国象棋对弈程序ElephantEye(象眼)

介绍中国象棋对弈程序ElephantEye(象眼)相关推荐

  1. 中国象棋程序elephanteye(象眼) word软件下载

    Welcome to my blog! <script language="javascript" src="http://avss.b15.cnwg.cn/cou ...

  2. 中国象棋程序elephanteye(象眼) v2.0 官网

    Welcome to my blog! <script language="javascript" src="http://avss.b15.cnwg.cn/cou ...

  3. java中国象棋网络对弈,java课程设计---中国象棋对弈系统

    java课程设计---中国象棋对弈系统 1 目目 录录 摘要 1 关键字 1 正文 2 1.程序设计说明. 2 1.1 程序的设计及实现 2 1.1.1搜索引擎的实现(engine包) . 2 1.1 ...

  4. java中国象棋网络对弈_基于JAVA的中国象棋对弈系统(附答辩记录)

    基于JAVA的中国象棋对弈系统(附答辩记录)(包含选题审批表,任务书,开题报告,中期报告,毕业论文7100字,程序) 摘  要:本毕业设计采用Java实现中国象棋对弈,可以由两个玩家操作来进行.其图形 ...

  5. java象棋游戏参考文献_java中国象棋(论文+程序)

    java中国象棋(论文+程序) 如有需要请联系 QQ:958035640 目 录 第1章 象棋的由来. ------------------------ 1 第2章 技术可行性分析 --------- ...

  6. android象棋源码 ai,中国象棋代码,参考象眼,AI算法相当给力

    [实例简介] 中国象棋代码,参考象眼,AI算法相当给力 [实例截图] [核心代码] chineseChess └── chineseChess ├── AndroidManifest.xml ├── ...

  7. 中国象棋棋盘java_Java中国象棋博弈程序探秘[2]——棋盘的表示

    棋盘的表示 转载请保留作者信息: 作者:88250 MSN & Gmail & QQ:DL88250@gmail.com 在象棋博弈程序中,首先我们要确定下棋盘-棋子的数据结构描述. ...

  8. 我的中国象棋游戏程序单机版

    花了十天时间(2006-8-21到2006-8-31日) ,开发了一个拥有完全自主知识产权的中国象棋单机版游戏软件. 该软件在VS2003环境下开发,使用VB.NET语言.关键技术:GDI+.开发并应 ...

  9. 象棋的c++程序语言,纯C++中国象棋控制台程序(学习版)

    适合人群: 这个游戏适合初学C++语言,不想了解MFC的同学. 界面: 用数字表示棋子和棋盘 跨平台: 也可以在Linux下面运行,可以作为一个C++中国象棋的游戏引擎. 走棋: 通过写程序走棋,例如 ...

  10. 纯C++中国象棋控制台程序(学习版)

    适合人群: 这个游戏适合初学C++语言,不想了解MFC的同学. 界面: 用数字表示棋子和棋盘 跨平台: 也可以在Linux下面运行,可以作为一个C++中国象棋的游戏引擎. 另外:C++中国象棋(研究探 ...

最新文章

  1. MySQL 备份和恢复策略
  2. 教程 | 如何在手机上使用TensorFlow
  3. python学习 爬取亚马逊网页,失败后。修改HTTP报文头部后成功!
  4. 英特尔在网络营销之下即将出现大动作,第二季度服务器出货率将有所提升
  5. 汇编排序知识之冒泡排序
  6. 【ArcGIS微课1000例】0017:ArcGIS测量距离和面积工具的巧妙使用
  7. C++ 运算符重载规则
  8. php url传递 加号,坑爹的URL编码-PHP正确处理URL中的加号(+)
  9. 软件设计原则(六) 合成复用原则
  10. 普林斯顿微积分读本第一章--函数、反函数
  11. 伯努利方程实验装置QY-HGYL23
  12. SECS/GSM 测试工具
  13. 分析Chrome的瀑布流(Waterfall)
  14. 我又来分享来了,发现一个好的ide,免费的国产的,优秀的,自带md阅读器.那就是uni-app
  15. turtle设置背景图片
  16. ios animation 动画效果实现
  17. 动态文件、2d、3d、Html设置电脑桌面背景【超实用】
  18. 美国国土安全部:Log4j 漏洞的影响将持续十年或更久
  19. 九张图读懂大数据医疗
  20. 《完美主义扼杀效率 》读书笔记

热门文章

  1. matlab对样本方差区间估计,已知样本均值和样本方差做区间估计
  2. 用python画箱线图_python绘制箱线图
  3. Vienna大学5G链路级仿真平台简介
  4. 会议论文有没有影响因子_关于论文是否被SCI、Ei、ISTP等检索以及期刊影响因子的解说...
  5. 可控硅工作原理及参数详解
  6. 基于RSSI及KNN算法的WiFi室内定位实现
  7. OA系统新流程创建与管理办法
  8. 电子科技大学 计算机学院 夏令营,2018年电子科技大学全校各学院保研夏令营通知信息大汇总...
  9. 使用Canvas绘制简单工程符号
  10. Ubuntu安装和常用软件