# Stockfish

Stockfish (inglese per stoccafisso) è un motore scacchistico UCI open source multipiattaforma, sviluppato originariamente da Tord Romstad e Marco Costalba come fork di Glaurung, altro motore open-source precedentemente sviluppato dallo stesso Romstad, ed è correntemente mantenuto da una comunità di programmatori open-source. Dalla versione numero 12 il programma ha implementato una rete neurale artificiale ad apprendimento profondo.
Da circa metà degli anni 2010 Stockfish ha occupato ripetutamente la prima posizione nelle principali graduatorie di motori scacchistici e (al 2018) è considerato il più forte motore scacchistico open source e uno dei più forti motori in assoluto, insieme a Lc0 e Komodo. Ha vinto tre edizioni (stagioni 6, 9 e 11) e si è classificato tre volte secondo (stagioni 5, 7 e 8) nel Top Chess Engine Championship, considerato il campionato del mondo non ufficiale di scacchi per computer.
Per via della sua forza di gioco e della licenza libera sotto la quale è distribuito, Stockfish è diventato un motore molto popolare su svariate piattaforme. Può essere utilizzato su una generica interfaccia utente con supporto per il protocollo UCI, è il motore predefinito delle interfacce desktop BlitzIn e Dasher per Internet Chess Club e di applicazioni mobile come SmallFish e Droidfish, e a partire dal marzo 2017 è usato nel backend di Lichess.

## Caratteristiche

Stockfish usa una rappresentazione della posizione tramite bitboard, supporta fino a 512 thread e ha una dimensione massima della hash table di trasposizione pari a 1 TB. Implementa una sofisticata ricerca ad albero con potatura alfa-beta e, in confronto con altri motori, ha una profondità di ricerca relativamente elevata, dovuta in parte alla potatura aggressiva e alla late move reduction. Supporta gli scacchi960, eredità di Glaurung e, dal 2014, integra il supporto per le tablebase Syzygy.
Le versioni stabili e beta sono disponibili sotto forma di codice sorgente C++ e di binari precompilati per Microsoft Windows, macOS, Linux 32-bit/64-bit e Android.

## Storia

Il software è nato come fork di Glaurung, motore scacchistico open source sviluppato da Romstad e distribuito inizialmente nel 2004. Quattro anni dopo Marco Costalba sviluppò Stockfish come fork di Glaurung, e il nome è dovuto al fatto che il programma fosse "prodotto in Norvegia e cucinato in Italia", in riferimento alle nazionalità dei due sviluppatori. La versione 1.0 è stata distribuita nel novembre 2008. Per un certo periodo diverse idee e modifiche sono state trasferite bidirezionalmente tra i due progetti, fino a quando Romstad decise di abbandonare lo sviluppo di Glaurung (l'ultima versione è stata distribuita nel dicembre 2008) a favore dello sviluppo di Stockfish, che era il più avanzato tra i due progetti.
Nel 2011 Romstad ha abbandonato lo sviluppo di Stockfish, e nel 2014 anche Costalba ha abbandonato il progetto, che è stato successivamente mantenuto da una comunità di programmatori in un nuovo repository gestito da un gruppo di volontari.
Nel luglio del 2020 il team di Stockfish annuncia di voler implementare una rete neurale artificiale nel progetto, prendendo le mosse dal lavoro di AlphaZero e dal progetto open source conseguente, Leela Chess Zero. Ciò porterà al rilascio in settembre di Stockfish 12.
Dal febbraio del 2021 con il rilascio della versione 13 il team di Stockfish ha annunciato una collaborazione con il gruppo di Leela Chess, che ha portato al rilascio, il successivo 2 luglio, di Stockfish 14. Il nuovo rilascio ha guadagnato almeno 400 punti Elo rispetto alla versione 7.

### Causa legale contro Chessbase

Nel febbraio del 2021, dopo il rilascio di Stockfish 13, uno dei fondatori del progetto, Tom Romstad, ha accusato l'azienda tedesca ChessBase di aver utilizzato il loro codice per il rilascio del motore scacchistico Fat Fritz 2 senza aver rispettato la licenza GPLv3. Il cosiddetto copyleft della GNU, utilizzato da Stockfish, permette di copiare, modificare e migliorare un software a patto che il codice sorgente venga distribuito insieme al programma, cosa incompatibile con il carattere proprietario di Fritz e derivati. Il 18 febbraio viene rilasciato un comunicato stampa congiunto Stockfish, Leela Chess Zero e Lichess, dove si sostiene che Fat Fritz 2 non sia altro che Stockfish 13 con una diversa rete neurale e con una forza addirittura minore del suo omologo. Intervistato da Chess.com, Matthias Wüllenweber, uno dei fondatori dell'azienda tedesca, ha dichiarato che il debito di Fat Fritz 2 verso Stockfish è sempre stato chiaro nella presentazione del programma, ma che è stato un errore non essersi prima confrontati con il gruppo del motore open source, come era avvenuto per la prima versione di Fat Fritz (Fritz 17), quando, secondo Wüllenweber, ci sarebbe stato un confronto preventivo con il gruppo di Leela Chess.
Nel novembre del 2022, il tribunale di Monaco ha stabilito che l'azienda tedesca può continuare a distribuire i prodotti incriminati a patto che utilizzi la licenza GPL 3.0 e informi adeguatamente i suoi clienti dell'utilizzo del codice sorgente di Stockfish. Per la durata di un anno, tuttavia, Chessbase non potrà utilizzare il software di Stockfish nei propri prodotti e dovrà rendere esplicito sul proprio sito web l'utilizzo di Stockfish in Fat Fritz 2 e Houdini 6. Chessbase dovrà anche rendere pubblico l'utilizzo di qualsiasi software open source e distribuire il relativo codice sorgente. A tal fine viene istituito il dominio foss.chessbase.com, dove "FOSS" sta per "Free and Open Source Software", che sarà a cura di un ufficiale interno all'azienda che prenderà il nome di "Free Software Compliance Officer". La violazione di questo accordo prevede una richiesta di risarcimento a favore della Free Software Foundation Europe.

## Fishtest

A partire dal 2013 Stockfish ha fatto uso nello sviluppo di un framework di test distribuito chiamato Fishtest, sostenuto da volontari i quali donano tempo CPU per l'esecuzione dei test. Le modifiche alla logica del motore vengono accettate se introducono un miglioramento statisticamente significativo della performance di gioco, misurata tramite test del rapporto di probabilità sequenziale giocando decine di migliaia di partite contro una precedente istanza di riferimento del software.
Al giugno 2017 Fishtest ha impiegato oltre 745 anni di tempo CPU per giocare oltre 485 milioni di partite. L'introduzione di Fishtest ha rapidamente aumentato la forza di gioco di Stockfish di circa 120 punti Elo in 12 mesi, rendendolo uno dei motori più forti al mondo, motivo per il quale Gary Linscott, autore di Fishtest, è stato aggiunto alla lista degli autori del progetto a partire da Stockfish 7.

## Risultati
### Top Chess Engine Championship

Nel 2013 Stockfish è arrivato secondo nella quarta e quinta stagione del Top Chess Engine Championship (TCEC), comunemente riferito come il campionato del mondo non ufficiale di scacchi per computer, con un punteggio superfinal di 23–25 contro Houdini 3 e contro Komodo 1142. Il team di Komodo ha accettato il titolo postumo, in quanto Don Dailey, autore principale del motore, è morto a seguito di una malattia durante la fase finale dell'evento. In suo onore, la successiva versione di Stockfish è stata chiamata "Stockfish DD".
Il 30 maggio 2014 Stockfish 170514 (versione di sviluppo di Stockfish 5, con supporto per le tablebase) ha vinto nettamente la sesta stagione del TCEC Season 6, battendo Komodo 7x per 35.5-28.5 nel superfinal. Il giorno successivo alla vittoria è stato distribuito Stockfish 5. Nella settima stagione del TCEC Stockfish ha raggiunto la fase superfinal, dove è stato sconfitto da Komodo per 30.5-33.5. Nell'ottava stagione Stockfish è stato sconfitto in superfinal da Komodo per 46.5-53.5.
Nel 2016 Stockfish ha vinto la nona stagione del TCEC, battendo Houdini 5 per 54.5-45.5. Nella decima stagione, Stockfish si è classificato terzo.
Nel 2018 il motore vince di gran lunga l'11 stagione del TCEC classificandosi al primo posto della Premier Division e battendo Houdini realizzando 20 vittorie, 78 pareggi e solo 2 sconfitte (entrambe giocando con il nero).

### Stockfish - Nakamura

Nell'agosto 2014 Stockfish ha affrontato il grande maestro Hikaru Nakamura (all'epoca con un Elo di 2798, quinto nella classifica mondiale) in un match di quattro partite. Nelle prime due partite Nakamura ha giocato con l'ausilio di Rybka, e nelle successive due partite ha giocato con il bianco e con handicap di un pedone. Stockfish ha giocato senza libro di apertura e tablebase. Il motore ha vinto entrambe le fasi del match per 1.5–0.5.

