Skip to content
皮卡鱼(Pikafish)完全指南:最强象棋引擎怎么用

皮卡鱼(Pikafish)完全指南:最强象棋引擎怎么用

皮卡鱼是什么、到底有多强,以及如何安装、配置和读懂它

Matthew Leroy1 min

皮卡鱼是什么?

皮卡鱼是一款免费开源的象棋引擎:给它一个局面,它返回它认为最好的着法,并附上一个数值判断,说明谁占优。它本身没有界面,只是一个通过文本指令与图形程序对话的计算内核,就像藏在引擎盖下的发动机。这个设计是刻意的:把引擎和界面分开,同一个内核就能同时驱动电脑上的分析棋盘、手机应用和网站。皮卡鱼成为象棋世界的标杆引擎,原因与 Stockfish 在国际象棋中的地位如出一辙——它比商业软件更强、完全免费,而且源码公开,任何人都可以核实它究竟做了什么。如果你想了解计算机是如何一步步统治象棋的,我们的象棋 AI 引擎全景梳理了完整历史;本文只专注于皮卡鱼本身。

皮卡鱼从哪来?Stockfish 的血统

皮卡鱼是 Stockfish 的衍生作品。Stockfish 是统治电脑国际象棋十余年的开源引擎。皮卡鱼的作者没有从零重写搜索算法,而是沿用了 Stockfish 久经考验的搜索部分——也就是决定哪些着法分支值得深入、哪些可以安全剪枝的那一层——并把它适配到一个 9x10 棋盘、有河界、有九宫、棋子走法与国际象棋毫无共同之处的游戏上。评估部分则必须完全重写:知道车在开放线上强大,丝毫无助于判断一门需要炮架才能吃子的炮值多少。这段血统解释了很多细节:指令语言、配置选项、发布惯例和授权协议都来自 Stockfish 家族。它以 GPL v3 发布,意味着可以自由使用和修改,但任何衍生作品也必须以相同条款公开。

皮卡鱼到底有多强?

强到「怎么赢它」这个问题已经没有认真的答案。在普通的现代硬件上,每步给它几秒钟,皮卡鱼的水平远在最强的人类特级大师之上。它不会漏着,不会疲劳,算杀的深度超过任何人类能在脑中维持的极限,而且在平稳局面下的判断一致性,是没有棋手能在一整盘长棋里保持的。真正值得讨论的不是人机对比,而是引擎能派上什么用场。一个 1400 分的棋手,被告知「这个局面落后两分」毫无收获;他真正需要的是搞清楚哪一步造成了问题。所以引擎的绝对棋力,远不如你使用它的方式重要。我们关于象棋等级分的文章重新梳理了人类的分数尺度,也说明了为什么业余强手与大师之间的差距,其实小于大师与引擎之间的差距。

什么是 NNUE?为什么皮卡鱼要额外一个文件?

NNUE 指的是高效可增量更新的神经网络,它是皮卡鱼中负责判断局面优劣的那一部分。传统引擎用人工编写的规则评估局面:车值多少、过河兵值多少、老帅暴露扣多少分。NNUE 用一个在数百万局面上训练出来的小型神经网络,替换掉这张手写的分值表,从而捕捉到人类始终无法用规则写清楚的细微之处。关键在于「高效」二字:这个网络的设计让每走一步棋时只需要重算其中很小的一部分,正因如此它才能每秒运行数百万次。实际使用中,这个网络存放在一个独立的文件里,通常叫 pikafish.nnue 之类的名字。引擎的可执行文件本身并不包含它。这是新手最常踩的一个坑,也正是下一节要讲的内容。

怎样下载和运行皮卡鱼?

