一款以本地人机对弈为核心、重视棋力、响应速度与真人体验平衡的中国象棋程序。
详细的功能、设计目标与验证状态见 FEATURES.md。
源码新增开发者配置助手、CCPD中文主线转换、有界轻量参数拟合,以及社区批次管理与只读公共库加载。开发环境安装说明见 开发者入口,训练命令见 训练工作区。这些新增功能不在旧玩家安装版v0.1.0-rc.1中,尚未宣称正式教师训练完成或棋力提高。
开发与训练安装版dev.2另附固定皮卡鱼教师、匹配NNUE、GPL源码许可及CCPD档案;先配置官方开发依赖,再启用训练环境。具体步骤与独立许可见训练快速开始,不自动开始训练,不声称第三方文件为MIT或任意新机无需配置即可训练。
首次开源的仓库资料、发布范围和确认事项见 GitHub发布准备。玩家成品只提供 中国象棋-Setup.exe 安装版,不提供便携ZIP;安装包的验证与发布状态见 安装版说明。不附已训练模型。
玩家下载入口:Windows安装版 Releases。下载附件 Chinese-Chess-Setup.exe,按中文向导安装即可;不需要开发环境。GitHub上传会移除中文附件名,线上使用英文名称,与本地“中国象棋-Setup.exe”内容相同。首版为候选版,功能与测试范围详见版本说明。
经验投稿采用贡献者/批次追溯目录:污染或许可违规批次可撤销、通知投稿者并发布库更新公告;修正库从其他合格批次重建。登记与重建工具已实现,批次真实性及许可仍由人工审核。初始公共库不纳入维护者个人经验。
从大学生C++大作业逐步完善而来,面向学习象棋、棋类人工智能与开源算法研究。当前特色是本地限时搜索、轻量棋理评估、常见开局的多样应对、无限悔棋、续局切换和传统木质交互;不以浅搜索冒充“人类思考”,也不宣称已经达到顶级引擎水平。
- 社区经验共建:欢迎用户自愿提交本地经验库,按经验贡献说明通过Issue附件提出贡献。未经审查的记录不直接纳入发布库,不自动上传个人对局;当前经验只帮助候选排序,不等于模型训练。初始公共库为空,不纳入维护者个人经验。
- 棋风配置插件(计划):分析有合法使用来源的知名棋手对局,提取开局、攻守、交换与计划偏好,让用户以后下载配置体验不同棋风。首期考虑轻量配置而非外部DLL;实时搜索与规则优先,插件只影响安全且评分接近的候选。接口、下载管理和具体棋手插件尚未实现。
- 进一步训练(计划):使用皮卡鱼(Pikafish)等强引擎及其评估网络作为离线教师,结合真实棋谱与经过验证的社区数据,训练轻量局面价值和人类选择先验;不是直接把对局经验文件灌入模型,也不把多教师原始分数简单平均。教师训练尚未开始,未来模型按数据与教师许可单独审查,暂不声明商业可用。
棋风研究的候选示例包括胡荣华、许银川、吕钦、柳大华、赵国荣、徐天红等棋手。此处仅说明后续研究方向,不代表已有对应模型、本人参与或授权,也不承诺与本人对弈等效。具体人选以数据许可、分析结果和测试为准,不使用未经授权的肖像或背书。
开源候选版本为 v0.1.0-rc.1,更新内容见 CHANGELOG.md。当前开局库含168条黑方局面/候选记录;中炮过河车急进中兵两条分支延伸至第10、12回合,其他体系仍按各自已核对的覆盖范围处理。
棋盘补齐炮位、兵卒位的传统定位花纹,边线兵卒位只画朝内的两角。走子采用贴着棋盘的直线滑行、缓起缓停和轻量四角落点收束,保留棋子本身的木质投影,取消上浮与尾迹。时长按距离约196~320毫秒,走子和战术提示期间目标刷新间隔16毫秒,静止时保持30毫秒;实际帧率取决于设备与绘制耗时。不改变鼠标命中坐标、棋局规则或缓存,不额外加载图片或启动动画线程。
吃子与将军用河界附近的“吃”“将”单字圆形徽章提示,分别约0.65秒与0.85秒;底色峰值约12%不透明度,文字与细环峰值85%,棋盘背景仍可透过。徽章轻微缩放、断弧扩散并淡入淡出,不再显示实心大牌或长句;吃子兼将军以“将”为主,同时保留落点碎光和将帅脉冲。仅合成局部160×160像素,不遮挡右侧按钮。落子、吃子和将军具有不同的本地合成音效,可通过界面开关静音。视觉提示不锁住棋盘,悔棋、重开和切换棋局会清除旧效果。支持不限次数地逐轮悔棋,直至开局:AI 已走完时撤回双方这一轮,AI 思考中则取消计算并撤回玩家这一步;终局后也可以悔棋。撤销的着法与结果不会作为本局经验保存。
棋盘快捷键 U/u、R/r、M/m、Esc 分别用于悔棋、重开、切换声音和退出;棋盘无需文字输入,因此只解除该窗口的输入法关联,避免中文输入法吞掉小写按键。红方胜利后播放约3.6秒朱红金边牌匾、胜字徽章与金色碎光,并播放约1.4秒庆祝旋律;最后一着的吃子或将军提示结束后再启动庆祝,避免音效互相覆盖。支持静音和终局悔棋,主动结束演示仍使用同一套胜利表现。常见开局库覆盖屏风马、反宫马、顺炮、列炮等起手分支,准确命中且通过短时战术复核时快速走谱;偏离或复核失败后仍用完整限时搜索,详见 开局库说明。
每次启动默认新局,点击“恢复上次”可切到上次保存的棋局,再点“回到本次”返回本次新局,两盘各自保留走子、悔棋和长将历史;没有上次棋局时按钮置灰。本次运行始终只切换这两盘,重开只重置当前显示的那盘。程序旁的 session.xqsession 自动保存当前显示的棋局,下次启动将它作为“上次棋局”。恢复到 AI 回合时重新开始限时思考;不恢复旧计算线程。损坏的缓存不会被自动覆盖。
长将检测确认三个完整重复循环(同局面、同走棋方出现四次,循环中的局面序列也一致)后,若只有一方在循环内每步都将军,判该方负;双方均连续将军则和棋。普通重复不直接判负。本版本尚不包含长捉、长杀和自然限着等完整比赛裁决。
对局未结束且没有走子动画时,点自己的红帅,再点黑将,可主动结束并观看与正常红方获胜一致的动画和提示;AI 思考中也可操作。内部不将其视为合法吃将或正常胜利,整盘禁用学习,即使随后悔棋也不会重新纳入经验;重新开局才恢复正常学习。操作说明与迁移边界见 续局与规则说明。
本项目将“走棋看棋理”作为人情味的核心方向:通过真实棋谱和可解释的棋理特征表达子力协调、将帅安全、兵形与计划延续。十秒以内的步时属于响应体验约束,搜索较浅本身不作为人类棋风的证据。棋理特征和计划连续性仍需通过后续训练与对局验证。
本项目不以复刻皮卡鱼,也不以在极限算力下争夺最高引擎排名为目标。它希望在普通个人电脑上提供一种更适合人与机器长期对弈的体验:落子有计算依据,思考时间可预期,棋风尽量自然,而且无需服务器或高端硬件。
我们所说的“更像人”,不是让电脑故意走弱棋、随机犯错,也不是简单缩短搜索时间。搜索层数较浅只会减少计算量,本身不会产生人类棋风。本项目希望从初始训练阶段就引入真实棋谱:由人类对局塑造选择习惯,由强引擎保障战术质量,再由本地对局经验进行小幅修正。
纯粹增加搜索深度,会迅速增加思考时间和硬件负担;为了瞬间落子而大幅减少搜索,又容易产生缺乏目的的随手棋。本项目选择明确的时间边界:AI 默认以约 8.5 秒为软限制、9 秒为硬限制,为界面响应和落子刷新预留余量,使一次完整操作尽量控制在 10 秒以内。
在这个时间范围内,引擎通过迭代加深、PVS、期望窗口、置换表、杀手着法、历史启发和增量 Zobrist 哈希等手段提高有效搜索深度。时间耗尽时,程序采用最近一次完整搜索所得的最佳着,避免返回尚未计算完成的结果。
皮卡鱼等顶级中国象棋引擎拥有非常强的搜索与局面评估能力,是本项目学习和验证棋力的重要参照。本项目不宣称在纯棋力上超过这些成熟引擎,而是尝试形成不同的产品优势:
- 可预期的思考速度:每步设置明确的时间上限,不让一次普通对弈变成长时间等待。
- 更贴近真人的选择:在数个强度近似的候选着之间,参考真实棋谱和人类行棋习惯,而不是机械地制造随机性。
- 连贯的行棋计划:减少评价相近时无缘无故改变方向的现象,让进攻、防守和子力调动更容易被棋手理解。
- 棋谱与搜索分工:开局准确命中时短时复核并走谱;偏离棋谱后回到完整搜索,经验仍只帮助排序,不接管中残局落子。
- 本地、轻量、可研究:无需联网即可运行,算法结构可以阅读、修改和验证,适合作为中国象棋 AI 的学习与实验项目。
- 无需长期陪练才形成风格:人类选择倾向将来自离线真实棋谱训练,用户自己的对局经验只负责后续微调。
“贴近人类”是一项需要通过对局数据验证的长期目标,而不是已经完成的棋力承诺。后续版本将同时观察胜率、战术漏算率、真人棋谱候选着命中率、无意义重复率和计划连续性,避免用主观印象代替测试。
常见中炮、仙人指路、飞相、起马、过宫炮开局会在短时复核通过的候选体系中加权选择本盘布局,减少连盘重复。布局选择随续局缓存保存,悔棋和棋局切换不重新抽签,重开才重新选择。出谱后只在完整搜索、评分接近的着法间适度变化,明确战术优势和强制着不为多样性让步;冷门布局不扩充大量棋谱,仍使用原限时搜索。
当前引擎使用手工轻量棋理评估:区分中兵、三七兵和边兵,并考虑兵卒当前所在路、过河、互保与到底后的作用变化;同时评价马的活动空间、车炮通路、士象保护及近将压力。权重尚未经过教师训练或系统棋力定标,不能据此声称已经达到人类棋风或强引擎水平。评估不调用完整合法着生成,步时预算保持不变。
程序会记录已经完成的对局经验,并把经验分数用于根节点候选着排序。经验不会替代局面评估,也不会在搜索树的每一层反复查询,因此经验数量的增长不会直接挤占主要搜索时间。
这种设计坚持一个原则:计算决定棋力下限,经验帮助更快找到值得深入计算的方向。
后续计划从 CCPD 等真实棋谱中提取训练局面,以皮卡鱼作为主要战术与局面价值教师,并在困难或结论分歧较大的局面中,引入采用不同技术路线的象棋引擎进行复核。最终结果将蒸馏为适合本项目的轻量评估参数和候选着先验,而不是在运行时捆绑多个大型引擎。
训练目标将明确分为两部分,而不是把所有信息混成一个无法解释的分数:
- Value(局面价值):主要学习教师引擎提供的胜率、战术判断与局面强弱,负责守住棋力下限。
- Human Prior(人类选择先验):学习真实棋手在相同或相近局面中的选择倾向,只在多个安全候选着评价接近时影响排序。
如果某一着拥有明确的战术优势,程序仍应遵从实时搜索;只有候选着强度接近时,人类选择先验才参与裁决。因此,“贴近人类”不会退化为计算较浅,也不需要等待用户对弈很久才逐渐出现。
预期流程如下:
- 从真实对局中提取、清洗并去重局面,按整盘棋划分训练集与验证集。
- 由主教师批量给出候选着、局面评价和置信度。
- 对人类着法与主教师分歧明显、候选着分差很小或评价不稳定的局面进行多引擎复核。
- 训练轻量局面评估参数和根节点候选着先验。
- 在固定思考时间下进行自我对弈、战术测试与真人体验评测。
多教师的目的不是把不同引擎的原始分数简单平均,而是利用不同搜索和评估体系之间的分歧发现困难局面。正式引入外部棋谱、引擎或网络权重前,还会分别核对来源、许可证与再分发条件。
为控制训练成本,项目不会一开始就进行全量、多引擎、长时间标注。先用少量局面完成端到端试验并记录每千局面的实际耗时,再按预算逐步扩展;普通局面只由主教师标注,多引擎仅复核分歧大或价值高的困难局面。任何阶段产生的标签都可保存并继续使用,不要求一次训练完成全部数据。
- 不以“像人”为理由故意漏算或送子。
- 不让经验库直接决定落子。
- 不以牺牲界面响应换取无限搜索深度。
- 不把计划中的训练成果描述成已经实现的功能。
- 所有棋力改动都应在相同时间和硬件条件下进行对照测试。
项目仍在持续完善中。目前已具备本地棋盘交互、人机对弈、限时迭代搜索和轻量对局经验记录;基于真实棋谱和多教师标注的离线训练流程属于后续开发计划。
桌面程序目前面向Windows,使用Visual Studio 2022、MSVC v143和EasyX。打开 中国象棋.sln 后可选择x64配置构建。
核心逻辑测试可在“x64 Native Tools Command Prompt for VS 2022”或普通命令提示符中运行:
tests\build_tests.bat
tests\LogicTests.exe
tests\TimingTest.exeTimingTest.exe 会执行接近完整时间预算的搜索,因此不会被安排到每一次快速检查中。
离线训练工具、数据格式和Slurm使用方法见 training/README.md。服务器上传和GitHub发布前请分别检查 服务器上传清单 与 开源发布清单。
源码仓库只保存程序源代码、测试、文档、训练工具和可复现配置示例。以下内容不会直接进入仓库:个人经验库、原始棋谱、教师引擎、网络权重、批量标签、训练中间产物、学校服务器配置和任何凭据。
第三方来源和许可状态记录在 THIRD_PARTY_NOTICES.md。本项目自行编写的程序源码和文档采用 MIT许可证。该许可证不覆盖CCPD原始数据、第三方教师引擎、Pikafish NNUE权重或其他外部材料。
未来训练得到的轻量模型在完成独立许可审查前,不声明可用于商业用途,也不会默认作为MIT源码的一部分发布。源码已公开至 Gnt191612/Chinese-Chess,安装版通过Releases分发;最终模型、原始数据和个人经验库尚未公开分发。
项目源码与项目自有文档采用MIT许可证,版权所有者为 Gnt191612。第三方组件继续适用各自许可证和使用条款。