中国象棋之一开源 AI 引擎介绍
社区
大纲
前言
本文将介绍针对中国象棋的开源 AI 引擎,旨在对希望打造自己的中国象棋引擎的开发者提供一点帮助。目前中国象棋 AI 引擎主要分为两类,第一类是传统的象棋 AI 引擎(如象棋名手、象棋旋风),属于 CPU 密集计算型的引擎;第二类则是基于 Alpha-Zero 深度强化学习算法的新兴 AI 引擎,属于 GPU 密集计算型的引擎。由于谷歌的 DeepMind Alpha-Zero 已经 “通杀” 围棋、国际象棋、日本将棋,因此第二类中国象棋 AI 引擎非常值得关注。
传统象棋引擎
提示
中国象棋的 UCCI 引擎列表请参考 这里。
ZWM
ZWM 引擎支持 UCCI 协议大多数命令,同时支持浅红协议基本的命令。在棋力方面,根据历史数据,ZWM 引擎在联众快棋上等级分 2400 (人工手动,非自动连线);第一届、第二届 UCCI 引擎联赛第 6 名;ELO 快棋等级分 2455。
主要技术包括:
- 数据结构:位行、位列 (BitRank、BitFile), 棋盘 - 棋子联系数组
- 搜索算法:主要变例搜索 (PVS: Principal Variation Search),平静搜索 (Quiescent Search),迭代加深搜索 (Iterative Deepening Search)
- 裁剪:R=2 的空着裁剪 (Null Move Pruning),阈值为 1/4 的历史裁剪 (History Pruning),置换裁剪,和棋裁剪,杀棋裁剪
- 延伸:将军延伸 (Check Extension),杀棋威胁延伸 (Mate-Threat Extension),兑子延伸 (Recapture Extension)
- 启发:置换启发,内部迭代加深启发,吃子启发,历史启发 (History Heuristic)
- 平静扩展:吃子扩展,将军扩展
- 局面评估:采用 “梦入圣蛋” 的快速局面评估方法
- 开局库:共用 ElephantEye 的开局库
- 置换表替换策略:始终覆盖
Mars
Mars 是基于 Fruit 2.1 的测试作品,对着法生成、着法排序、置换表、搜索进行了深入的分析。同时此引擎还包括一些高级且有难度的算法,如将军躲避算法、SEE。
Harmless
Harmless 是一款 Linux 下的中国象棋引擎,在普通机器上限定每步 6 秒时间的情况下,平均搜索深度在 5-8 层左右。核心搜索主要采用的是极小窗口搜索,并结合了哈希表技术和历史启发;评估函数则相对实现得比较简单,只考虑了棋子本身的价值和棋子间的灵活度,虽不靠谱,但基本能用。引擎部分完全用 C 语言实现,支持部分 UCCI 通信协议,并附带了一个简单的图形界面,运行环境依赖 Python 2.7.x 与 Pygame 1.9.x。附上原作者对该项目的博客分享:写了一个 Linux 下的中国象棋引擎。
BitStronger
BitStronger(理治棋壮) 是一个基于中国象棋通用引擎协议(UCCI)的中国象棋计算机博弈引擎。该引擎通过标准输入和标准输出与支持 UCCI 的中国象棋界面软件通讯,可实现跨平台及联网的人机、机机对战。
ElephantEye
ElephantEye(象眼) 是一款自由的中国象棋程序,支持 UCCI 3.0,通常与象棋棋谱编辑软件 ElephantBoard(象棋巫师)配合使用。
UCCI-ChessEngines
UCCI-ChessEngines 是中国象棋 UCCI 引擎源码的整理,引擎包括 ElephantEye(象眼)、 BitStronger(理治棋壮)、Mars、ZWM、梦入神蛋 MRSD2(浅红引擎)。
ChineseChess-Engines
ChineseChess-Engines 是基于 UCCI-ChessEngines 项目,整理了中国象棋 UCCI 引擎的源码,在原基础上做了大量修改,使其支持在 Linux 上运行,修改内容如下:
- 增加了 Harmless 象棋引擎,Ubuntu 编译通过,支持 UCCI
- BitStronger:增加了 makefile, Ubuntu 编译通过,支持 UCCI
- ElephantEye(象眼):增加了 makefile, Ubuntu 编译通过,支持 UCCI
- Mars:修改了相关代码,更改了编码方式为 UTF-8,增加了 makefile,Ubuntu 编译通过,支持 UCCI
- 梦入神蛋 MRSD2(浅红引擎):修改了相关代码,更改了编码方式为 UTF-8,修改了 makefile,Ubuntu 编译通过,不支持 UCCI
新兴象棋引擎
CCZero
CCZero 的目标是将 Alpha-Zero 的算法应用到了中国象棋上,旨在借助广大象棋爱好者之力一起训练出一个可以打败旋风名手的 “象棋之神”。因为种种原因,这个目标截止 2018/11/07 为止仍未能实现,或者说还差得远,而且跑谱的人也越来越少了,作者已经放弃该项目。附上原作者对该项目的博客分享:中国象棋 Zero 技术详解。
GGzero
GGzero 采用了谷歌 DeepMind 公司提出的 Alpha-Zero 深度强化学习算法,基于国际象棋引擎 Leela-Chess 进行开发,是目前世界上首款达到商业引擎水平的显卡加速象棋引擎。GGzero 是一款商业象棋引擎,创作者是佳佳象棋的作者李国来,目前就 Elo 分来说是最强的,但 GGzero 项目代码并没有开源,更多资料可在社区论坛上获取。值得一提的是,GGzero 曾获得第三届楚河汉界象棋人工智能大赛第三名,2019 年北京人工智能大赛并列第二名,比赛规则与机器配置如下:
- 赛制用时:10 分钟 + 3 秒
- 其它商业引擎的机器配置:Xeon 2696 V4(44 核心),有开局库,有残局库
- GGzero 的机器配置:Nvidia GeForce RTX 2070 Super X 4,无开局库,无残局库
Pikafish
皮卡鱼 是一款开源的象棋引擎,源自国象 Stockfish,基于 C++ 和最新的 NNUE 神经网络开发。该象棋引擎支持 UCI 协议,支持鲨鱼、天机、兵河五四等主流象棋界面。
cchess-zero
cchess-zero 是基于 Alpha-Zero 的实践项目,实现了一个中国象棋程序,使用 TensorFlow1.0 和 Python3.5 开发。附上原作者对该项目的博客分享:Alpha-Zero 实践 — 中国象棋(附论文翻译)。
icyChessZero
icyChessZero 受到 Alpha-Zero 的启发,旨在训练一个中等人类水平或高于中等人类水平的深度神经网络,来完成下中国象棋的任务。目前该项目仍然没有完成全部的开发,处于停滞状态。附上原作者对该项目的博客分享:一个分布式中国象棋 Alpha Zero。
其他棋类的开源引擎
围棋
黑白棋
五子棋
国际象棋
中国象棋引擎排行榜
- 第一阵营:象棋名手、象棋旋风
- 第二阵营:小虫象棋、天机象棋、Alpha 猫、佳佳象棋、南奥象棋
- 第三阵营:UFX、象棋天启