Stockfish

Stockfish是一个自由及开放源码国际象棋引擎软件，可用于各种桌面和移动平台。可通过象棋通用引擎协议在国际象棋软件中使用。

Stockfish持续在大多数国际象棋引擎排名中排在首位或接近首位。截至2022年10月，Stockfish是世界上最强大的CPU象棋引擎。它共计赢得了最强象棋引擎锦标赛13次以及Chess.com计算机象棋锦标赛19次。

Stockfish由Marco Costalba、Joona Kiiski、Gary Linscott、Tord Romstad、Stéphane Nicolet、Stefan Geschwentner和Joost VandeVondele开发，此外开源社区开发者也作出了许多贡献。它从2004年发布的Tord Romstad开发的开源象棋引擎Glaurung派生而来。

## 特性

在多处理器系统中，Stockfish可以使用至多1024个线程。它的已访问位置表的大小可达32TB。Stockfish通过位棋盘实现了高级的Alpha-beta剪枝。部分上由于进行了更激进的剪枝以及后期移动缩减，与其它象棋引擎相比，Stockfish可以进行更深的搜索。Stockfish 15 (4线程)在CCRL 40/15评测中达到了354016的等级分。

由于其从Glaurung派生而来，Stockfish支持Chess960。曾在罗纳德·德曼维护的分叉中实现的Syzygy残局数据库于2014年被并入Stockfish中。在7个棋子的Syzygy残局数据库发布之后不久，Stockfish于2018年增加了对其的支持。

<image>

Stockfish在很多平台上受欢迎。在桌面端，它是互联网国际象棋俱乐部界面程序BlitzIn和Dasher默认的象棋引擎。在移动端，它是Stockfish、SmallFish和DroidFish等APP内置的象棋引擎。其它兼容Stockfish的图形用户界面包括Fritz、Arena、Stockfish for Mac以及PyChess。Stockfish可以被编译为WebAssembly或JavaScript，从而在浏览器中运行。在服务器端程序以外，Chess.com和Lichess都以这种形式支持Stockfish。Stockfish的正式版本和开发版本均以在Windows、macOS、Linux32位/64位和Android上的编译版本和C++源代码的形式发布。

## 历史

Stockfish起源于Romstad编写并于2004年首次发布的开源国际象棋引擎Glaurung。四年之后，Costalba受这一强大的开源引擎启发，决定分叉此项目。他将其命名为Stockfish的原因是它“于挪威生产而于意大利被烹饪”（Romstad是挪威人，而Costalba是意大利人）。首个版本Stockfish 1.0于2008年11月发布。有一阵子，新想法与代码变更在两个程序之间双向流动，直到Romstad考虑到Stockfish在当时更加先进而决定不再开发Glaurung。Glaurung的最终版本（2.2）于2008年12月发布。

约于2011年，Romstad决定不再参与Stockfish的开发以专注于开发他的新的iOS国际象棋应用。2014年6月18日，Marco Costalba宣布他已经“决定不再维护Stockfish”并让开源社区建立其当前版本的分叉并继续开发它。不久之后，一个由Stockfish的核心开发者组成的志愿者团队建立了一个官方代码库并管理此项目至今。

### Fishtest

自2013年以来，Stockfish的开发运用了名为“Fishtest”的分布式测试框架，志愿者可以捐赠CPU时间以测试对程序的改进。

对博弈算法的修改会应用序列概率比例测试分析在Fishtest框架上与该程序的“对照”版本对弈数万局的结果而被接受或拒绝。在框架上的测试会以卡方检验验证，仅当结果在统计意义上显著时才会被认为是可靠的并用于修改软件代码。

Fishtest出现后，Stockfish的等级分在仅仅12个月内增加了120，使其在所有主流象棋引擎排名中上升到顶部。在Stockfish 7中，作为对Fishtest的作者Gary Linscott对Stockfish的棋力的贡献的承认，他的名字被加入到正式的作者名单中。

Fishtest框架总共用9850多年的CPU时间下了57亿多局象棋。

### 可高效更新神经网络

<image>

2020年6月，Stockfish的开发者讨论了一个由计算机日本将棋程序员编写的名为Stockfish NNUE的可高效更新神经网络分叉。2020年7月，国际象棋新闻报导说“Stockfish NNUE通过将神经网络加入本就十分强大的Stockfish象棋引擎里，在计算机象棋中开辟了新天地”。之后，开发者宣布将会把NNUE合并入Stockfish中并发布了开发版。

“由@nodchip维护的可高效更新神经网络分支展现了很好的效果并有极大的潜力，我们接下来会合并……这一合并会将机器学习引入到引擎中，从而扩大开发者的范围并吸引更多有能力的人。我们渴望所有人——包括所有的开发者和各种硬件的用户——的支持并旨在成为一个包容的社群……所需的具体措施在未来会逐渐明朗，我期待与社群合作以实现这一目标！”

