Minic:一款强大的开源国际象棋引擎
Minic A simple chess engine to learn and play with 项目地址: https://gitcode.com/gh_mirrors/mini/Minic
在开源的国际象棋引擎领域,Minic以其出色的性能和独特的特性,逐渐崭露头角。本文将为您详细介绍Minic的核心功能、技术分析、应用场景及项目特点,帮助您更好地了解并使用这一项目。
项目介绍
Minic是一个国际象棋引擎,由开发者用于学习国际象棋编程和现代C++技术。它不包含图形界面(GUI),但兼容CECP和UCI协议,可以与多种流行的国际象棋软件配合使用,如Cutechess、Arena、Banksia等。Minic目前在全球主要的评级列表中排名前15,是法国最强的国际象棋引擎。
项目技术分析
Minic的开发始于2018年10月,最初是一个仅有2000行代码的周末项目。随着功能的增加,代码量逐渐增长,但开发者始终致力于保持代码的简洁性。从版本2开始,Minic的代码风格变得更加经典,虽然仍保留一些密行的特点。
Minic的开发过程中,特别值得一提的是神经网络评估(NNUE)的集成。从版本2.47开始,Minic可以构建使用StockfishNNUE框架的版本,这显著提升了引擎的Elo评分。但从版本3.00开始,Minic采用了Seer chess engine作者的NNUE实现,不再兼容Stockfish的NNUE网络。
项目技术应用场景
Minic作为一款国际象棋引擎,主要应用于以下场景:
- 棋力评估:Minic的Elo评分可达3400,能够与其他顶级引擎进行较量,为棋手提供准确的棋力评估。
- 棋谱分析:Minic可以分析棋谱,为棋手提供开局、中局和残局的最佳走法建议。
- 学习与训练:棋手可以使用Minic进行自我训练,通过分析引擎的走法,提高自己的棋艺。
项目特点
Minic具有以下显著特点:
- 兼容性强:支持CECP和UCI协议,可以与多种国际象棋软件配合使用。
- 性能卓越:在全球主要的评级列表中排名前15,是法国最强的国际象棋引擎。
- 灵活配置:支持多种神经网络评估网络,用户可以根据自己的需求选择合适的网络。
- 持续更新:Minic的开发者不断进行优化和更新,使其保持竞争力。
以下是Minic的一些技术创新:
- 使用位置评分表(PST)在移动排序器中补偿静止移动的历史分数接近0的情况。
- 聚合历史评分用于移动排序器和历史启发式(cmh + history[piece and color][tosquare] + history[color][square][square])。
- 基于危险(来自评估)的剪枝和搜索减少。
- 基于紧急情况(来自IID循环的不稳定性)的剪枝和搜索减少。
- 基于历史的(boom/moob)剪枝和搜索减少。
- 在搜索中使用移动性数据。
- 考虑对手名称或对手评分的对手模型。
- 用户可配置的"特征"评估参数,用于调整游戏玩法(仅适用于HCE评估,不适用于NNUE)。
- 使用考虑表格入口深度的深度因子进行剪枝和减少。
Minic的神经网络评估(NNUE)在性能和原创性方面也有显著特点:
- 推断代码:基于Seer的实现,经过大量重构和实验(如剪辑ReLU、读取量化、向量化、基于棋子数量的子网等)。
- 网络拓扑:尝试了多种网络结构(有无跳接、更大或更小的输入层、层数、棋子桶等),目前采用基于棋子数量的多桶网络,具有共同的输入层和两个内部网络。
- 训练代码:主要基于Gary Linscott和Tomasz Sobczyk的pytorch训练器,适应和调整到Minic。
- 数据生成代码:完全原创,纯Minic数据。尝试了多种数据生成方法(在搜索树中生成、自我对弈、多PV、随机、有无Syzygy等)。
总之,Minic是一个功能强大、特点鲜明的开源国际象棋引擎,无论是棋手还是国际象棋爱好者,都可以从中受益。我们鼓励用户在最新的硬件上使用Minic,以充分利用其性能。
Minic A simple chess engine to learn and play with 项目地址: https://gitcode.com/gh_mirrors/mini/Minic
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考