### Confronto tra grandi giocatori

In uno studio pubblicato nell'aprile del 2017, curato da Jean-Marc Alliot presso l'Institut de recherche en informatique de Toulouse, Stockfish è stato usato come riferimento per confrontare il gioco dei più grandi campioni umani della storia, ed è risultato che Magnus Carlsen è il giocatore che ha la più alta probabilità di giocare mosse che aderiscono alle analisi di Stockfish.

### Torneo su chess.com

Nel novembre 2017 chess.com ha organizzato un torneo tra i dieci più forti motori, con una finale tra i due più forti, nella quale Stockfish ha battuto Houdini per 10.5-9.5, ottenendo tre vittorie con il nero e due sconfitte con il bianco. L'evento ha impiegato varie cadenze di gioco, e i motori sono stati eseguiti su un host virtuale (Intel Xeon 2.90 GHz, due processori con 18 core e hyperthreading, 60 GB RAM, Windows) su AWS.

### Stockfish - AlphaZero

Il 5 dicembre 2017 DeepMind ha pubblicato un preprint su arXiv nel quale ha presentato AlphaZero, un nuovo algoritmo di intelligenza artificiale che supporta una varietà di giochi da tavolo. Stockfish 8 è stato usato come benchmark per valutare la performance di AlphaZero nel gioco degli scacchi. Poiché entrambi i software girano solo su piattaforme hardware mutuamente incompatibili, AlphaZero è stato eseguito su un computer equipaggiato con quattro TPU, mentre Stockfish è stato eseguito su un computer in un'istanza con 64 thread e 1 GB di hash table. I software hanno disputato un match di 100 partite con un minuto per mossa (scelta criticata da Tord Romstad) e il risultato finale è stato di 25 vittorie di AlphaZero con il bianco, 3 vittorie di AlphaZero con il nero, e patta nelle 72 rimanenti partite. In altri 12 match di 100 partite, giocati usando come posizione iniziale le 12 aperture più comuni nel gioco umano, AlphaZero ha totalizzato in totale 290 vittorie, 886 patte e 24 sconfitte, con un punteggio finale di 733-467.
AlphaZero è un algoritmo di apprendimento automatico ed è stato addestrato unicamente per rinforzo nel corso di 9 ore su un cluster di TPU. Gli autori stimano che abbia superato la forza di gioco di Stockfish dopo le prime quattro ore di addestramento.