Software
libero e scacchi |
||||||||||||
I programmi per giocare a scacchi hanno fatto progressi incredibili
nell'ultimo decennio, e questo è dovuto solo in parte all'aumento
delle prestazioni fornite dall'hardware. Sono state
sviluppate anche nuove euristiche e raffinati algoritmi vecchi, grazie
alla collaborazione stretta tra programmatori e Maestri. Il fatto è
che i più forti giocatori al mondo oggigiorno sono macchine, e questo
vale non solo per l'hardware specializzato (si ricordi la sfida
Kasparov-Deep Blue che segnò la prima sconfitta di un campione
mondiale da parte di un computer, New York, 1997,
http://scacchi.qnet.it/manuale/comp02.htm,
http://www.research.ibm.com/deepblue/home/html/b.html); attualmente
i programmi per PC raggiungono il livello di un Maestro Internazionale
(2400 Elo), forza che si eleva notevolmente se viene usato hardware
dedicato o macchine a 64 bit. Una conseguenza dell'aumento di forza dei programmi è stato un
cambiamento necessario nelle condizioni di torneo. Una volta le
partite venivano sospese e il giocatore che effettuata l'ultima mossa
prima della sospensione metteva in busta la "mossa segreta", mentre
l'altro passava tutta la notte ad analizzare la posizione, a cercare
di scoprire la mossa segreta dell'avversario e la migliore continuazione.
Oggigiorno, invece, le partite di torneo devono finire obbligatoriamente in giornata
per evitare l'ausilio del computer. Questo articolo propone una panoramica dei diversi tipi di software
libero a disposizione in ambito scacchistico, di cui i motori di
scacchi sono solo una parte (la più nota per il gran
pubblico). Cominceremo con il formato libero usato per scambiare
partite, per passare successivamente in rassegna le più importanti funzionalità di Crafty, forse
il più forte programma libero in circolazione. Faremo anche una
revisione di Scid (un database) e di Xboard, una sofisticata
interfaccia grafica, per finire con gli scacchi giocati via Internet e
con le possibilità documentative che il software libero consente. I programmi vengono realizzati per lavorare con dati: nel nostro caso
con partite di scacchi. Software libero senza una versione libera del
formato con il quale vengono immagazzinate e trasmesse le partite
impedirebbe un effettivo uso dei programmi. La definizione del formato
PGN obbedisce a questo scopo. I criteri utilizzati nella
specificazione del formato sono i seguenti (http://www.tim-mann.org/Standard): Un file PGN è un file ASCII che contiene una o più partite con la
seguente struttura: Si deve pensare al formato PGN come a un sistema per
scambiare dati e per far si che questi possano essere letti facilmente da un umano (una
partita in formato PGN ha per le mosse una struttura quasi identica
alla normale notazione algebrica usata per trascrivere le partite, per
cui è possibile facilmente riprodurre e studiare una partita sulla
scacchiera a partire da essa), e non per trattare i dati. Essendo un
formato ASCII, non è pensabile poter immagazzinare e fare ricerche su
file che contengono centinaia di migliaia di partite; per fare questo ci
serve un database. Lo scopo di quest'ultimo è poter esportare/importare grandi
quantità di partite tra le basi di dati appositamente progettate per
questo scopo. Possiamo dire che il formato PGN è l'equivalente per gli
scacchi di quello che il DXF è per i programmi CAD o la notazione
SMILES in ambito chemioinformatico/bioinformatico. La partita Fischer-Spassky usata come esempio contiene la struttura
tipica di una partita in formato PGN. Essa è composta da una serie di
tag racchiusi tra parentesi quadre seguita da una linea vuota e dalla
sezione delle mosse; ogni linea di tale sezione deve contenere al
massimo 80 colonne. Ci sono sette tag obbligatori (noti come i Seven
Tag Roster): Il risultato viene ripetuto alla fine della sezione delle mosse. Ci
sono altri tag aggiuntivi per specificare informazioni come Elo dei
giocatori, controllo di tempo, variazioni, ecc., ma sono
opzionali. Tra questi forse un tag importante è ECO, che specifica il
codice ECO (Encyclopaedia of Chess Openings) dell'apertura, e FEN, che
specifica la notazione Forsyth-Edwards (Forsyth-Edwards Notation) se
la posizione di partenza è diversa dalla posizione iniziale (usato per
studi o problemi). Un problema del formato PGN, derivato dalla sua natura ASCII è il
fatto che in seguito a errori di battitura o abbreviazioni ci possono
essere partite con diciture diverse per giocatori, città, date,
ecc. Le basi di dati moderne hanno la possibilità, una volta importata
la raccolta PGN, di correggere questi difetti in diversi modi. Crafty è un motore di scacchi, cioè un programma per giocare
partite, scritto da Robert Hyatt. È un discendente di Cray Blitz,
sempre opera di Hyatt, un programma molto famoso che ha segnato
un'epoca e nel quale sono state introdotte alcune importanti novità
teoriche, come ad esempio le bitboard. È possibile trovare diverse
versioni di Crafty, insieme ad alcune partite, informazioni e basi di finali
(endgame tablebases) all'indirizzo ftp://ftp.cis.uab.edu/pub/hyatt.
Crafty è probabilmente il più forte programma libero disponibile
attualmente. All'undicesima edizione del torneo tra computer
organizzato da Leo Dijksman (http://wbec-ridderkerk.nl),
Crafty 19.20 su processore Opteron a 64 bit si è classificato in ventiquattresima
posizione (l'ultima tra i programmi della "Prima Divisione", quelli
più forti), totalizzando 9 punti su 28, raggiungendo l'Elo (incredibile!)
di 2663 (tredicesimo programma in graduatoria per Elo), cioè il
livello di un Gran Maestro tra i più forti. Per avere un'idea della
forza relativa del programma, si tenga conto che la FIDE (la
Federazione Scacchistica Internazionale), nel luglio di 2003, dava la
seguente statistica (http://it.wikipedia.org/wiki/ELO): Crafty non possiede interfaccia grafica ma è compatibile con
Xboard, di cui parleremo più avanti. Le caratteristiche più importanti
del programma sono: Gnuchess è un altro valido programma, ma la sua potenza di gioco è lontana
da quella di Crafty. I motori di scacchi, anche su normali PC, sono troppo forti per
confronti diretti, soprattutto con giocatori amatoriali, ma sono utili
per l'analisi delle partite. Le basi di dati sono, a mio avviso, il software più importante per
un giocatore di scacchi, sia esso amatore o professionista. Io le uso per
preparare linee di apertura su grandi database, cercando partite in
base a determinate posizioni: negli anni ho raccolto circa 5 milioni
di partite che ho distribuito in 4 database e che mi consentono di
preparare linee di apertura molto specializzate per i pochi tornei che
ormai gioco, visto che non ho il tempo di studiare tutto il materiale
a disposizione. Può sembrare esagerata una raccolta di partite di
queste dimensioni per un giocatore amatoriale come me, ma si tenga
conto che cercando una qualche posizione, dopo 8-10 mosse si può
arrivare a tirar fuori non più di una ventina di partite, anche su un
database di un milione. Il professionista usa il database per preparare
incontri con altri giocatori di livello internazionale, vedendo le
linee di apertura che i suoi avversari hanno giocato più recentemente,
con quale esito, ecc. Scid (Shane's Chess Information Database, http://scid.sourceforge.net) è
un'applicazione di database per Windows e Linux scritta in C++ che
consente di cercare partite in base a diversi criteri, di visualizzarne
l'andamento graficamente e di produrre report di aperture e
giocatori. Dispone di un motore di scacchi, Scidlet, che consente
l'analisi delle posizioni, ma la funzionalità di analisi è compatibile
con qualsiasi programma compatibile con Winboard/Xboard. Il programma è altamente configurabile tramite interfaccia
grafica. Le opzioni di funzionamento sono salvate, nella mia
distribuzione Debian, all'interno della cartella
~/.scid/. L'applicazione principale viene lanciata con il
comando Scid, ed è un frontend grafico scritto in Tcl/Tk che usa
Tkscid, un interprete Tcl/Tk esteso per supportare le funzionalità di
database di Scid. Oltre a Scid, Tkscid e Scidlet, Scid contiene le seguenti
utilità: Alcune funzionalità: Inoltre, Scid consente di inviare e gestire direttamente le partite
giocate per corrispondenza. Il formato di database di Scid consente la ricerca e il trattamento di
grandi quantità di partite. Ad esempio, il mio computer di casa, con
processore AMD Sempron a 1672 MHz, ha impiegato
5 secondi per aprire un file con oltre 1.420.000 partite e circa
7 secondi per trovare nel database tutte le partite che raggiungono la
posizione della Difesa Siciliana dopo 1.e4 c5 2.Cf3 e6 3.d4 cxd4
4.Cxd4 a6 5.c4. Molti programmi, sia liberi che commerciali, dispongono della
propria interfaccia grafica. Tuttavia nel tempo sono stati
standardizzati alcuni protocolli di comunicazione tra i motori di
scacchi e i software utilizzati per visualizzare e gestire le
partite. Questo permette a un programmatore che, ad esempio, non sia
interessato allo sviluppo dell'interfaccia grafica e che voglia
concentrarsi sugli algoritmi di calcolo di utilizzare programmi già
disponibili per consentire non solo di visualizzare, ma anche di
comunicare con altri motori di scacchi, a patto che includa nel
proprio programma il protocollo di comunicazione con l'interfaccia
grafica. Questo si sposa perfettamente con lo spirito di Unix e del
software libero, dove è sempre possibile, appoggiandosi al lavoro di
chi ci ha preceduto, dare qualcosa di nuovo
rispetto a quello che è stato già fatto, senza dover ripetere il lavoro
portato avanti da altri. Ci sono due standard principali di interfacce per i programmi che
giocano a scacchi: UCI e Winboard/Xboard. Il primo è usato soprattutto
dai programmi commerciali, mentre il secondo da quelli liberi. Noi ci
concentreremo su Xboard, un'interfaccia sviluppata da diverse persone
(inclusa la FSF, che l'ha potenziata notevolmente), tra le quali
Tim Mann (il programmatore originale) è la più importante
(ulteriori informazioni si possono trovare all'URL http://www.tim-mann.org/xboard.html).
Winboard è un porting di Xboard su piattaforme Win32 curato
dallo stesso Mann. Un elenco di programmi compatibili con Xboard si può trovare, oltre
che nel succitato sito di Tim Mann, all'indirizzo http://wbec-ridderkerk.nl, dove si può
vedere l'ottimo sito curato da Leo Dijksman il quale organizza competizioni tra
programmi con relativo calcolo di Elo e graduatoria in base ai
risultati. Chiunque può iscrivere il proprio programma e farlo giocare
contro i più forti software del mondo. Attualmente si è conclusa
l'undicesima edizione ed è aperta l'iscrizione per la dodicesima. Xboard è una scacchiera grafica che fa da interfaccia ai motori
Gnuchess o Crafty (principalmente, ma anche a qualunque programma
compatibile con lo standard Xboard/Winboard), a Internet Chess Server
(ICS), a partite giocate per corrispondenza o a una qualunque raccolta
personale di partite. Come interfaccia di Gnuchess e Crafty, consente
di analizzare partite o posizioni arbitrarie, guardare partite giocate
tra i due programmi, ecc. Come interfaccia di un server ICS (xboard -ics),
è possibile giocare contro altri utenti ICS, osservare partite in
corso o visualizzare partite appena finite, come vedremo nella sezione
dedicata a Internet. Per ultimo, Xboard è un client di scacchi per
corrispondenza, utilizzando il programma cmail. Personalmente utilizzo Xboard per fare giocare tra loro programmi
diversi. Se non viene specificato alcun argomento, Xboard si
inizializza nella modalità MachineBlack, nel quale
l'opponente, con il Nero, è il programma Gnuchess. Per utilizzarlo
invece in modalità standalone, per riprodurre una qualche partita
salvata in precedenza, si può lanciare con l'opzione
-ncp/-noChessProgram, anche se per questi compiti io preferisco
utilizzare una base di dati come Scid, che offre funzionalità più
avanzate di editing e di gestione delle partite/annotazioni/export. Nella
modalità TwoMachines è possibile specificare due programmi
che giocano tra loro riproducendo la partite attraverso
Xboard. Inoltre, è possibile usare Xboard nella modalità standalone su
una collezione di partite (salvate per esempio in formato PGN) con
l'utilità pxboard, ad esempio digitando dalla riga di
comando: Xboard ci apre una finestra che ci consente di selezionare e
riprodurre sulla scacchiera una qualunque partita contenuta nel
file. Xboard dispone di una miriade di opzioni che possono essere
specificate dalla riga di comando. Il seguente script permette di fare
giocare un match di 10 partite tra Gnuchess e Crafty, e lo utilizzo per
modificare in maniera agevole tempo di riflessione e opponenti su una
configurazione di base che mi è comoda: Lo script realizza un match tra Gnuchess (che comincia la prima
partita giocando con il Bianco) e Crafty sulla base di 40 mosse in 10
minuti (nella modalità non incrementale, cioè non vengono aggiunti
bonus di tempo per mossa effettuata). Ogni programma giocherà 5
partite con il Bianco e 5 con il Nero. Il risultato finale viene
salvato in formato PGN nel file /tmp/xboard.pgn per essere poi
analizzato o importato in una base di dati. Come abbiamo detto, la forza dei programmi attuali non consente a
un giocatore di club di giocare alla pari con il computer. È
importante, per poter realizzare progressi, giocare con giocatori di
livello simile al nostro, ma è parimenti essenziale poter diversificare i
nostri opponenti, in modo da poter confrontarsi con stili diversi,
forze di gioco relative differenti, ecc. Internet ci apre una finestra
immensa dalla quale possiamo scegliere, in qualsiasi momento, un
opponente adeguato alla nostra abilità oppure visualizzare partite tra maestri che
stanno avendo luogo in questo momento, siano esse partite di allenamento o
di un qualche torneo. Queste funzionalità sono disponibili tramite un Internet Chess
Server (ICS). Non abbiamo spazio per entrare nei dettagli della
tecnologia alla base degli ICS, ma possiamo dire che si tratta di una
tecnologia client/server basata inizialmente su una variante di
telnet. I server tengono traccia dei giocatori e di alcune loro
caratteristiche e accettano comandi che ci consentono di osservare
partite già iniziate, ad esempio, oppure di richiedere un opponente
tra quelli che in quel momento sono collegati al server. Il protocollo
ICS è poco documentato e non è standardizzato, ma è possibile trovare
alcune riferimenti, ad esempio, alla pagina che Tim Mann dedica
all'interfaccia grafica Xboard
(http://www.tim-mann.org/xboard/engine-intf.html). La data ufficiale di inizio di ICS è il 15 gennaio 1992, ad opera
di Michael Moore dell'Università dello Utah e Richard Nash (http://en.wikipedia.org/wiki/Internet_Chess_Server).
Nel luglio del 1992, il server fu spostato su una macchina all'
Università di Carnegie Mellon da John Chanak, William Kish e Aaron
Putnam. Ulteriormente, alla fine dello stesso anno, il servizio fu
rilevato da Daniel Sleator, professore all'Università di
Carnegie Mellon, che aggiunse molti miglioramenti alla versione
iniziale. Nel 1994 Sleator mise il copyright sul codice e dal 1995
cominciò a commercializzarlo, cambiandone il nome con quello di Internet
Chess Club (ICC). Questo fatto provocò una polemica all'interno della
comunità ICS, finché un gruppo di programmatori creò il Free Internet
Chess Server (FICS), una versione libera di ICC (il loro moto dice
"We do it for the game, not the money") che ancora oggi è
attiva all'URL http://www.freechess.org. ICC e
FICS possono essere considerarti i due ICS più importanti attivi
attualmente. Facciamo ora un esempio di una sessione ICS a FICS con Xboard come
client. Il collegamento viene effettuato tramite il seguente
comando: Il server freechess.org ci chiederà un nome utente e una
password. Naturalmente, prima di iniziare dovremo aver provveduto a
creare un account su http://www.freechess.org. Dopo il login,
possiamo cominciare a inserire i comandi per ricevere informazioni sui
giocatori correntemente attivi, le partite in corso, ecc. Va detto innanzitutto che possiamo chiedere informazione sui comandi impartibili
attraverso il comando help: Al login, il server FICS ci propone un elenco di news che possiamo
visualizzare in qualsiasi momento con il comando news: Per vedere l'elenco dei giocatori attivi al momento, si usa il
comando who: Al momento in cui mi sono collegato io c'erano parecchi giocatori
interessanti, inclusi, come potete vedere, alcuni Grandi Maestri con
Elo superiore a 2700 e due programmi (contraddistinti dalla
(C)).Vediamo le partite in corso: Come vedete c'è una riga per partita dove sono indicati, oltre ai giocatori
e ai relativi Elo, le condizioni di tempo accordate per la partita (tra parentesi
quadre), il tempo ancora a disposizione per i due giocatori e il
numero di mosse effettuate, con indicazione del colore che muove
(Bianco, W, o Nero, B). In questa occasione ho deciso di vedere con
Xboard la partita che stava giocando Bacrot contro il Campione del
Mondo Topalov; quindi, ho inserito: Finalmente, il comando seek ci consente di cercare un avversario
per una partita impostando le condizioni che desideriamo (tempo,
colore, ecc.), inviando una richiesta a tutti i giocatori collegati,
mentre il comando match consente di sfidare un dato utente a una
partita e il comando play permette di rispondere a un utente
che ha fatto una richiesta in precedenza (in questo caso il sistema verifica se il punteggio Elo o
la categoria è nel range richiesto dal nostro opponente). Tutte le partite giocate e/o visualizzate sono
salvabili in formato PGN passando a Xboard anche l'argomento
-saveGameFile [nomefile]. Secondo me il software libero, sia per quanto riguarda i motori di
scacchi che i database, ha un livello tecnico paragonabile ai
programmi proprietari. C'è però un ambito in cui non ha rivali, ed è
nella capacità di documentazione, avendo la
possibilità di generare documenti di qualità e di esportare partite in
formati come HTML, Postscript, DVI in notazione FAN (Figurine
Algebraic Notation). La notazione FAN è una variante della
notazione SAN (Standard Algebraic Notation) che utilizza
icone dei pezzi in miniatura invece dell'abbreviazione ASCII del
pezzo. Prendiamo come esempio la partita Kasparov-Kramnik, che abbiamo
già usato nella sezione dedicata a Scid, con lo scopo di
ottenere un documento in notazione FAN. Esportiamo questa partita con
Scid in formato LaTeX con il nome game.tex (Scid consente anche di
esportare in formato HTML, ma genera una pagina che contiene la
partita in notazione SAN), dopodiché lanciamo i seguenti comandi dalla
linea di comando: Il primo comando ci consente di generare un documento DVI che
contiene la partita in notazione FAN. È necessario che sia installato
il pacchetto tex-chess, che contiene i font per il supporto della
notazione scacchistica da parte di TeX/LaTeX. Il secondo comando
consente la visualizzazione del file DVI appena creato, mentre il
terzo crea il file Postscript a partire dal file DVI. Lo stesso
risultato si può ottenere attraverso LyX, importando il file TeX
contente la partita e generando direttamente il PS, ma su file con
grandi quantità di partite, contenenti annotazioni e varianti, a volte
questa procedura fallisce. L'utilizzo della riga di comando è più robusto. Se vogliamo mettere sul nostro sito le partite in notazione FAN,
possiamo usare latex2html: che da questo risultato: Kasparov, Gary (2838) Nel mondo degli scacchi le novità sono all'ordine del
giorno. Nuovi software e nuovi approcci vengono realizzati e provati in
continuazione. La possibilità di poter giocare con persone che vivono
all'altro capo del mondo o di collaborare con esse per costruire un
programma che un giorno "sfiderà il campione mondiale" sono
sufficientemente attraenti da coinvolgere un enorme numero di individui,
appassionati e programmatori. Altri si limitano a provare i software
creati da terzi per il semplice piacere di capire quale approccio è il
più forte: scegliere cosa fare in base alle proprie attuali conoscenze
e ai propri desideri diventa una scelta personale, soggettiva.
Spero che il lettore sia invogliato ad approfondire alcuni
degli argomenti trattati per conto proprio. |
Autorizzazione del tribunale di Brescia n. 3/2000 del 01/02/2000
Copyright 2000-2007 Messaggerie
Scacchistiche, tutti i diritti riservati