2020年9月2日，实现了前述神经网络的Stockfish第12版发布。根据发行公告，这一新版本“棋力明显比它之前的任何一个版本更强”，与第11版对弈时平均每赢10个回合才会输掉1个回合。

## 比赛结果

### 最强象棋引擎锦标赛

主条目：最强象棋引擎锦标赛

Stockfish曾多次获得最强象棋引擎锦标赛（TCEC）冠军，目前是获得冠军次数最多的。自TCEC于2013年重启以来，Stockfish仅在一个赛季中未能取得前两名。在TCEC第4和第5赛季，Stockfish均获得第二名，其在总决赛中均以23–25的成绩先后负于Houdini (象棋引擎)和Komodo。值得注意的是，在第5赛季中，Komodo的原作者唐·戴利在赛事的最后阶段因病去世，因此获胜的Komodo开发团队是在他死后代他领奖的。为了纪念他，在赛季结束后不久发布的Stockfish版本以“Stockfish DD”命名。

2014年5月30日，Stockfish 170514（一个支持残局数据库的Stockfish 5开发版）在总决赛中以35.5–28.5的比分击败了Komodo 7x，从而决定性地赢得了TCEC第6季。Stockfish 5的正式版于次日发布。在TCEC第7季中，Stockfish又一次晋级总决赛，但以30.5–33.5的比分输给了Komodo。在TCEC第8季中，尽管代码缺陷使其损失了比赛时间，Stockfish也再一次晋级总决赛，但在100个回合的总决赛中以46.5–53.5的比分输给了Komodo。在第9季中，Stockfish以54.5–45.5的比分击败了Houdini 5。

在TCEC第10季中，Stockfish获得第三名，是2013年以来其未能晋级总决赛的唯一赛季。Stockfish没有输掉任何比赛，但仍然因为未能击败评级更低的引擎足够多次而被淘汰。Stockfish在这一程序性淘汰后的很长一段时间不断获胜，其赢得了第11季（以59–41比分击败Houdini 6.03）、第12季（以60–40的比分击败Komodo 12.1.1）和第13季（以55–45的比分击败Komodo 2155.00）。在TCEC第14季中，Stockfish面对新的竞争对手Leela Chess Zero，以相差一局的比分（50.5–49.5）险胜。它的连续获胜终于在TCEC第15季中结束，因为Leela再次晋级总决赛并以53.5–46.5的比分击败了Stockfish，但不久之后，Leela在TCEC第16季中未能晋级总决赛，而Stockfish以54.5–45.5的比分击败了AllieStein。在TCEC第17季中，Stockfish再次于总决赛对战Leela，以47.5–52.5的比分落败。然而，在接下来的四次总决赛中，Stockfish均决定性地击败了Leela，比分分别为53.5–46.5（第18季）、54.5–45.5（第19季）、53–47（第20季）和56–44（第21季）。

Stockfish也参加了TCEC杯的比赛。它赢得了第一次杯赛，但在第二次杯赛的半决赛出人意料地被Houdini击败。在三四名决赛中，Stockfish棋力有所恢复，击败了Komodo。在第三次杯赛中，Stockfish晋级了决赛，但在7枚棋子的残局数据库和局中失误后被Leela Chess Zero击败。在第四次杯赛中，Stockfish逆转了这一结局，在决赛中以4.5–3.5的比分击败了Leela。

赛季｜年份｜时间限制｜排名｜参考

1｜2010｜100+10｜第3名

2｜2011｜150+30｜第5名

4｜2013｜150+60｜第2名

5｜2013｜120+30｜第2名

6｜2014｜120+30｜第1名

7｜2014｜120+30｜第2名

8｜2015｜180+30｜第2名

9｜2016｜180+15｜第1名

10｜2017｜90+10｜第2名此排名已考虑到Houdini 6被TCEC取消资格。

11｜2018｜120+15｜第1名

12｜2018｜120+15｜第1名

13｜2018｜120+15｜第1名

14｜2018｜120+15｜第1名

15｜2019｜120+10｜第2名

16｜2019｜120+10｜第1名

17｜2020｜90+5｜第2名

18｜2020｜90+10｜第1名

19｜2020｜120+10｜第1名

20｜2020｜120+10｜第1名

21｜2021｜120+10｜第1名

22｜2022｜120+12｜第1名

23｜2022｜120+12｜第1名

场次｜年份｜时间限制｜排名｜参考

1｜2018｜30+10｜第1名

2｜2019｜30+5｜第2名

3｜2019｜30+5｜第2名

4｜2019｜30+5｜第1名

5｜2020｜30+5｜第1名

6｜2020｜30+5｜第3名

7｜2020｜30+5｜第1名

8｜2021｜30+5｜第1名

9｜2021｜30+5｜第1名