皮卡鱼在其公开仓库 github.com/official-pikafish/Pikafish 中以编译好的可执行文件发布,提供 Windows、Linux、macOS 和 Android 版本。同一个版本通常还有若干变体,以处理器指令集命名,比如 avx2、bmi2、vnni 等等。它们不是不同的引擎,而是同一个程序针对新旧不同的处理器特性分别编译的结果。选你的机器能支持的最新那一个;如果启动时报「非法指令」错误,就退回到更保守的版本。发布压缩包里已经带了 NNUE 权重文件,正常下载不需要额外步骤。只有当你从源码自行编译时才要自己去取权重:它放在 Networks 仓库,取回后与可执行文件放在一起。这一步真出问题也不会含糊:引擎载入不了权重时,会打印它尝试过的路径和下载地址,然后直接退出——它不会带着弱棋继续跑下去。最后要记住:这个可执行文件没有窗口也没有棋盘,你还需要一个能讲同一套协议的图形界面才能真正用起来。

皮卡鱼该怎么配置?

实际差别几乎全部来自三个设置。Threads(线程)告诉引擎使用多少个 CPU 核心。线程越多,每秒检查的局面越多,但留出至少一个核心能让机器保持流畅;设得超过实际核心数只会更慢。Hash(置换表)是引擎用来记住已评估局面的内存,以兆字节计。给太少,它会反复重算同样的东西;给太多,又会跟系统其他部分抢资源。在普通电脑上做分析,几百兆是舒适的区间。第三个其实算不上设置,那就是你给它多少思考时间。棋力随时间增长,但边际递减——从 1 秒到 10 秒提升巨大,从 10 秒到 100 秒就小得多。复盘自己的对局,每个局面几秒钟绰绰有余。同样的权衡换到对手身上而不是分析上,就是我们在我们如何平衡机器人难度中描述的思路。

怎样读懂皮卡鱼的输出?

引擎会持续输出一串信息行,其中三个数字最重要。评估值以「兵」为单位,从走棋一方的视角给出:正数表示走棋方占优,接近零表示均势。+1 大致相当于多一个健康的兵的优势,并不等于赢定了。深度是它已经搜索的半步数;低深度下的高评估,可信度远不如高深度下的温和评估。主变是引擎认为双方最佳的着法序列,也是最具教学价值的部分:评估值告诉你哪里不对,主变告诉你为什么不对。初学者只看数字,进步的人读那一整行棋。如果这些行里的记谱方式对你还很陌生,我们的象棋记谱法指南解释了各种通行体系。

用引擎提高棋力——以及界线在哪里

引擎是一台毫不留情的答案机器,这让它既是最好的、也是最糟的学习伙伴。有效的方法是下完棋之后复盘自己的对局,而且先想再看:自己先判断这盘棋是在哪一步转向的,然后再去核对。当引擎和你意见不同,这个分歧本身就是那一课。无效的方法是点着鼠标看评估条上下跳动——感觉像在学习,实际上什么也没学到。在大约 2000 分以下,多数失利来自你自己更专注就能找到的战术,而不是只有引擎才能揭示的精妙之处;我们的象棋提高指南给出了更有效的路径。还有一句显而易见但仍需说明的话:在与真人对局的过程中使用引擎辅助就是作弊,在任何正规平台和任何棋协都是如此。引擎属于赛后,或者属于没人正在对弈的局面。

不用安装也能用上皮卡鱼

如果你要的只是一个强力引擎来分析局面,其实完全不必安装任何东西。Xiangqi One 直接运行皮卡鱼:在手机应用中以原生方式运行,在浏览器中则编译为 WebAssembly,分析全部在你自己的设备上完成,无需安装、无需下载权重文件、无需任何配置。你可以打开棋盘、复盘一局棋,得到上文描述的同一套引擎判断,深度取决于你的耐心。你对战的机器人使用同一个内核,只是被刻意限制,以便产生真正值得对弈的对手水平——背后的思路详见我们如何平衡机器人难度。想立刻分析一个局面,或者与一个校准过的对手下一盘,请打开 Xiangqi One。想了解引擎的整体格局以及计算机如何改变了这项运动,可以继续阅读我们的象棋 AI 引擎全景,或浏览引擎分类。

继续阅读