Stockfish

维基百科,自由的百科全书
Stockfish
開發者Marco Costalba
Joona Kiiski
Gary Linscott
Tord Romstad
Stéphane Nicolet
Stefan Geschwentner
Joost VandeVondele
首次发布2008年11月2日,​15年前​(2008-11-02
当前版本16(2023年6月30日,​9個月前​(2023-06-30[1]
源代码库 編輯維基數據鏈接
编程语言C++
操作系统Microsoft Windows
macOS
Linux
iOS
Android
类型象棋引擎英语Chess engine
许可协议GPL-3.0-or-later[2]
网站stockfishchess.org/ 编辑维基数据

Stockfish,是一個自由及開放源碼国际象棋引擎英语Chess engine軟件,可用於各種桌面和移動平台。可通過通用國際象棋接口英语Universal Chess Interface國際象棋軟件中使用。

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

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

特性

在多处理器系统中,Stockfish可以使用至多1024个线程。它的已访问位置表英语transposition table的大小可达32TB。Stockfish通过位棋盘英语bitboard实现了高级的Alpha-beta剪枝。部分上由于进行了更激进的剪枝以及后期移动缩减英语late move reductions,与其它象棋引擎相比,Stockfish可以进行更深的搜索[5]。截至2022年7月 (2022-07),Stockfish 15 (4线程)在CCRL 40/15评测中达到了3540+16
−16
等级分[6]

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

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

历史

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

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

Fishtest

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

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

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

截至2022年12月 (2022-12),Fishtest框架总共用9850多年的CPU时间下了57亿多局象棋[23]

可高效更新神经网络

Stockfish的可高效更新神经网络的可视化

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

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

——Joost VandeVondele,2020年7月25日[27]

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

比赛结果

最强象棋引擎锦标赛

主条目:最强象棋引擎锦标赛英语Top Chess Engine Championship#Tournament results

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

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

在TCEC第10季中,Stockfish获得第三名,是2013年以来其未能晋级总决赛的唯一赛季。Stockfish没有输掉任何比赛,但仍然因为未能击败评级更低的引擎足够多次而被淘汰。Stockfish在这一程序性淘汰后的很长一段时间不断获胜,其赢得了第11季(以59–41比分击败Houdini 6.03)[32][35]、第12季(以60–40的比分击败Komodo 12.1.1)[32][36]和第13季(以55–45的比分击败Komodo 2155.00)[32][37][38]。在TCEC第14季中,Stockfish面对新的竞争对手Leela Chess Zero英语Leela Chess Zero,以相差一局的比分(50.5–49.5)险胜[32][39]。它的连续获胜终于在TCEC第15季中结束,因为Leela再次晋级总决赛并以53.5–46.5的比分击败了Stockfish[32],但不久之后,Leela在TCEC第16季中未能晋级总决赛,而Stockfish以54.5–45.5的比分击败了AllieStein[32]。在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季)[32]

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

锦标赛
赛季 年份 时间限制 排名 参考
1 2010 100+10 第3名 [41]
2 2011 150+30 第5名 [42]
4 2013 150+60 第2名 [43]
5 2013 120+30 第2名 [44]
6 2014 120+30 第1名 [45]
7 2014 120+30 第2名 [46]
8 2015 180+30 第2名 [47]
9 2016 180+15 第1名 [48]
10 2017 90+10 第2名[note 1] [49]
11 2018 120+15 第1名 [50]
12 2018 120+15 第1名 [51]
13 2018 120+15 第1名 [52]
14 2018 120+15 第1名 [53]
15 2019 120+10 第2名 [54]
16 2019 120+10 第1名 [55]
17 2020 90+5 第2名 [56]
18 2020 90+10 第1名 [57]
19 2020 120+10 第1名 [58]
20 2020 120+10 第1名 [59]
21 2021 120+10 第1名 [60]
22 2022 120+12 第1名 [61]
23 2022 120+12 第1名 [62]
杯赛
场次 年份 时间限制 排名 参考
1 2018 30+10 第1名 [63]
2 2019 30+5 第2名[note 1] [64]
3 2019 30+5 第2名 [65]
4 2019 30+5 第1名 [66]
5 2020 30+5 第1名 [67]
6 2020 30+5 第3名 [68]
7 2020 30+5 第1名 [69]
8 2021 30+5 第1名 [70]
9 2021 30+5 第1名 [71]
10 2022 30+3 第1名 [72]
菲舍尔任意制象棋(FRC)
场次 年份 时间限制 排名 参考
1 2019 30+5 第1名 [73]
2 2020 30+5 第1名 [74]
3 2021 30+5 第2名 [75]
4 2022 30+5 第1名 [76]
5 2022 30+3 第1名 [77]
瑞士制
场次 年份 时间限制 排名 参考
1 2021 45+7 第2名 [78]
2 2021 45+7 第2名 [79]
3 2022 45+4.5 第1名 [80]
双重菲舍尔任意制象棋[note 2](DFRC)
场次 年份 时间限制 排名 参考
1 2022 30+3 第1名 [81]

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

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

主赛事
场次 年份 时间限制 排名 参考
CCC 1:快速打群架 2018 15+5 第1名 [82]
CCC 2:闪电战 2018 5+2 第1名 [83]
CCC 3:快速重现 2019 30+5 第1名 [84]
CCC 4:子弹喧闹 2019 1+2 第1名 [85]
CCC 5:升级 2019 10+5 第1名 [86]
CCC 6:冬季经典 2019 10+10 第1名 [87]
CCC 7:快速发达 2019 5+2 第2名 [88]
CCC 8:深潜 2019 15+5 第1名 [89]
CCC 9:严酷考验 2019 5+2, 10+5 第1名 [90]
CCC 10:两位数 2019 10+3 第2名 [91]
CCC 11 2019 30+5 第2名 [92]
CCC 12:子弹疯狂! 2020 1+1 第3名 [93]
CCC 13:七边形 2020 5+5 第2名 [94]
CCC 14 2020 15+5, 5+2, 1+1 第4名 [95]
CCC闪电战2020 2020 5+5 第1名 [96]
CCC速战2021 2021 15+3 第1名 [97]
CCC闪电战2021 2021 5+5 第1名 [98]
CCC Chess960闪电战 2021 5+5 第1名 [99]
CCC 16:速战 2021 15+3 第1名 [100]
CCC 16:子弹 2021 2+1 第1名 [101]
CCC 16:闪电战 2022 5+5 第1名 [102]
CCC 17:速战 2022 15+3 第1名 [103]
CCC 17:子弹 2022 2+1 第1名 [104]
CCC 17:闪电战 2022 5+5 第1名 [105]
CCC 18:速战 2022 15+3 第1名 [106]
CCC 19:闪电战 2022 5+5 第1名 [107]
CCC 19:速战 2022 15+3 第1名 [108]