Italia sul podio ai campionati mondiali di scacchi per computer

Abbiamo intervistato Andrea Farina che ha conquistato il secondo posto ai campionati mondiali di scacchi per computer, una competizione internazionale.

Avatar di Andrea Ferrario

a cura di Andrea Ferrario

Editor in Chief

Andrea Farina ha conquistato il secondo posto ai campionati mondiali di scacchi per computer, una competizione internazionale che vede appassionati di scacchi e programmazione sfidarsi in diverse specialità. Abbiamo intervistato Andrea per capire qualcosa di più di questo mondo. Come si svolgono i campionati, come ha realizzato il software vincitore e altre piccole curiosità.

Intervista

Come si svolgono questi campionati? Ognuno propone un software che gioca a scacchi, ma come avviene la competizione ? Vengono fatti giocare l’uno contro l’altro i software?

Esattamente, i programmi giocano tra di loro ed essenzialmente il compito dei programmatori è quello di riportare le mosse sulla scacchiera e premere l'orologio. La posizione sulla scacchiera reale e il tempo sull'orologio sono quelli che valgono. Dire che il compito degli operatori è solo quello di riportare le mosse sulla scacchiera è però un po' riduttivo perchè, per esempio, devono anche occuparsi della scelta delle aperture da far utilizzare al programma in base all'avversario ed eventualmente, se sono i programmatori, di effettuare delle modifiche al programma ma tendenzialmente, a meno di gravi bug, nessuno mette mano ai sorgenti durante un torneo per evitare di fare danni non potendo testare per bene le modifiche. Il mondiale in realtà consiste di 3 campionati del mondo: c'è quello software, il World Chess Software Championship, in cui tutti i programmi utilizzano lo stesso hardware, che dura due giorni e ha un controllo a tempo ridotto rispetto al World Computer Chess Championship che è diciamo il campionato principale, quello con in palio il trofeo Shannon, in cui l'hardware utilizzabile è libero e che è quello che prende la maggior parte del tempo dell'evento. Infine c'è il mondiale Blitz, che dura di meno perché il controllo a tempo delle partite è di 5'+5", e anche per questo torneo l'hardware è libero.

Quali sono i parametri che vengono considerati per definire il vincitore? Brutalmente solo le partite vinte e perse, o anche altri fattori?

Ogni vittoria vale un punto, le patte mezzo punto e le sconfitte ovviamente zero. Poi, in caso di parità di punti, si utilizzano dei metodi di spareggio differenti a seconda del tipo di accoppiamento utilizzato. Per esempio, per il Mondiale a Macao, è consistito in un doppio round-robin, o girone all'italiana, in cui ogni partecipante ha affrontato gli altri due volte, una volta con i bianchi e una con i neri. In caso di parità di punti per il primo posto si sarebbero giocati dei play-off mentre per i restanti piazzamenti si è utilizzato il metodo di spareggio Sonneborn-Berger, che consiste nel calcolare un punteggio dato dalla somma dei punti totalizzati dagli avversari contro cui si è vinto e dalla metà dei punti degli avversari contro cui si è pareggiato.

Ci sono delle regole che i software devono rispettare o, come mi sembra di capire, non ci sono limitazioni? Tu parlavi di alcuni che usano cluster da 1200 Xeon e altri invece che usavano sistemi più “contenuti”.

Per quanto riguarda l'hardware nel World Computer Chess Championship non ci sono limitazioni, ognuno può utilizzare quello che vuole. Jonny di Johannes Zwanzegger ha utilizzato effettivamente un cluster con 1200 core Xeon E5-2830. Ovviamente il programma deve essere capace di utilizzare un determinato hardware, per esempio, tra i partecipanti di quest'anno, solo Jonny e Ginkgo sono in grado di utilizzare un cluster. In passato, ci sono stati partecipanti con hardware sviluppato appositamente come per esempio Belle di Ken Thompson, il Ken Thompson che creò Unix con Dennis Ritchie, che aveva delle schede apposite per la generazione delle mosse e per la valutazione della posizione (velocità da 200 a 160000 NPS) oppure un prototipo del famoso Deep Blue, che partecipò al Mondiale del 1995. I miglioramenti sia nel software che nell'hardware hanno reso sempre meno necessario lo sviluppo di hardware dedicato.

Il tuo software in che linguaggio è stato sviluppato?

Chiron è sempre stato scritto in C. Non ho mai reputato che la programmazione ad oggetti potesse apportare dei benefici significativi per un programma di scacchi e perciò non ho mai pensato di riscriverlo in C++.

Che hardware usava?

L'anno scorso l'hardware lo aveva fornito l'E4 Computer Engineering di Reggio-Emilio. Purtroppo quest'anno non è stato possibile e non avendo trovato altri sponsor, ho scelto di utilizzare un'istanza di Amazon AWS EC2. In particolare, era una c5.24xlarge con due Xeon Platinum 8175M per un totale di 48 core fisici. Non era scontato che andasse tutto bene perché per risparmiare il 50% sul prezzo ho utilizzato Linux come sistema operativo cosa che non avevo mai fatto in un torneo e soprattutto con così tanti thread, però nei giorni precedenti avevo effettuato dei test con 30 thread con hardware in mio possesso e tutto sembrava funzionare correttamente quindi ho scelto di correre il rischio. Poi comunque in caso di crash non si perde la partita, quindi sarebbe stato un problema relativo.

