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可以進行更深的搜索。7，Stockfish 15 (4線程)在CCRL 40/15評測中達到了354016的等級分。
由於其從Glaurung派生而來，Stockfish支持Chess960。曾在羅納德·德曼維護的分叉中實現的Syzygy殘局數據庫於2014年被併入Stockfish中。在7個棋子的Syzygy殘局數據庫發佈之後不久，Stockfish於2018年增加了對其的支持。
DroidFish是一款搭載Stockfish引擎的Android平臺國際象棋程序
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中併發布了開發版。
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。

**Chess.com計算機國際象棋錦標賽**
自從Chess.com於2018年首次舉辦Chess.com計算機國際象棋錦標賽（CCC）以來，Stockfish是該比賽中最成功的引擎。它在早期比賽中佔有優勢，在前六次錦標賽中均取得勝利，而在第七次錦標賽中獲得第二名。自此以來，它的支配地位受到了基於神經網絡的象棋引擎Leelenstein和Leela Chess Zero的挑戰，但它仍然表現良好，在CCC11之前的每次比賽都能晉級總決賽。CCC12改用了淘汰賽制，抽籤時Stockfish和Leela被分到了半決賽的同一組。Leela在半決賽中將Stockfish淘汰。然而，在賽後相同形式的比賽中，Stockfish戰勝了決賽的輸家Leelenstein。

**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) date=20221115102854 , programmers of Stockfish

**外部鏈接**
 官方倉庫-  Stockfish的WebAssembly版本 date=20200723231539 -  開發版本 date=20130514152531 -  開發者論壇 date=2013-08-02 -  Fishtest date=20130613141905