10｜2022｜30+3｜第1名

场次｜年份｜时间限制｜排名｜参考

1｜2019｜30+5｜第1名

2｜2020｜30+5｜第1名

3｜2021｜30+5｜第2名

4｜2022｜30+5｜第1名

5｜2022｜30+3｜第1名

场次｜年份｜时间限制｜排名｜参考

1｜2021｜45+7｜第2名

2｜2021｜45+7｜第2名

3｜2022｜45+4.5｜第1名

场次｜年份｜时间限制｜排名｜参考

1｜2022｜30+3｜第1名

### Chess.com计算机国际象棋锦标赛

自从Chess.com于2018年首次举办Chess.com计算机国际象棋锦标赛（CCC）以来，Stockfish是该比赛中最成功的引擎。它在早期比赛中占有优势，在前六次锦标赛中均取得胜利，而在第七次锦标赛中获得第二名。自此以来，它的支配地位受到了基于神经网络的象棋引擎Leelenstein和Leela Chess Zero的挑战，但它仍然表现良好，在CCC11之前的每次比赛都能晋级总决赛。CCC12改用了淘汰赛制，抽签时Stockfish和Leela被分到了半决赛的同一组。Leela在半决赛中将Stockfish淘汰。然而，在赛后相同形式的比赛中，Stockfish战胜了决赛的输家Leelenstein。

场次｜年份｜时间限制｜排名｜参考

CCC 1：快速打群架｜2018｜15+5｜第1名

CCC 2：闪电战｜2018｜5+2｜第1名

CCC 3：快速重现｜2019｜30+5｜第1名

CCC 4：子弹喧闹｜2019｜1+2｜第1名

CCC 5：升级｜2019｜10+5｜第1名

CCC 6：冬季经典｜2019｜10+10｜第1名

CCC 7：快速发达｜2019｜5+2｜第2名

CCC 8：深潜｜2019｜15+5｜第1名

CCC 9：严酷考验｜2019｜5+2, 10+5｜第1名

CCC 10：两位数｜2019｜10+3｜第2名

CCC 11｜2019｜30+5｜第2名

CCC 12：子弹疯狂！｜2020｜1+1｜第3名

CCC 13：七边形｜2020｜5+5｜第2名

CCC 14｜2020｜15+5, 5+2, 1+1｜第4名

CCC闪电战2020｜2020｜5+5｜第1名

CCC速战2021｜2021｜15+3｜第1名

CCC闪电战2021｜2021｜5+5｜第1名

CCC Chess960闪电战｜2021｜5+5｜第1名

CCC 16：速战｜2021｜15+3｜第1名

CCC 16：子弹｜2021｜2+1｜第1名

CCC 16：闪电战｜2022｜5+5｜第1名

CCC 17：速战｜2022｜15+3｜第1名

CCC 17：子弹｜2022｜2+1｜第1名

CCC 17：闪电战｜2022｜5+5｜第1名

CCC 18：速战｜2022｜15+3｜第1名

CCC 19：闪电战｜2022｜5+5｜第1名

CCC 19：速战｜2022｜15+3｜第1名

Event｜Year｜Time Controls｜Result｜Ref

CPU Blitz Madness｜2020｜3+2｜1st

Trillion-Node Throwdown III｜2020｜150+5｜1st

No-Castle II｜2020｜5+2｜1st

Bullet Chess is Fun｜2020｜2+1｜1st

Checkmate in 4｜2020｜3+2｜1st

Odds Ladder｜2020｜3+2｜1st

Merry Queen Sac｜2020｜2+1｜1st

Budapest Bullet｜2020｜2+1｜2nd

King Gambit Madness｜2021｜5+5｜1st

Drawkiller Update Party｜2021｜2+1｜1st

To Castle Or Not To Castle II｜2021｜3+2｜1st

Eco Mega-Match 2 (part 1)｜2021｜1+1｜1st

Eco Mega-Match 2 (part 2)｜2021｜1+1｜1st

Caro-Kann Special｜2021｜5+2｜1st

King's Indian Defense Special｜2021｜10+2｜2nd

Dutch Defense Special｜2021｜10+2｜1st

Evans Gambit Madness｜2021｜10+2｜2nd

Sicilian Najdorf Special｜2021｜10+2｜1st

Belgian Stew｜2021｜2+1｜1st

Saragossa｜2021｜2+1｜2nd

Double Bongcloud, Rapid｜2021｜10+2｜2nd

The Hillbilly Attack｜2021｜10+2｜3rd

Romantic Openings: Danish Gambit Accepted｜2021｜3+2｜1st

Romantic Openings: Evans Gambit Accepted｜2021｜3+2｜1st

Romantic Openings: Urusov Gambit Accepted｜2021｜5+2｜1st

Romantic Openings: Blackmar-Diemer Gambit｜2021｜5+2｜1st