Quanto hai impiegato per svilupparlo?

Chiron ho iniziato a svilupparlo quando ero al liceo, alla fine del 2002, infatti il nome viene dal Principe di Machiavelli che stavamo studiando in quel periodo in Letteratura, e ci ho lavorato su da allora con pause però anche di uno o due anni.

Di base un software del genere che tipo di calcoli fa? È un software statistico che valuta tutte le possibili mosse e scenari?

I programmi classici come Chiron, utilizzano l'algoritmo mini-max con potatura alfa-beta e molti altri vari algoritmi per la funzione di ricerca.

Il software che ha vinto, cosa aveva più del tuo?

Komodo è un programma commerciale molto forte, quasi al pari di Stockfish, che è il più forte programma open-source i cui autori però non vogliono mai far partecipare al mondiale. Sicuramente, una cosa in cui è superiore, è la funzione di valutazione, che contiene decisamente più conoscenza scacchistica di quella di Chiron, anche perché nel team di Komodo c'è un Grande Maestro, Larry Kaufman, mentre io sono una semplice seconda nazionale, e probabilmente anche la ricerca è più efficiente visto che nel torneo software, nel quale utilizzavamo tutti lo stesso hardware, ho notato che andava più in profondità.

È celebre la figura del “giocatore di scacchi” che sfida il computer, e mi sembra che nella storia la maggior parte delle volte sia il computer a vincere. Ecco, mi chiedo, come può essere il contrario?

Diciamo che oggi giorno non può più essere il contrario, infatti l'ultimo match ufficiale uomo vs macchina è stato nel 2006, quando Vladimir Kramnik, all'epoca campione del mondo, perse 4-2 contro Deep Fritz, e l'anno prima quando su 6 partite il GM Michael Adams, al tempo il settimo al mondo, riuscì ad ottenere solo una patta contro Hydra. E da allora i progressi nell'hardware e nel software sono stati parecchi. Per quanto ne so, si giocano ogni tanto dei match ad handicap nei quali all'umano è dato il vantaggio di uno o più pedoni o di addirittura un pezzo minore. Ovviamente non è stato sempre così, si è dovuti arrivare al 1989 per vedere un programma Deep Thought, il predecessore di Deep Blue, vincere la sfida lanciata da David Levy nel 1968 e David Levy era si un forte giocatore ma solo, tra virgolette, un maestro internazionale. Poi il software Chess Genius sconfisse Kasparov all'Intel Grand Prix nel 1994, in una partita di speed chess da 25', fino ad arrivare alla famosa vittoria di Deep Blue vs Kasparov nel 1997. Poi, basta aggiungere, che già nel 2009, il programma Hiarcs 13, che non era neanche il più forte all'epoca, raggiunse una performance di grande maestro vincendo un torneo a Buenos Aires girando su un HTC Touch HD con processore da 500 MHz circa per capire come oggi sarebbe praticamente impossibile perfino per il campione del mondo Magnus Carlsen vincere un match contro un programma.

Se invece ora mi immagino un computer, contro un computer, come è possibile che tutte le partite non finiscano in parità ? Cioè, i software mettono in atto delle strategie? Quindi si prendono dei rischi?

Ma infatti, tra i programmi più forti, la percentuale delle patte è molto elevata. Quest'anno al mondiale non ci sono stati playoff per stabilire il vincitore, però per esempio l'anno scorso e nel 2017 si. Anche perché il livello generale dei programmi si alza sempre di più e diventa difficile fare punti anche contro i programmi più deboli. I programmi ovviamente non mettono in atto coscientemente delle strategie, però possono essere programmati per cercare di evitare o di ottenere la patta. Per esempio quando vuoi evitare di pattare contro un programma perché magari è più debole, di solito si utilizza all'interno del programma un valore per la patta negativo invece di zero in modo che il programma magari scelga delle posizioni anche inferiori che però gli consentano di evitare la patta e di sperare che l'avversario, più debole, commetta degli errori più avanti nella partita. Poi, ovviamente, se si vuole cercare di vincere si deve fare in modo che il programma eviti di cambiare troppi pezzi, soprattutto la regina, semplificando troppo il gioco e quindi riducendo le possibilità di vittoria. Di solito, nei programmi, c'è un'opzione, chiamata Contempt Factor, che regola tutto questo. Ovviamente tutto ciò comporta l'assunzione di rischi e mi viene in mente una partita dell'anno scorso a Stoccolma, quando un operatore aveva utilizzato un valore di contempt di mezzo pedone, che è veramente tanto, pur di cercare di vincere contro l'avversario più debole e alla fine quella partita l'ha persa, perché il programma pur di evitare la patta aveva accettato di infilarsi in posizioni con valutazione negativa di poco meno di mezzo pedone, che poi non è riuscito più a recuperare. Un'altra strategia che gli operatori possono attuare è quella di evitare che il proprio programma giochi le linee principali delle aperture perché oramai i libri delle aperture sono così grandi e profondi che c'è il rischio che entrambi i programmi giochino molte mosse dal libro e una volta fuori ci siano ben poche possibilità di vincere. Giocando invece delle sideline, si spera di buttare l'avversario presto fuori dal libro sperando che questo, essendo più debole e dovendo iniziare a pensare presto, commetta qualche errore.