象棋引擎源程序发布公告
<br /><br /><P> ElephantEye 0.90b 是专门为调试 Elephant Board 的 UCCI 协议而制作的象棋引擎,公开源程序的目的有两个:(1) 为 UCCI 引擎作示范;
(2) 展示位棋盘在中国象棋中的运用方法。
广大象棋爱好者和程序员可以以任何目的使用 ElephantEye 0.90b 的代码,但作者不对代码中的错误负责。
以下是 ElephantEye 0.90b 的技术指标:</P>
<P> 一、支持的 UCCI 协议的命令:
(1) ucci
(2) position {startpos | fen <fen_str>}
(3) go {infinite | depth <ply>}
(4) quit
(5) stop (只能在工作状态中使用,其他命令只能在空闲状态中使用)。</P>
<P> 二、可以返回的 UCCI 协议的信息:
(1) id {name <engine_name> | company <company_name> | author <author_name>}
(2) ucciok
(3) info depth <ply> score <pos_score> nodes <searched_nodes>
(4) {score <pos_score> | bestmove <best_move> } (go depth 0 返回 score,否则返回 bestmove)
(5) bye</P>
<P> 三、对弈引擎技术:
(1) 着法预产生数组;
(2) 使用位棋盘(位行/位列)的着法产生;
(3) 使用位棋盘(位行/位列)的将军判断;
这三个技术是 ElephantEye 0.90b 的核心技术;
(4) MVV/LVA 启发(只针对吃子着法);
(5) 历史表启发(只针对不吃子着法);
(6) “最小-最大”搜索法;
(7) Alpha-Beta 搜索;
(8) Quiescence 搜索;
(9) 将军扩展搜索;
(10) 循环着法和长将的检测(由于不接收历史局面,对弈时仍然可能长将);
(11) 杀棋步数计算;
(12) 迭代加深启发;
这些技术是象棋对弈程序的基本技术;
(13) 主要变例获取;
(14) 中止信号获取;
这两个技术是实现 UCCI 反馈信息的基础,但同时降低了搜索效率。
为此,ElephantEye 0.90b 源程序的文件及其功能如下:
(1) UCCI.H:UCCI 命令的获取;
(2) LONGRAND.H:32位随机数的产生;
(3) CCBITBRD.H:位棋盘结构的定义和功能的实现;
(4) CCPREGEN.H:着法预产生数组和 Zobrist 数组的生成(功能1);
(5) CCMOVGEN.H:局面结构的定义和功能的实现,包括着法产生和将军判断(功能2-5);
(6) CCEVALUE.H:局面评估函数,ElephantEye 0.90b 采用“梦入圣蛋”的快速局面评估方法;
(7) CCSEARCH.H:搜索程序(功能6-14);
(8) ELEEYE09.CPP:ElephantEye 0.90b 的主程序(即 main 函数);
所有的子程序都以头文件的形式存在,编译 ELEEYE09.CPP 即可;</P>
<P> 为了阐述界面和引擎的通讯原理,作者用 Visual Basic 设计了一个示例程序,文件及其功能如下:
(1) REDIRECT.CPP:REDIRECT.DLL 包含了 Console 程序重定向的 API 库函数;
(2) EX_STDIO.BAS:用 Visual Basic 跟引擎通讯的示例程序;
(3) EX_STDIO.FRM:示例程序用到的界面;
(4) EX_STDIO.VBP:Visual Basic 工程文件,可直接用 Visual Basic 编译。</P>
<P> 此外,ElephantEye 0.90b 还为以下有待开发的功能预留了部分接口:
(1) 时间控制的 UCCI 协议;
(2) 接收历史局面的 UCCI 协议;
(3) 开局库和局面表(置换表或散列表);
(4) 高级搜索方法(包括空着裁剪、窗口裁剪、PVS/NegaScout、MTD(f) 等等);
(5) 更合理的局面评估函数。
尽管这些功能还没有实现,ElephantEye 0.90b 也已经具有相当的棋力,实力远远强于公开源代码的 MantisChess 和 VSCCP,稍弱于“梦入圣蛋”,适合初学者练习。
页:
[1]