中国象棋计算机博弈发展史研究报告
系统梳理中国象棋计算机博弈从 1980 年代到 2026 年的技术演进、代表引擎与社区生态。 第十二章 皮卡鱼(Pikafish):NNUE时代的开源革命(2022–至今) → 第十七章 残局与棋谱的艺术价值
第十二章 皮卡鱼(Pikafish):NNUE时代的开源革命(2022–至今)
皮卡鱼([Pikafish](/zh-cn/pikafish-online/))官方网站 www.pikafish.com——棋力最强的免费开源中国象棋引擎,提供下载、Wiki文档和社区交流
皮卡鱼(Pikafish)项目标识——基于Stockfish移植的开源中国象棋引擎,采用GPLv3许可证,NNUE评估架构
12.1 NNUE技术及其引入中国象棋
NNUE(Efficiently Updatable Neural Network,高效可更新神经网络)最初由日本程序员Yu Nasu于2018年为国际象棋引擎Stockfish开发的神经网络评估架构。NNUE的标志性特征是:使用半整数线性网络结构,每次走棋后仅需增量更新被影响的特征,而非对整个棋盘重新进行网络推理。
NNUE的主要创新点:
-
增量更新:NNUE只更新被移动棋子在前后位置的特征值,而非对整个棋盘重新计算,这使得特征更新的计算量与棋盘大小无关,只与每次走棋影响的局部范围相关。
-
稀疏计算:NNUE将稀疏特征的提取转化为全连接层的矩阵计算,巧妙地利用SIMD指令集(特别是AVX2)实现高效的批量推理。
-
混合架构:NNUE作为局面评估模型与Alpha-Beta搜索结合使用——评估由NNUE完成,搜索仍然使用传统的PVS搜索。
NNUE从国际象棋迁移到中国象棋:
NNUE从国际象棋到中国象棋的迁移不是简单的参数复制,而是需要解决以下适配问题:
棋盘尺寸差异: 国际象棋是8×8=64格,中国象棋是9×10=90个交叉点。这意味着中国象棋的输入特征维度大约是国际象棋的约1.4倍。
棋子类型差异: 国际象棋每方有6种棋子(王、后、车、象、马、兵),中国象棋每方有7种棋子(帅/将、士/仕、象/相、马、车、炮、兵/卒)。此外,中国象棋的"炮"具有独特的跳吃规则,在国际象棋中没有对应物。
河界差异: 中国象棋的"河界"将棋盘分为红方区域和黑方区域,兵/卒过河后的行为发生变化,这需要在评估网络中体现。
九宫格差异: 帅/将和士/仕的活动范围限制在九宫格内,这影响了网络输入特征的编码方式。
12.2 皮卡鱼的诞生与早期发展
皮卡鱼(Pikafish)项目始于2022年,由用户在开源平台GitHub上创建。最初,它是由社区中一群对Stockfish技术路线有深入了解的开发者共同推动的。
皮卡鱼的名称由来:
皮卡鱼的名字来源于对"非卡鱼"的谐音(“Pikafish"与中文"非卡鱼"读音相近),同时也与Stockfish的名字对应(Stockfish是鳕鱼干,Pikafish是另一种"鱼”)。这一命名风格体现了项目与Stockfish的关系——基于Stockfish代码库进行中国象棋适配。
项目的起源与GitHub仓库创建:
皮卡鱼的GitHub仓库最初以"official-pikafish/Pikafish"为组织/仓库名创建。创始团队成员选择匿名或使用化名公开参与,这在一定程度上是为了避免与商业引擎知识产权的潜在纠纷。
早期版本的开发(2022年):
皮卡鱼的最早期版本(约2022年4-5月)主要是将Stockfish的代码适配到中国象棋规则和棋盘上。这一阶段的工作包括:
- 棋盘表示从8×8改为9×10
- 棋子类型从6种/方改为7种/方
- 规则适配(将帅照面、炮的跳吃、兵过河等)
- NNUE网络结构的适配(输入层大小调整)
- UCCI协议支持(而非UCI协议)
社区贡献者的加入:
皮卡鱼项目很快就吸引了大量社区开发者的参与。这些贡献者的背景多样:
- 国际象棋社区中关注中国象棋的开发者
- 中国象棋软件社区的爱好者
- 计算机科学领域的研究者和学生
- 对开源项目感兴趣的程序员
12.3 NNUE网络的训练与数据集
训练NNUE网络需要大规模、高质量的中国象棋局面评估数据。皮卡鱼的数据来源于:
-
云库数据:使用中国象棋云库(chessdb.cn)中的大规模残局库和开局库数据。云库提供了约2.5M的评估数据。
-
自对弈数据:皮卡鱼通过在不同版本的引擎之间进行大量对局,收集棋谱数据。这些数据通过Fishtest框架进行管理。
-
引擎互战数据:使用皮卡鱼与其他引擎(如旋风、名手)对战产生的数据。
-
棋谱库数据:历史上大师级人类棋手的对局数据。
NNUE网络的训练使用Python脚本(基于PyTorch或TensorFlow),训练流程包括:
- 数据准备:将棋局转化为训练样本(局面+走法+评估值)
- 数据清洗:过滤低质量或异常数据
- 网络训练:使用GPU加速的训练循环
- 量化转换:训练好的网络转化为C++可加载的嵌入式格式
NNUE训练数据的规模与质量:
NNUE训练需要大规模的数据集。皮卡鱼社区收集的训练数据达到百万级甚至千万级盘面。数据覆盖了:
- 从开局到残局的各种局面类型
- 从优势到劣势的各种评估区间
- 从简单子力配置到复杂多子结构的各种局面
训练数据的质量直接影响NNUE的评估精度。皮卡鱼社区在数据清洗和预处理方面做了大量工作,包括:
- 去除重复或相似局面
- 过滤明显异常(如胜负已定局面的中间状态)
- 平衡数据中不同局面对类型的分布
12.4 皮卡鱼的技术架构
皮卡鱼的代码架构基于Stockfish,但针对中国象棋进行了深度适配。其核心模块包括:
1. 局面表示(Position Representation):
皮卡鱼使用位棋盘(Bitboard)表示棋盘状态。每个棋子类型(7种红方+7种黑方=14种)各自使用一个64位整数表示其位置。由于中国象棋棋盘只有90个交叉点,位棋盘中的高26位可以用于存储其他状态信息。
2. 着法生成器(Move Generator):
皮卡鱼的着法生成器高度优化,使用了:
- 预计算的棋子走法表
- 炮的"跳吃"检测算法(需要检查炮和要吃的目标之间是否有且只有一个棋子作为"炮架")
- 马的"蹩马腿"检测
- 象的"塞象眼"检测
3. 搜索算法(PVS搜索):
皮卡鱼使用了Stockfish的标准PVS搜索,配合以下剪枝技术:
- 空着裁剪(Null Move Pruning):在非残局阶段大胆假设对方让一手仍不输
- LMR(Late Move Reductions):对排序靠后的着法减少搜索深度
- SEE(Static Exchange Evaluation):评估吃子交换序列的净得失
- Razor裁剪、Futility裁剪等
4. Lazy SMP并行搜索:
皮卡鱼使用Lazy SMP(Lazy Symmetric Multi-Processing)实现并行搜索。Lazy SMP的基本思想是:
- 多个搜索线程共享一个置换表
- 每个线程独立执行搜索,不进行任务分配
- 线程之间通过共享置换表间接通信
Lazy SMP虽然硬件资源利用效率不如精确的任务分配策略,但实现简单、可扩展性好,特别是在16线程以上的高核心数硬件上表现出色。
5. NNUE评估网络:
皮卡鱼的NNUE网络结构基于Stockfish的HalfKP特征集进行了中国象棋适配。HalfKP指的是使用"我方将帅位置 + 对方各棋子位置"作为特征,利用棋盘对称性减少特征数量。
最新版本的皮卡鱼使用ATT++(Attention-based NNUE)架构,引入了注意力机制来提高网络对大空间格局的建模能力。
12.5 皮卡鱼的最重要更新版本
皮卡鱼的发展历程中有几个重要的里程碑版本:
| 版本(发布时间) | 主要特性 | 棋力提升要点 |
|---|---|---|
| 初始版(2022年中) | 基于Stockfish移植,基础NNUE评估 | 实现基本可用,棋力约相当于传统商业引擎 |
| 2022-10-22 | 修复残局误判、长时限优化 | 长对局(LTC)稳定性提升 |
| 2022-12-26 | 60步规则、三重重复检测、WDL模型 | 棋力提升约+26 ELO |
| 2023年多个小版本 | 网络训练持续改进 | 陆续提升约80 ELO |
| 2024-08-31 | ATT++ NNUE网络架构 | 显著提升,约+60 ELO |
| 2025-06-23 | 更大L1缓存、mid-mirror编码、AVX512优化、困毙检测改良 | 约+50 ELO |
截至2026年,皮卡鱼的发展仍在持续,社区保持着活跃的贡献和更新。
12.6 Fishtest测试框架
Fishtest是皮卡鱼社区使用的分布式测试框架。Fishtest最初由Stockfish社区开发,用于在开源社区参与者贡献的计算资源上运行大规模引擎测试。
Fishtest的工作原理:
-
测试提交(Test Submission):开发者向Fishtest提交一个补丁(patch),声明该补丁预期会提升棋力。
-
任务分发(Task Distribution):Fishtest服务器将测试任务分解为多组对局,分配给社区贡献者的计算机。
-
对局运行(Game Execution):每台贡献者的计算机运行指定数量的对局(通常使用标准测试时间控制:15秒+0.5秒或60秒+0.6秒等)。
-
结果上报(Result Reporting):每台计算机将测试结果上报给Fishtest服务器。
-
SPRT检查(Statistical Check):服务器对累计结果进行SPRT(顺序概率比检验),判断补丁是"通过了"(ELO提升显著)、“失败了”(ELO变化不显著或下降)还是"需要更多数据"。
SPRT的工作原理:
SPRT是一种统计假设检验方法,它持续累积数据,直到有足够证据做出判断。SPRT需要设定:
- H0(零假设):补丁不改变棋力(ELO变化=0)
- H1(备选假设):补丁提高棋力(ELO变化>0)
- Type I Error(α):错误接受H1的概率
- Type II Error(β):错误接受H0的概率
随着测试对局数量的增加,SPRT计算似然比(Likelihood Ratio)并判断其结果是否达到接受/拒绝的阈值。SPRT的优势在于它能在尽早的时间点上做出判断,避免不必要的测试对局。
Fishtest对中国象棋社区的影响:
皮卡鱼引入Fishtest框架后,中国象棋引擎的测试方法论发生了质的飞跃:
- 从"凭感觉调参数"变为"数据驱动的统计验证"
- 每次修改都需要通过统计学显著性检验才能被接受
- 测试数据公开透明,任何社区成员都可以查看
12.7 皮卡鱼引擎使用的具体架构
皮卡鱼基于Stockfish,使用了完整的PVS搜索架构。其核心搜索相关着法包括:
搜索框架:
- Main Search(主搜索函数)
- QSearch(静态搜索/静态度量搜索,仅考察吃子着法)
- RootSearch(根节点搜索,迭代加深的主函数)
剪枝技术:
- Null Move Pruning(空着裁剪)
- Razoring(粗略剪枝)
- Futility Pruning(无效剪枝)
- Late Move Pruning(延迟走法剪枝)
- SEE Pruning(静态交换评估剪枝)
- ProbCut(概率裁剪,基于浅层搜索结果的裁剪决策)
着法排序:
- Hash Move(置换表最佳着法)
- Winning Captures(赢子吃子着法)
- Promotions(兵/卒升级,中国象棋中兵过河后的价值变化)
- Equal Captures(等价交换吃子着法)
- Killer Moves(杀手着法)
- History Moves(历史启发着法)
- Losing Captures(输子吃子着法)
- Other Moves(其他着法)
12.8 皮卡鱼各版本的测试数据
皮卡鱼的所有版本改进均经过了严格的双盲随机对照测试(通过Fishtest平台)。以下是几个代表性版本的测试结果:
2022-10-22版本:
该版本改进了长时限对局(LTC, Long Time Control)的表现,并初步修复了残局局面评估的误判问题。NNUE网络文件沿用了此前版本训练的数据。
2022-12-26版本:
这是皮卡鱼早期最重要的版本改进之一。新增特性包括:
- 60步规则和三重重复检测(基本符合亚洲规则)
- WDL(Win/Draw/Lose)模型的引入
- 新的NNUE压缩架构
测试结果:
- 对局数:1,548局
- 胜率:53.84%
- ELO提升:+26.20(95%置信区间:[15.87, 36.90])
2024-08-31版本:
引入了全新的ATT++ NNUE网络架构,带来了棋力的显著提升和网络文件体积的减少。同时更新了循环规则逻辑。
2025-06-23版本:
重要的性能优化版本:
- 更大的L1缓存大小,在长时限对局中表现更好
- 引入mid-mirror输入特征编码,改善了镜像局面下的评估对称性
- 改进了静态搜索中的困毙检测
- 优化了AVX512指令集的性能
12.9 皮卡鱼的技术手册与文档生态
皮卡鱼项目拥有相对完善的文档体系,反映了其作为成熟开源项目的工程水平:
- README.md:项目概述、编译指南、许可证说明
- AUTHORS:所有贡献者的完整列表
- UCI & Commands Guide:UCI协议的完整命令参考
- Advanced Topics:技术深度讨论,涵盖NNUE评估、Fishtest测试、编译优化等
- DeepWiki:第三方维护的深度技术文档,涵盖NNUE架构、特征变换、搜索系统等
这种完善的文档生态对于吸引新贡献者和降低贡献门槛至关重要。
皮卡鱼 GitHub 开源仓库——official-pikafish/Pikafish,基于 Stockfish 移植的开源中国象棋引擎,采用 GPLv3 许可证
12.10 皮卡鱼对中国象棋研究的推动
皮卡鱼的出现不仅仅是一个技术事件,它还极大地推动了中国象棋研究方式的变革:
研究民主化:
在皮卡鱼出现之前,顶尖的分析工具需要数百到数千元购买(如象棋旋风、名手等商业引擎)。皮卡鱼作为免费开源引擎,使得任何有一台普通电脑的爱好者都可以获得世界级的分析工具。这大大降低了高水平象棋分析的门槛。
教育应用:
皮卡鱼被广泛应用于象棋教学场景。教练可以使用皮卡鱼分析学生的对局、生成局面训练题、模拟不同水平的对手。
文化保存:
皮卡鱼的发展历史本身就在为中国象棋软件社区积累一份开放的数字文化遗产。GitHub上的每一个Commit、每一次Issue讨论、每一局测试对局,都在记录着社区协作的历程。
第十三章 其他NNUE时代的开源引擎
13.1 Orange引擎
Orange是一个由中国象棋社区独立开发的NNUE开源引擎,由开发者Daniel Tan(主要作者)创建。Orange的特点是它并非基于Stockfish代码库改写,而是从零开始实现的独立引擎。
Orange的技术特点:
- 完整的UCCI协议支持
- 多层NNUE评估网络(2层隐藏层,而非标准Stockfish NNUE的1层隐藏层)
- PVS搜索算法,包含现代搜索中常见的剪枝技术
- 可配置的训练系统,支持自定义NNUE网络训练
Orange License:
Orange采用了自定义的开源许可证。根据项目的GitHub页面声明,Orange的代码可以自由使用,但严禁修改引擎名称后以"原创"身份重新发布。
Daniel Tan的研究工作:
Daniel Tan不仅开发了Orange引擎,还在学术层面研究了中国象棋NNUE的特征设计。他与Neftali Watkinson Medina合作发表了论文《Study of the Proper NNUE Dataset》,探讨了NNUE训练数据集的特征选择问题。该论文在国际学术会议(IEEE Conference on Games 2024)上发表,表明中国象棋NNUE引擎的学术研究正在获得国际认可。
13.2 Fairy-Stockfish的中国象棋支持
Fairy-Stockfish是Stockfish的一个衍生版本,专门用于支持各种国际象棋变体(Fairy Chess Variants)。Fairy-Stockfish在其变体支持中包含了中国象棋规则。
Fairy-Stockfish的中国象棋实现虽然主要是为了国际象棋变体爱好者和研究者,但它代表了中国象棋在更大范围的棋类博弈研究中的位置——中国象棋被视为"国际象棋变体"的一种,可以与标准国际象棋共享技术框架。
Fairy-Stockfish的中国象棋支持不是其核心功能,而是作为一系列变体支持中的一部分。但其存在说明中国象棋规则可以被纳入国际象棋引擎的变体引擎框架中,为跨领域的知识迁移提供了技术基础。
13.3 其他社区驱动的开发
除了上述项目外,在皮卡鱼之后还涌现了一些社区驱动的中国象棋NNUE尝试:
象棋旋风(Cyclone-nn):
象棋旋风在进入NNUE时代后也切换到了"Stockfish+NNUE"架构。旋风的NNUE版本在Fishtest测试平台上被称为"Cyclone-nn"。Cyclone-nn代表了商业引擎从传统架构向NNUE架构转型的尝试。
社区引擎的持续涌现:
在GitHub上,以"chinese-chess"、“xiangqi”、"cchess"等关键词搜索,可以找到数十个不同规模的中国象棋引擎项目。这些项目中的多数使用了"Stockfish适配"路线,但也有一些探索了其他技术路线。
13.4 BitStronger和其他社区引擎
BitStronger是一个基于ElephantEye代码基础改进的开源引擎。它在ElephantEye的LGPL许可下进行了多项改进:
- 评估函数的重新设计和优化
- 搜索算法的参数调整
- 更高效的局面表示和着法生成
- 对多核心支持的初步尝试
BitStronger虽然棋力不及商业引擎,但它作为ElephantEye的派生版,展示了开源协议带来的"分叉-改进"模式的可行性——这是后来皮卡鱼成功模式的早期实验。
13.5 棋路Lite与皮卡鱼生态
棋路Lite由开发者贺照云于2022年10月创建,是最早将皮卡鱼引擎封装为可用象棋软件的项目之一。棋路Lite本身也使用GPLv3许可证发布,是皮卡鱼生态中的重要组成部分。
皮卡鱼图形用户界面——基于Pikafish引擎的桌面客户端,提供直观的棋局分析、人机对弈和棋谱管理功能
棋路Lite的贡献在于:
- 提供了一个可直接运行的用户界面
- 降低了普通用户使用皮卡鱼的门槛
- 验证了皮卡鱼在移动端和桌面端的实用性
- 为后续基于皮卡鱼的软件(如象棋公社等)提供了参考
13.6 国际象棋社区的跨领域参与
近年来,一些国际象棋社区的开发者也参与了中国象棋引擎的研究。他们的参与带来了不同的技术视角:
- 对NNUE特征设计的贡献:国际象棋NNUE的设计经验(如HalfKP特征集、增量更新策略)为中国象棋NNUE提供了直接参考。
- Fishtest平台的共享:皮卡鱼的Fishtest平台最初基于Stockfish的Fishtest代码库,两者共享了许多基础架构。
- 编译优化技术的迁移:现代CPU指令集(AVX2、BMI2、AVX512、ARM NEON等)的优化经验通过社区贡献者从国际象棋社区迁移到了中国象棋社区。
13.7 开源与闭源的博弈:社区权力的转移
中国象棋引擎的开源与闭源之争经历了三个阶段的演变:
第一阶段:闭源独占期(1980s–2000s初期)
在这个阶段,几乎所有引擎都是闭源的。开发者将引擎视为个人知识产权和商业产品,源代码不对外公开。唯一的例外是一些大学研究项目中产生的引擎(如棋天大圣),但其代码也不对外公开发布。
这个阶段的问题在于:
- 技术的传播完全依赖开发者个人的公开意愿
- 当开发者停止更新引擎时,其技术积累也随之消失
- 后来的开发者无法借鉴前人的成果,不得不"重新发明轮子"
第二阶段:开源探索期(2005–2020)
以ElephantEye的开源为标志,部分开发者开始尝试开源模式。黄晨选择LGPL许可证的决策非常明智——既保证了代码的自由使用,又允许商业项目在满足许可证条件下使用代码。
但这个阶段开源引擎的棋力仍然远低于商业引擎(通常差距在500-1000 ELO以上),因此开源引擎主要被用作学习工具而非实战武器。
第三阶段:开源颠覆期(2022–至今)
皮卡鱼的出现彻底颠覆了力量格局。当开源引擎第一次在棋力上超越或持平商业引擎时,整个社区的权力结构发生了根本性变化:
- 从"商业驱动"转向"社区驱动"
- 贡献者从"个人爱好者"扩展到"全球开发者"
- 技术决策从"作者独裁"转向"社区共识"
这一变化的深远影响仍在持续发酵中。
第十四章 云计算与数据革命
14.1 中国象棋云库的诞生与架构
中国象棋云库(chessdb.cn)是中国象棋领域最具影响力的在线数据库项目。它提供了大规模的开局库和残局库查询服务,是中国象棋引擎和界面工具中不可或缺的基础设施。
云库的诞生:
中国象棋云库由一系列社区贡献者共同建设和维护。它最初的想法来自于对中国象棋开局库和残局库"各自为战"局面的不满——每个引擎都有自己的开局库,但相互之间无法共享和更新。
云库采用服务端-客户端架构:
- 服务器端:存储开局库和残局库数据,提供Web API接口
- 客户端:通过兵河五四等界面工具连接云库,查询棋局数据
云库的数据规模:
根据云库官方网站的信息,截至2026年,云库的数据规模极为庞大:
- 开局库(Opening Book):包含约2,000,000条开局走法
- 残局库(Endgame Tablebase):
- DTM版本(Distance to Mate,将杀距离):15.71 TB
- DTC版本(Distance to Conversion,转化距离):2.08 TB
- 合计超过17 TB
云库的数据质量:
云库的数据质量通过以下机制保证:
- 自动验证:每次数据更新后自动运行正确性验证
- 社区审核:社区成员可以报告错误或不一致
- 版本控制:数据版本可追溯,支持回滚
14.2 云库的使用对引擎棋力的影响
云库的出现改变了引擎在开局和残局阶段的表现。使用云库的引擎在开局阶段可以:
- 精确选择最佳开局走法(基于云库中数百万局的高水平对局统计)
- 避免走出已经证明不利的开局变例
- 学习云库中的新变化(包括大师级别的理论创新)
在残局阶段,云库使得引擎可以在已知残局中走出精确的"最优走法",包括最短将杀路径。
云库对引擎实战表现的提升:
云库数据的引入对引擎棋力的提升是显著的。在使用云库前后,同一引擎的胜率可能提升5-10个百分点(在同等硬件和搜索设置下)。这种提升主要体现在:
- 开局阶段的非战斗减员减少(避免走出劣势开局)
- 残局阶段的"精确性"提升(在优势和均势残局中不走弯路)
14.3 云残局库
残局库生成原理
中国象棋残局库采用**回溯法(Retrograde Analysis)**生成:
- 从终局开始:枚举所有一方将杀或困毙对方的局面(胜利局面)。
- 逆向推演:从胜利局面反向推理,找出所有能够到达胜利局面的前一步局面。
- 标注距离:将每个局面标注为"胜"或"和",并标注胜利所需的最少步数(DTM, Distance to Mate)或最少吃子步数(DTC, Distance to Conversion)。
- 迭代扩展:不断增加子力,逐步构建更复杂的残局。
回溯法(Retrograde Analysis)的详细过程:
回溯法的起点是"基本终局"——那些子力最少、结果已经确定的局面。例如,单将(帅)对单将(帅)的局面几乎总是和棋(除非一方被将杀或困毙)。从这些基本局面出发,算法逐步添加棋子,计算更复杂局面的结果。
具体步骤:
- 枚举子力组合:确定要计算的子力组合(例如"车马士对车双象"),枚举该组合下所有可能的棋子布局。
- 标注基本局面:在所有布局中,标注那些已经是将杀或困毙的局面(基本胜利局面)。
- 逆向推演第一轮:对于每一个"非基本局面",检查是否存在一步走法能够到达已标注的胜利局面。如果存在,将该局面标注为"胜"并记录最优走法。
- 逆向推演第二轮:检查是否存在所有对手走法都通向"胜局面"的非基本局面……如此循环,直到所有可标注的局面都已被处理。
- 剩余局面标注:经过完整的逆向推演后,仍然无法标注的局面即为"和局"或"未知"。
回溯法为什么极其耗费计算资源:
残局库计算的复杂度随子力数量呈指数增长。以单车对士象全为例:
- 需要考虑车(红方)的所有可能位置:90个交叉点
- 将(红方)的所有可能位置(九宫内):约10个位置
- 士(红方)的2枚棋子的所有组合位置
- 象(红方)的所有组合位置
- 对方棋子同样需要考虑
对于"车马士相对车双象"这样的高难度残局,可能的局面数量可以达到数十亿甚至数万亿级别。这是为什么云库的残局库已经达到15.71 TB(DTM版本)的原因。
残局库与实战的关系:
残局库对实战的影响是革命性的。在残局库覆盖的范围内,引擎可以:
- 精确知道每个局面的胜负结果
- 在任何局面下走出最优走法
- 精确计算将杀所需的最少步数
- 在胜势局面中不走任何弯路,直接以最短路线取胜
中国象棋云库的残局库规模:
根据云库官网(chessdb.cn)的数据,截至2026年:
| 版本 | 数据规模 | 说明 |
|---|---|---|
| DTM(Distance to Mate) | 15.71 TB | 记录将杀所需的最少步数 |
| DTC(Distance to Conversion) | 2.08 TB | 记录达到决定性物质转化所需的最少步数 |
| 合计 | 17.79 TB |
残局库的子力组合覆盖范围包括:
- 全子力(所有7种棋子):极限情况
- 多子力组合:车马炮、车双马、双车等
- 少子力组合:车兵、马兵、炮兵等
- 基础残局:单缺象、单缺士、马胜单士等
14.4 云库对社区的影响
云库不仅改变了引擎的使用方式,也改变了中国象棋社区的协作模式。具有以下特征的协作方式得以实现:
- 数据共享:社区成员可以共同扩充和完善开局库和残局库数据。
- 自动更新:引擎无需手动更新开局库,所有数据同步通过云库自动完成。
- 版本管理:数据版本可追溯,支持回滚和分支。
- 开放API:第三方工具可以通过API接口查询和参与数据维护。
14.5 NNUE评估 vs 传统手工评估深度对比
NNUE评估的引入是中国象棋引擎历史上最具革命性的技术变革之一。以下从技术实现细节和实际效果两个维度进行深入对比:
| 对比维度 | NNUE评估 | 传统手工评估 | 差距说明 |
|---|---|---|---|
| 参数数量 | ~2000万(半整数网络) | 50-200个 | 相差5-6个数量级 |
| 特征工程 | 自动学习特征(监督训练) | 人工定义特征(子力、位置、形状等) | NNUE无需人工设计特征 |
| 更新方式 | 增量更新(仅更新受影响特征) | 完全重新计算 | NNUE更新复杂度O(1) vs O(N) |
| 推理速度 | ~100-300纳秒(SIMD优化) | ~10-50纳秒 | 手工评估更快,但NNUE更准确 |
| 评估精度 | 高(与引擎棋力高度相关) | 中(存在手工评估盲区) | NNUE在复杂局面优势明显 |
| 训练数据 | 千万级高质量对局 | 无需训练 | NNUE依赖数据质量和数量 |
| 硬件依赖 | 需要AVX2/SIMD指令集 | 几乎无特殊要求 | NNUE对CPU有最低要求 |
| 可解释性 | 差(黑盒神经网络) | 好(每项特征可追溯) | 手工评估更容易调试和理解 |
| 调优难度 | 中(需GPU训练+数据准备) | 高(手工调参周期长) | NNUE自动化程度高 |
| 迭代速度 | 快(训练→测试→迭代) | 慢(手工调整→大量测试) | NNUE迭代快10-100倍 |
| 棋力上限 | 极高(理论可达最优) | 有限(手工评估天花板) | NNUE突破手工评估瓶颈 |
| 棋力提升(ELO) | 相对传统评估+200-400 | 基准值 | NNUE带来显著提升 |
| 残局表现 | 优秀(网络能学复杂残局) | 一般(手工难覆盖所有残局) | NNUE残局明显更强 |
| 可移植性 | 需特定训练 | 直接移植 | 手工评估跨平台更简单 |
| 代表引擎 | 皮卡鱼,旋风NNUE,Orange | 棋隐,奇兵,棋天大圣,名手 | NNUE已成主流 |
注:NNUE并非完美无缺。它需要大量的高质量训练数据、强大的GPU进行训练以及支持AVX2等SIMD指令集的CPU进行高效推理。在低端硬件上,传统手工评估仍然具有速度优势。但总体而言,NNUE带来的棋力提升是决定性的,目前所有顶级引擎均已转向或正在转向NNUE架构。值得注意的是,NNUE与手工评估并非互斥——最佳实践是NNUE评估为主,手工评估作为辅助或兜底。
14.6 中国象棋引擎商业模式与授权方式对比
中国象棋引擎的商业化模式经历了从盒装软件到在线授权再到开源免费的演变。不同的商业模式反映了市场环境、用户需求和技术条件的变化:
| 商业模式 | 代表引擎 | 定价策略 | 授权方式 | 防盗版 | 用户规模 | 开发者收益 | 可持续性 |
|---|---|---|---|---|---|---|---|
| 盒装软件 | 将族,棋隐 | ¥100-300/盒 | 光碟+序列号 | 弱(易破解) | 数十万 | 一次性收入 | 差 |
| 在线授权(单机) | 象棋旋风,象棋名手 | ¥80-500/年 | 硬件绑定+在线激活 | 中(硬件锁+联网) | 数万-十万 | 年费收入 | 中 |
| 在线授权(多机) | 象棋名手(分布式) | ¥200-2000/年 | IP授权+密钥 | 强(服务器验证) | 数千 | 高利润 | 中 |
| 免费+捐赠 | 小虫象棋基础版 | 免费/捐赠 | 无限制下载 | — | 数十万 | 少 | 差 |
| 免费增值 | 天天象棋(非引擎) | 免费+内购 | App Store | 强(平台管控) | 数亿 | 高(道具/会员) | 好 |
| 完全开源 | 皮卡鱼,Orange | 免费(GPLv3) | GitHub自由下载 | — | 数万-数十万 | 0(社区驱动) | 好(社区贡献) |
| 学术免费 | 棋天大圣 | 免费(学术用途) | 论文+网站下载 | 弱 | 数千 | 0 | 差(项目期后) |
注:中国象棋引擎的商业化一直面临用户基数小、付费意愿弱、盗版严重的三重挑战。盒装软件时代因互联网盗版而终结,在线授权模式虽有改善但仍面临破解和共享问题。开源模式(以皮卡鱼为代表)提供了一个全新的方向——通过社区协作降低开发成本,通过Fishtest框架实现分布式质量保证,依靠GPLv3许可证防止闭源商业滥用。目前的趋势是:顶级棋力引擎走向开源,商业引擎通过附加服务(开局库、云库、技术支持)实现差异化。
14.7 三大技术路线对比:PVS+手工评估 vs MCTS vs NNUE
中国象棋引擎的发展历程中出现了三条主要的技术路线。理解三者的优缺点是把握引擎技术演进方向的关键:
| 对比维度 | PVS+传统手工评估 | MCTS+NN (蒙特卡洛树搜索) | PVS+NNUE (高效神经网络) |
|---|---|---|---|
| 代表引擎 | 象棋奇兵,棋天大圣,名手 | 佳佳象棋(GGzero) | 皮卡鱼,旋风NNUE,Orange |
| 搜索方式 | 深度优先(选择性剪枝) | 最佳优先(概率采样) | 深度优先(神经网络引导) |
| 评估精度 | 中(手工特征有盲区) | 中(依赖rollout+NN) | 高(NNUE端到端学习) |
| 搜索效率 | 高(剪枝减少大量节点) | 低(需要大量模拟) | 最高(NNUE+剪枝协同) |
| 硬件需求 | 低(任何CPU可跑) | 高(需要GPU加速) | 中(需AVX2支持) |
| 并行化 | 容易(SMP/分布式) | 容易(并行模拟) | 容易(Lazy SMP) |
| 开局表现 | 好(开局库可补偿) | 一般(需自我对弈训练) | 优秀(NNUE+开局库) |
| 中局战术 | 优秀(深度搜索) | 中等(采样不足) | 优秀(深度+NNUE评估) |
| 残局表现 | 一般(手工评估难覆盖) | 差(rollout精度不够) | 优秀(NN残局训练) |
| 可解释性 | 好(每步搜索可回溯) | 中(MCTS路径可看) | 一般(NNUE黑盒) |
| 开发门槛 | 低(一名开发者可完成) | 高(需ML+工程团队) | 中(需数据+调参经验) |
| 训练数据 | 不需要 | 需要大量自我对弈 | 需要大量高质量对局 |
| 棋力天花板 | ~2900 ELO(已接近极限) | ~2700 ELO | 3200+ ELO(仍在增长) |
| 维护成本 | 低 | 高(GPU训练成本) | 中(CPU推理,GPU训练) |
| 更新速度 | 慢(手工调参周期长) | 中等(训练周期) | 快(数据驱动迭代) |
| 主要瓶颈 | 手工评估天花板 | 搜索效率低 | 硬件依赖+NN推理开销 |
| 当前地位 | 被淘汰(不再有竞争力) | 实验性质(研究价值) | 绝对主流(所有顶级引擎) |
注:三条路线的竞争已经基本明朗——PVS+NNUE是当前无可争议的最优方案。MCTS路线在围棋中取得巨大成功(AlphaGo/Zero),但在中国象棋中未能超越PVS+NNUE,主要原因是中国象棋的分支因子(约40)远低于围棋(约250),使得PVS的剪枝效率远高于MCTS的采样效率。传统PVS+手工评估路线虽然在2010年代统治了引擎界,但手工评估的精度天花板已经被NNUE彻底突破。
第十五章 中国象棋AIGC引擎与AI技术的融合
15.1 AIGC对中国象棋的影响
AIGC(生成式人工智能)对中国象棋的影响主要体现在两个层面:
AI辅助内容生成: 高质量的中国象棋引擎分析不再需要专业软件,皮卡鱼等开源引擎的社区版本提供了远超人类水平的高质量棋局分析。
教育与训练: 借助引擎API和大数据分析,象棋教育工具可以生成个性化的训练计划,根据学习者的水平自动调整训练难度和内容。
15.2 引擎API与在线分析平台的整合
引擎能力的开放使得各种在线平台可以集成棋类分析功能。典型的架构包括:
用户(Web/Mobile APP)
→ 前端(React/Vue界面)
→ 后端(API Server,如Nginx)
→ 引擎容器(运行皮卡鱼等引擎)
→ UCCI协议通信
→ 引擎计算引擎(并行搜索+NNUE评估)
这种架构的实现需要解决以下技术问题:
- 引擎进程的管理(启动、停止、超时控制)
- 并发请求的排队和调度
- 引擎和GPU资源的分配
- 结果缓存的策略
15.3 中国象棋领域AI技术的展望
中国象棋领域的AI技术展望包括:
1. 更轻量化的部署: 随着NNUE网络的持续优化和硬件效率的提升,可以在轻型ARM设备甚至浏览器端运行接近顶级棋力的引擎。WebAssembly(WASM)技术的应用使得在浏览器中运行完整引擎成为可能。
2. 个性化分析: 基于大语言模型的技术,可以实现自然语言层面的棋局分析和交互。用户可以用自然语言提问引擎分析的问题(如"这里我应该怎么走?“或"这个局面的关键在哪里?”),引擎通过分析棋盘后返回自然语言的解释。
3. 交叉领域的研究: 中国象棋引擎技术与强化学习、迁移学习、少样本学习等AI子领域的交叉研究有着广阔前景。中国象棋的特殊性(不同规则的循环着法处理、炮的独特性等)为AI技术提供了有趣的研究课题。
4. 实时对弈分析: 随着云计算和边缘计算的发展,实时的高水平对弈分析将普及。未来的在线对弈平台可以在每步走棋后立即提供大师级别的分析,包括最佳走法、关键变例、战术组合等。
第十六章 残局库检测:数据校验与准确性问题
16.1 数据库残缺检测
在中国象棋云库的发展过程中,出现了一些残局库数据残缺和错误的问题。这些问题来源于:
-
生成算法的局限性:回溯法虽然理论上可以准确计算所有残局,但在面对极复杂局面时,由于计算资源限制,可能存在遗漏或错误。
-
存储错误:在后台存储和管理十几TB的数据过程中,可能出现存储错误或数据损坏。
-
不同规则体系统一的问题:亚洲规则和中国规则在循环着法的处理上存在差异,残局库可能只适配了某一种规则。
16.2 数据修正的社区协作
残局库的数据修正主要通过社区协作完成。当社区成员使用引擎分析时发现残局库数据与预期不符(如应赢的残局显示为和棋),会向云库管理员报告。
数据修正流程:
- 用户报告可疑局面
- 管理员验证错误是否存在
- 如果确认错误,启动重新计算流程
- 将修正后的数据发布到云库
- 验证修正结果
这种社区参与的纠错机制在大规模数据维护中非常重要——自动生成的数据不可能100%正确,人工复核和社区反馈是保证数据质量的关键环节。
第十七章 残局与棋谱的艺术价值
17.1 经典残局对引擎开发的挑战
中国象棋有着丰富的经典残局艺术,如"蚯蚓降龙"、“七星聚会”、"千里独行"等。这些残局的特点是子力少但变化复杂,通常包含精妙的战术组合和深刻的局面判断。
经典残局对引擎的挑战在于:
- 战术组合的深度:某些经典残局需要在极深的搜索后方能发现正确走法
- 评估的精确度:小优势局面的精确评估需要极高精度的评估函数
- 全局视角:某些残局需要全局而非局部的局面理解
17.2 现代引擎对经典残局的表现
现代NNUE引擎(如皮卡鱼)对经典残局的表现已经显著优于传统手工评估引擎。NNUE评估网络可以学习到经典残局中的模式识别和战术判断,即使没有显式的规则编码:
- 对于"蚯蚓降龙"这样的精深残局,现代引擎可以快速发现正确走法
- 对于"七星聚会"这样的大规模残局,现代引擎可以给出准确的分析和变化
17.3 棋谱数字化与文化保存
中国象棋的棋谱数字化工作对文化保存具有重要意义:
- 传统棋谱的电子化:将历史上的大师棋谱和经典残局谱录入电子系统
- 引擎分析的标注:使用引擎对历史棋谱进行深度分析,发现新的变化和注解
- 棋谱数据库的建设:建立公共的、可搜索的棋谱数据库