Romantic Openings: Stafford Gambit｜2021｜1+2｜2nd

Romantic Openings: Calabrese Countergambit｜2021｜5+2｜1st

Romantic Openings: Traxler Counterattack｜2021｜5+2｜2nd

No Black Castling｜2022｜5+5｜1st

Draw Killer Bonus｜2022｜15+5｜1st

Romantic Openings: Wing Gambit｜2022｜5+2｜1st

Chess 324 Bonus｜2022｜5+2｜1st

### Stockfish 5 versus Nakamura

Stockfish's strength relative to the best human chess players was most apparent in a handicap match with grandmaster Hikaru Nakamura (2798-rated) in August 2014. In the first two games of the match, Nakamura had the assistance of an older version of Rybka, and in the next two games, he received White with pawn odds but no assistance. Nakamura was the world's fifth-best human chess player at the time of the match, while Stockfish 5 was denied use of its opening book and endgame tablebase. Stockfish won each half of the match 1.5–0.5. Both of Stockfish's wins arose from positions in which Nakamura, as is typical for his playing style, pressed for a win instead of acquiescing to a draw.

### Stockfish 8 versus AlphaZero

In December 2017, Stockfish 8 was used as a benchmark to test Google division DeepMind's AlphaZero, with each engine supported by different hardware. AlphaZero was trained through self-play for a total of nine hours, and reached Stockfish's level after just four. In 100 games from the normal starting position, AlphaZero won 25 games as White, won 3 as Black, and drew the remaining 72, with 0 losses. AlphaZero also played twelve 100-game matches against Stockfish starting from twelve popular openings for a final score of 290 wins, 886 draws and 24 losses, for a point score of 733:467.关于这一系列游戏的学术论文没有提供分配给每个引擎的计算机资源。

AlphaZero's victory over Stockfish sparked a flurry of activity in the computer chess community, leading to a new open-source engine aimed at replicating AlphaZero, known as Leela Chess Zero. By January 2019, Leela was able to defeat the version of Stockfish that played AlphaZero (Stockfish 8) in a 100-game match. An updated version of Stockfish narrowly defeated Leela Chess Zero in the superfinal of the 14th TCEC season, 50.5–49.5 (+10 =81 −9), but lost the superfinal of the next season to Leela 53.5–46.5 (+14 =79 -7). The two engines remain very close in strength to each other even as they continue to improve: Leela defeated Stockfish in the superfinal of TCEC Season 17, but Stockfish won TCEC Season 18, TCEC Season 19, TCEC Season 20, and TCEC Season 21, each time defeating Leela in the superfinal.

## 衍生引擎

- YaneuraOu，一个强大的将棋引擎，也是NNUE的起源。支持USI，USI是将棋的UCI协议变体。
- Fairy Stockfish，一个Stockfish修改后的版本，可以运行象棋变体（国际象棋、将棋、antichess等）。
- Lichess Stockfish，一个用于玩无变体棋子的变体的版本。
- Crystal，试图解决国际象棋引擎的常见问题，例如由于过度简化或过度剪枝造成的定位或战术盲区。
- Brainfish，包含Cerebellum（一个国际象棋开局库）的精简版本。
- BrainLearn，Brainfish的衍生版本，但具有持久学习算法。
- ShashChess，一个衍生版本，目标是应用Alexander Shashin在《最佳玩法：发现最佳着法的新方法》一书中的理论。
- Fat Titz，CFish的一个分支，其名称是Fat Fritz 2的双关语，带有HalfKAv2-2048x2-64-64-1评估网络，包含Stockfish 14四倍的知识。它部分使用Lc0数据进行训练，这赋予了它独特的布局风格，同时保留了Stockfish战术犀利的特点。
- Houdini 6，据称是Stockfish 8的衍生版本，但在被要求提供源代码时未提供，违反了GPL许可证。
- Fat Fritz 2，据称是Stockfish 12的衍生版本，但在被要求提供源代码时未提供，违反了GPL许可证。
- 皮卡鱼（Pikafish），一个修改自Stockfish的中国象棋引擎。

## 延伸阅读

- Interview with Tord Romstad (Norway), Joona Kiiski (Finland) and Marco Costalba (Italy) , programmers of Stockfish

## 外部链接

- official-stockfish/Stockfish
- Stockfish的WebAssembly版本
- 开发版本
- 开发者论坛
- Fishtest

## 基本资料

- 开发者：Marco Costalba、Joona Kiiski、Gary Linscott、Tord Romstad、Stéphane Nicolet、Stefan Geschwentner、Joost VandeVondele
- 发行日期：2008年11月2日
- 编程语言：C++
- 操作系统：Microsoft Windows、macOS、Linux、iOS、Android
- 类型：象棋引擎
- 许可协议：GPL-3.0-or-later
- 软件版本周期：18（2026年1月31日）