Scacchierando.it
chiron-achilles-archery

Intervista a Andrea Farina

conversazione con il creatore di Chiron, 15° motore al Mondo nella Computer Chess Rating Lists con 3144 punti

Mentre il torneo di motori scacchistici TCEC prosegue verso la finale, Scacchierando ha intervistato i due autori italiani dei motori in lizza. Qualche giorno fa abbiamo pubblicato l’intervista a Marco Belli, autore della “giovane promessa” Vajolet2, questa volta invece è il turno del “veterano” Ubaldo Andrea Farina, creatore di Chiron.

Andrea Farina

Tra i motori italiani, Chiron, giunto quest’anno alla sua terza versione, si posiziona senza dubbio nelle posizioni di vertice. Fra gli allori conquistati il software può annoverare tre edizioni di fila dell’International Gsei Web Tournament (IGWT), il Computer Chess Tournament (CCT) del 2012 e i posizionamenti come primo motore italiano alla Chess Computer Cup (CCC) del 2009 e alla Italian Open Chess Software Cup (IOCSC) del 2010. Nella lista CCRL 40/40 il motore occupa al momento la 15ª posizione ed è accreditato di 3144 punti Elo.

Chiron ha anche preso parte alle ultime quattro edizioni del TCEC, arrivando nel 2014 fino alla sesta posizione. Quest’anno purtroppo la sua prestazione è incappata in qualche incidente di percorso, che Ubaldo ci ha gentilmente spiegato nel corso dell’intervista. 

Prima di tutto vorrei chiederti di presentarti ai lettori del blog.

Sono Ubaldo Andrea Farina, programmatore di Chiron e FAUCE. Ho rilasciato quest’ultimo, il mio primo programma, circa quattordici anni fa, in questo periodo. L’Elo doveva essere intorno ai 1600 punti. Agli scacchi mi sono avvicinato tardi, a circa quindici anni, partecipando con degli amici al campionato del liceo e poi iniziando a frequentare il circolo della mia città. Sin da subito ho preferito l’aspetto informatico rispetto a quello giocato e così, dopo aver partecipato a un paio di tornei “per prendere la categoria” (sono una semplice 2N), mi sono dedicato principalmente alla programmazione, anche se ho continuato a giocare online – prima su Yahoo, poi su FICS – e a studiare qualche libro.

Come descriveresti la tua creatura Chiron? È un successore di Fauce o un motore creato da zero?

Ho iniziato a lavorare su Chiron nel novembre del 2002. FAUCE era molto poco ottimizzato. Ricordo, ad esempio, che non aveva una lista dei pezzi ma, per generare le mosse o valutare un pezzo, controllava la scacchiera casa per casa finché non ne trovava uno. Aveva inoltre dei bug nell’implementazione dell’hash table e così via. Insomma, sarebbe stato in gran parte da riscrivere, perciò ripartii da zero con un nuovo programma. Mantenni solo la scelta del linguaggio di programmazione, ovvero il C.

Come nome per la nuova creazione scelsi quello del centauro Chirone. Tra le letture dei tempi del liceo ricordavo infatti Machiavelli che, nel “Principe”, lo definiva un modello per il buon regnante in quanto riuniva in sè la forza della bestia e l’astuzia dell’uomo. Allo stesso modo, pensai che nel mio nuovo programma ci dovesse essere il giusto equilibrio tra ricerca a forza bruta e selettività/conoscenza scacchistica.

Come si è evoluto Chiron fra le varie versioni?

Nella prima versione il metodo per la rappresentazione della scacchiera era lo 0x88 e l’unico protocollo di comunicazione supportato era il Chess Engine Communication Protocol (aka Winboard). Nel 2005, con l’implementazione delle attack tables, la funzione di valutazione divenne più complessa, soprattutto nelle parti riguardanti la mobilità e la sicurezza del re; l’algoritmo divenne più lento ma la qualità del gioco migliorò. Nel 2006 aggiunsi il supporto per l’UCI. A inizio 2009 riscrissi il motore in buona parte per passare alle bitboard che volevo provare da tempo. Tra fine 2010 e metà 2011 ho implementato la ricerca parallela: inizialmente ho usato lo “Young Brothers Wait Concept” ma da quest’anno, con Chiron 3, sono passato al LazySMP, poiché è più semplice e scala abbastanza bene con l’aumentare dei thread utilizzati.

C’è qualche software o personalità che ti ha ispirato?

