ElephantEye 0.90b 是专门为调试 Elephant Board 的 UCCI 协议而制作的象棋引擎,公开源程序的目的有两个: (1) 为 UCCI 引擎作示范; (2) 展示位棋盘在中国象棋中的运用方法。 广大象棋爱好者和程序员可以以任何目的使用 ElephantEye 0.90b 的代码,但作者不对代码中的错误负责。 以下是 ElephantEye 0.90b 的技术指标:
一、支持的 UCCI 协议的命令: (1) ucci (2) position {startpos | fen <fen_str>} (3) go {infinite | depth <ply>} (4) quit (5) stop (只能在工作状态中使用,其他命令只能在空闲状态中使用)。
二、可以返回的 UCCI 协议的信息: (1) id {name <engine_name> | company <company_name> | author <author_name>} (2) ucciok (3) info depth <ply> score <pos_score> nodes <searched_nodes> [pv <pv_lines>] (4) {score <pos_score> | bestmove <best_move> [ponder <ponder_move>]} (go depth 0 返回 score,否则返回 bestmove) (5) bye
三、对弈引擎技术: (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 即可;
为了阐述界面和引擎的通讯原理,作者用 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 编译。
此外,ElephantEye 0.90b 还为以下有待开发的功能预留了部分接口:
(1) 时间控制的 UCCI 协议;
(2) 接收历史局面的 UCCI 协议;
(3) 开局库和局面表(置换表或散列表);
(4) 高级搜索方法(包括空着裁剪、窗口裁剪、PVS/NegaScout、MTD(f) 等等);
(5) 更合理的局面评估函数。
尽管这些功能还没有实现,ElephantEye 0.90b 也已经具有相当的棋力,实力远远强于公开源代码的 MantisChess 和 VSCCP,稍弱于“梦入圣蛋”,适合初学者练习。
欢迎光临 华工象棋论坛 (http://www.hgchess.com/bbs/) | Powered by Discuz! X3.2 |