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年增加了對其的支持。

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億多局象棋。

### 可高效更新神經網路

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日）