Sin dal 2003, dopo il match Deep Junior-Kasparov, Deep Junior è stato il mio programma preferito per il suo stile tattico, dinamico e speculativo. È rimasto famoso, in quel match, il sacrificio di alfiere nella quinta partita (http://www.chessgames.com/perl/chessgame?gid=1260279). Soprattutto in passato, ho cercato di fare in modo che Chiron avesse uno stile simile.

Chiron ti ha dato certamente molte soddisfazioni. Ti aspettavi un simile successo? E fra i risultati ottenuti ce n’è uno a cui tieni particolarmente?

Parlare di successo penso sia eccessivo, anche perchè Chiron non è mai stato un top engine. Certamente, però, ho avuto delle soddisfazioni. Penso, in particolare, ai due titoli italiani vinti nel 2009 e nel 2010, dopo aver inseguito per anni Delfi, oppure al CCT14 nel quale ha vinto una bella partita contro Komodo.

Oltre ai tornei, mi ha fatto molto piacere che la Ubisoft abbia scelto Chiron per il minigioco sugli scacchi all’interno del videogioco Watch Dogs, uscito due anni fa, che ha venduto oltre 10 milioni di copie. Per integrare Chiron fu necessario fare delle importanti modifiche, come la conversione della ricerca da ricorsiva a iterativa, e creare tre livelli di forza appropriati per il grande pubblico.

Che cosa invece non ha funzionato nello TCEC in corso?

In questa stagione del TCEC Chiron ha perso tre partite, una probabilmente vinta contro Jonny e due patte, per un bug nella ricerca parallela che,  in alcune condizioni, non fa giocare la miglior mossa trovata, come hanno visto gli spettatori del torneo: alcune volte Chiron mostrava una certa principal variation (la sequenza di mosse che il motore ritiene migliore a gioco corretto da entrambe le parti, N.d.R.) ma giocava una mossa che non le corrispondeva. Rilascerò prossimamente un aggiornamento che risolve il problema. In generale però ci sono diverse cose da rivedere come per esempio la valutazione dello scudo pedonale del re, che Chiron ha compromesso senza motivo in una partita contro Andscacs, e quella degli alfieri di campo opposto in un finale di una partita contro Gull.

Quanto tempo dedichi in genere allo sviluppo di Chiron? Lavori da solo o hai un team alle spalle? Ti avvali anche della consulenza di Maestri?

Ora dedico molto meno tempo rispetto al passato. Dopo così tanti anni la passione è venuta un po’ a mancare. Di solito ci lavoro qualche ora tra il sabato pomeriggio e la domenica mattina ma non tutte le settimane. Se poi ci sono diverse cose da testare, faccio giocare le partite durante la settimana.

Per quanto riguarda il team, mi sono occupato di tutto io fino al 2006. Poi, dopo il mondiale di quell’anno, a Torino, nel quale Chiron perse la partita contro Zappa già dall’apertura, mi resi conto che avevo bisogno di un esperto per curare questo aspetto. Chiesi aiuto a Salvo Spitaleri, che scrisse un libro di aperture per il motore e lo curò fino al 2012. Dalla fine del 2013, il ruolo è stato invece svolto da Arturo Ochoa. Di solito Arturo lavora al suo libro e poi me ne manda alcune versioni con le quali faccio giocare a Chiron delle partite a tempi relativamente lunghi contro diversi avversari per vedere come si comporta con le nuove linee.

Nel corso degli anni, molte altre persone mi hanno aiutato con i test delle varie versioni di sviluppo. Tra le tante ricordo Ciro Vignotto, Leo Dijksman, Olivier Deville, Günther Simon, Lars Hallerström e i tester delle rating list CCRL e CEGT.

Come si alternano le varie fasi dello sviluppo (ideazione di nuovi algoritmi, studio e integrazione di tecniche esistenti, calibrazione dei parametri)? Come decidi quanto tempo dedicare a ogni aspetto?

Per testare Chiron, in passato, facevo giocare delle partite contro 4-5 sparring partners che erano al livello di Chiron o poco più forti, usando tempi considerati oggi lunghi come 5’ a partita. Poi analizzavo con qualche software forte le partite perse o pattate a partire da posizioni vantaggiose, per capire dove il motore aveva sbagliato e migliorare così la funzione di valutazione.

Da diversi anni, ormai, utilizzo cutechess-cli di Ilari Pihlajisto, un’interfaccia a linea di comando, per far giocare la versione con miglioramenti sperimentali contro quella al momento migliore. Il confronto consiste in migliaia di partite in parallelo a tempi molto brevi su un server con 32 core. Per testare modifiche alla funzione di valutazione uso tempi da 20” a partita, di più per modifiche alla ricerca perché è necessario che siano raggiunte determinate profondità.

Decidere su cosa lavorare dipende di volta in volta. Per esempio, in questo periodo, ho diverse posizioni di partite giocate al TCEC e al torneo ACCA di luglio da analizzare per correggerne la valutazione, l’attuale implementazione del LazySMP va migliorata, va ottimizzato il funzionamento su sistemi NUMA e ho un paio di idee per delle estensioni da testare.

Ci daresti qualche dettaglio sul modo in cui calibri la funzione di valutazione?

Utilizzo una procedura nota già dal 2009 grazie a Miguel Ballicora e Marcel van Kervinck ma resa famosa nel 2014 dall’autore di Texel, Peter Österlund, che ha descritto dettagliatamente la sua implementazione in un post su Talkchess. E’ utilizzata da molti anni anche dal team di Deep Junior. Il metodo si basa sul fatto che il punteggio che la funzione di valutazione assegna alla posizione può essere convertito, tramite una curva logistica, in un pronostico sul risultato finale della partita in termini di punti attesi.

Per calibrare la valutazione, si prende un set di diversi milioni di posizioni estratte da partite di cui è noto l’esito finale. Regolando i parametri della valutazione, si cerca di ridurre al minimo la differenza fra il risultato finale predetto dalla funzione di valutazione e quello realmente avvenuto. Si è visto che, riducendo questo errore, buona parte dei programmi diventa più forte. Alcuni, come l’autore di Texel, utilizzano il risultato della quiescenza mentre io utilizzo il risultato della valutazione, che è più veloce, e solo per posizioni tranquille. Per chi volesse approfondire, consiglio il corrispondente articolo sul Chess Programming Wiki (“Texel’s Tuning Method”), e la tesi di Amir Ban citata nella pagina.

In ogni caso, alcuni parametri della funzione di valutazione sono ancora scelti manualmente. Per i test sui miglioramenti sto anche valutando di tornare al metodo delle sfide contro un set di avversari, anziché solo contro la versione precedente del motore.

Come descriveresti la comunità di sviluppatori di motori, sia internazionale che italiana? Prevale l’aspetto competitivo o la familiarità fra persone che condividono la stessa passione?

 Per quanto riguarda la comunità italiana, l’aspetto collaborativo è sicuramente preminente su quello competitivo. Lo stesso Torneo Internazionale del G6 viene considerato un’occasione per incontrarsi e per scambiarsi idee ed esperienze. Il torneo è organizzato dal Gruppo Scacchi E Informatica (http://www.g-sei.org/),  il punto di riferimento per la computer chess in Italia. Negli ultimi anni, il gruppo è tornato molto attivo soprattutto grazie a Luca Lissandrello che ha realizzato e amministra il sito, consigliato anche da Edoardo Manino e Mauro Riccardi. La trasmissione live delle partite dell’IGWT e dei test settimanali delle nuove versioni dei programmi, la chat, il forum, la raccolta dei progetti realizzati dai membri (tra cui un motore basilare per iniziare) sono alcuni esempi di ciò che si può trovare sul sito. È stato anche redatto il primo regolamento ufficiale per i tornei del G6.

Lo stesso, grosso modo, penso si possa dire in campo internazionale. Sul forum del Computer Chess Club o su quello OpenChess, scrivono,  scambiandosi idee o rispondendo a chi chiede consigli sia gli autori di programmi storici come Robert Hyatt, Jon Dart, Ed Schröder, per citare i più noti, che quelli dei programmi più forti, come Stockfish, Komodo. Ovviamente, gli autori dei programmi commerciali sono più restii ad entrare nei dettagli.

Quali sono gli obiettivi che ti poni per il futuro?

Nell’immediato c’è il Torneo Internazionale del G6, organizzato quest’anno da Stefano Gemma, fondatore del gruppo, a Norcia. Si giocherà il 10 e 11 settembre. Chiron non partecipa a questo torneo dal 2011 e cercherà di riprendersi il titolo italiano che negli ultimi due anni è stato vinto da Pedone. Per il resto non c’è un obiettivo in particolare, però mi piacerebbe far rientrare Chiron tra i top-8 nella rating list IPON (http://www.inwoba.de/index.html).

Per finire, che consigli daresti a chi volesse cimentarsi nello sviluppo di nuovi motori scacchistici?

Di non farlo 🙂 Se proprio deve, troverà molti spunti sul Chess Programming Wiki (https://chessprogramming.wikispaces.com), l’enciclopedia della computer chess, aggiornata costantemente da Gerd Isenberg, e li potrà studiare tutti i principali algoritmi utilizzati. Ci sono anche altre risorse come i “Programming Topics” di Bruce Moreland con i quali ho iniziato io e, un po’ più avanzato, “How Rebel Plays Chess” di Ed Schröder. All’inizio, semplicemente, consiglio di non pensare alle ottimizzazioni ma di limitarsi a realizzare un programma con una funzione di valutazione semplice, una ricerca composta da alpha-beta più quiescenza e di assicurarsi che il tutto funzioni correttamente. Poi, potrà implementare l’hash table, il null move pruning, rendere più complessa la funzione di valutazione e così via. Se vuole sperimentare con qualcosa di nuovo rispetto ai classici algoritmi, può provare con il deep learning, utilizzato nel famoso AlphaGo. Ne fa uso, tra i programmi di scacchi, Giraffe, su cui l’autore Matthew Lai ha scritto la propria tesi e ora  lavora proprio per Google DeepMind.

Ovviamente, gli consiglio di iscriversi al G6.

Grazie ancora per la disponibilità e a presto.

Grazie a voi.

Lascia un commento

Devi essere loggato per lasciare un commento. Clicca per Registrati.