La F.A.Q. del Gruppo Scacchi e Informatica

Ultimo aggiornamento: 31/01/2001

Novita

- Aggiornati i link relativi alla mailing list.

Sommario

1. Introduzione
1.1. cosa vuol dire G6?
1.2. come si diventa membri del G6?
1.3. devo per forza essere un programmatore per entrare nel G6?
2. Motori di gioco (engines)
2.1. come posso fare una chess engine partendo da zero?
2.2. io conosco solo il <un linguaggio>... posso farlo in <un linguaggio>?
2.3. come si fa a interfacciare una chess-engine a winboard?
3. Engines e servers ICS
3.1. e' possibile usare il proprio motore anche sui server ics?
3.2. come riconosco i membri del G6 su fics?
3.3. bene ma, in pratica, come faccio a usare il mio motore su fics?
4. Il Gelo
4.1. cos'e' il gelo?
4.2. perche' tutto questo?
4.3. posso "gelare" anche io?

1. Introduzione

1.1. Cosa vuol dire G6?
E' l'acronimo di Gruppo Scacchi e Informatica= G. S.e.I.= g6 E' una Mailing List dedicata agli appassionati di programmi di scacchi, con un occhio particolare rivolto alla programmazione (creazione di motori di gioco, Interfacce grafiche, tools ecc.)

1.2. Come si diventa membri del G6?
Se leggi questo file probabilmente lo sei gia', in ogni caso per sottoscrivere la ML e' sufficiente inviare una e-mail (anche vuota) all'indirizzo g_6@yahoogroups.com

1.3. Devo per forza essere un programmatore per entrare nel G6?
Assolutamente no! Il gruppo e' nato come punto di incontro per un piccolo gruppo di programmatori italiani (da qui il tenore "tecnico" delle discussioni e di questa FAQ) ma, in generale, i membri sono semplicemente degli amanti di computer-chess.

2. Motori di gioco (engines)

2.1. Come posso creare un motore partendo da zero?
1) Fare il download dei sorgenti di un programma scuola come TSCP o FAILE o Gnuchess o Crafty (per semplicita' TSCP e FAILE sarebbero preferibili).
2) dargli un'occhiata per vedere come si fa un programma (ad esempio guardare bene la parte generazione delle mosse).
3) Buttare via tutto e partire da una pagina bianca facendo una bella funzione che data una posizione e un colore che deve muovere elenca tutte le mosse possibili (chiamiamola gen-moves). (e' una cosa fattibilissima anche da un principiante molto molto principiante).
4) Se ci sono problemi contattare il G6, siamo qui apposta.
5) Fatto il gen-moves bisogna fare il search, che sarebbe la funzione che tra tutte le mosse ne sceglie una che dovrebbe essere la migliore. E qui inizia il bello: a questo punto credo proprio che il search del programma scuola vada quasi studiato, per impararne l'algoritmo. In ogni caso se ci sono dei dubbi ... si puo' sempre chiedere aiuto sul G6 e, per chi sa l'inglese, sul CCC.
6) Solitamente si cerca di concentrarsi sull' engine trascurando del tutto la parte grafica una volta messo in piedi un programma in grado di giocare... e' un gioco da ragazzi dotarlo di un'interfaccia standard (WINBOARD).

queste sono le cose principali ... ma una volta arrivati a questo il novello chess-programmer avra' sicuramente l'esperienza necessaria per affrontare tutto il resto (hash tables, Protezione del Re, Sviluppo, Tabelle dei finali ecc.) in bocca al lupo.

2.2. Conosco solo il <un linguaggio>... posso farlo in <un linguaggio>?
In linea di massima si; trascurando il fattore prestazioni, e' possibile realizzare il proprio motore in qualsiasi linguaggio di programmazione. Per varie ragioni il linguaggio piu' diffuso in questo campo e' il C, meno frequente e' il C++, ma in giro si trovano motori scritti in assembler, pascal, java, basic e via dicendo... Per ottenere un motore compatibile con Winboard bisogna invece tenere in considerazione alcune limitazioni in piu' (vedi sotto).

2.3. Come posso interfacciare un motore a winboard?
Per ottenere un engine compatibile con Winboard il programma deve avere questi pre-requisiti:
- Deve essere applicazione Win32 nativa (questo ovviamente non vale per XBoard in ambienti Unix/Linux).
- Deve avere accesso allo standard Input/Output.

il secondo punto implica il fatto che i motori, di solito, sono delle applicazioni console; questo semplifica molto la parte di comunicazione e inoltre alleggerisce il programma, ma non e' un requisito fondamentale visto che anche programmi Windows tradizionali possono accedere allo standard I/O (persino Visual Basic, per quanto dica Tim Mann, autore di Winboard :-) ); all'interno del G6 trovate ben due esempi di questo comportamento "misto": LarsenVB e Raffaela.

In pratica la comunicazione avviene in questo modo: Winboard (l'interfaccia) attiva automaticamente un processo figlio (il motore) aprendo un doppio canale di comunicazione; con il primo invia una serie di comandi sullo standard input del motore, utilizzando come carattere di fine comando il line feed (ASCII 10), con il secondo legge i comandi che il motore gli ritorna attraverso il suo standard output. Dal punto di vista di un engine questo comporta semplicemente una fase di lettura (in linguaggio C, ad esempio, con "scanf" o "read"), una fase di parsing del comando e una fase di scrittura della risposa (esempio sempre in C, con "printf"). La documentazione completa sul protocollo di comunicazione e' inclusa nel pacchetto di Winboard nei file "engine-intf.txt", "engine-intf.html" oppure, in alternativa, sul sito di Tim Mann all'indirizzo: http://www.research.digital.com/SRC/personal/mann/xboard/engine-intf.html
Qualche esempio di codice e' disponibile invece nella sezione Downloads.

3. Engines e servers ICS

3.1. E' possibile usare il proprio motore anche sui server ICS?
Certamente, gli engine Winboard si prestano molto bene ad essere usati sui server ICS e infatti sono molto diffusi (forse anche troppo ;-)); per quanto riguarda il G6, il server adottato e' freechess.org (FICS) ed e' stato anche scelto ufficiosamente un canale come punto di incontro: e' il canale 166, per entrare basta digitare al prompt di FICS il comando "+ch 166".
Per un esempio pratico vedi il punto 3.3

3.2. Come riconosco i membri del G6 su FICS?
Ecco un elenco di account del G6, membri e relativo motore:

Nome Account Account del motore
Alessandro Damiani Spaceball POWERHOUSE (=Fortress)
"BArrYZ" Asimovzz  
Carmelo Calzerano ciccio Leila
Ciro vigocontrito  
Claudio Della Corte Cirlus ESC
Francesco Rinaldi frengo  
Gianluca Figus JackFigus  
Gianluigi Masciulli Withead ChessGolem (=Golem)
Graziano NightEagle  
"ggiovannini" Godel  
Luca Dormio LarsenB LarsenVB
Marco Grella JohnnyNN  
Marco Laurenzano Pierosincero  
Matteo Viola Stormlord  
Stefano Gemma Icaro Raffaela

3.3. bene ma, in pratica, come faccio a usare il mio motore su FICS?
Come sempre la documentazione completa e' distribuita con Winboard, nel file zippy.README, oppure e' on line all'indirizzo http://www.research.digital.com/SRC/personal/mann/xboard/zippy.README e' consigliabile inoltre fare riferimento all' help di Winboard per la sintassi e il significato delle opzioni della riga di comando.

Ecco alcune indicazioni:
Come prima cosa occorre lanciare Winboard in modalita' 'zippy', questo si ottiene attraverso il parametro '-zp':

winboard.exe -zp -ics -fcp "myengine" ecc.

e' anche necessario specificare le impostazioni relative al server desiderato, come segue:

winboard.exe -zp -ics -fcp "myengine" -icshost freechess.org -icsport 5000 -icshelper timeseal ecc.

inoltre e' possibile creare un file aggiuntivo (diciamo "myenginelogon.ini") in modo da attivare automaticamente la procedura di autenticazione sul server:

winboard.exe -zp -ics -fcp "myengine" -icshost freechess.org -icsport 5000 -icshelper timeseal -icslogon myenginelogon.ini

una valida alternativa alla riga di comando, che consiglio personalmente, e' quella di crearsi un file di inizializzazione personalizzato con tutte queste opzioni che, in avvio, vanno a rimpiazzare quelle definite nel file standard "winboard.ini"; questo file (diciamo "myengine.ini") e' attivabile cosi':

winboard.exe -zp -ics -fcp "myengine" @myengine.ini

un esempio di configurazione tipica, con ulteriori commenti, si trova nella sezione Download

L'interazione con il server FICS e' del tutto trasparente, dal punto di vista dell'engine, in quanto e' sufficiente supportare il set minimo di comandi winboard per essere in grado di avere un motore che gioca in maniera del tutto automatica; in pratica dovrebbero ridursi a:

new/white/black/go/quit

poi sarebbero consigliabili anche: level per impostare correttamente il tempo di gioco. force per essere in grado di riprendere le partite interrotte.
e' possibile inviare comandi direttamente al server FICS utilizzando questa sintassi:

tellics <comando> <parametri>

Winboard non fara' nient'altro che da filtro, inviando al server il comando *meno* la stringa "tellics "; ad esempio, se vogliamo rispondere ad una richiesta di patta del nostro avversario (comando "draw"), possiamo usare:

printf("tellics decline");
printf("tellics say sorry, my engine wants to play some more!");

4. Il Gelo

4.1. cos'e' il Gelo?
il Gelo è il G-Elo, cioè l' Elo calcolato da G-ianluigi, autore di G-olem, per il G-6, nel tentativo di dare un rating, anche se non ufficiale almeno consistente, ai "nostri" programmi, che attualmente sono:

Esc
Fortress (quattro o cinque spanne sopra gli altri!)
Golem
LarsenVB
Leila (ex PCChessII)
PcChessII (mantenuto separatamente da Leila)
Raffaela (non ancora "gelato" perchè manca il controllo di tempo adatto)
Ringo (non ancora in grado di essere "gelato")

A questi abbiamo aggiunto qualche programma esterno per completezza e per misurare meglio i miglioramenti dei programmi:

Tscp15
Faile06
Pierre17

4.2. Perche' tutto questo?
Beh, la speranza e' di aiutare nello sviluppo dei programmi rivelando e quantizzando gli eventuali progressi dei nostri programmi.

4.3. Posso "gelare" anche io?
Se qualcuno ha un po' di ore macchina libere può, anzi DEVE ;-) , contribuire!! Per fare giocare i programmi sulle diverse macchine in condizioni simili, usare la funzione bench del Tscp (lanciate Tscp e scrivete bench nel programma): questo vi darà (topo tre iterazioni) un tempo migliore, diciamo T. Dovrete impostare: TP = (15/22) * T dove TP sono i MINUTI A TESTA PER TUTTA LA PARTITA. Questo perchè Gianluigi ha un bench di 22 secondi e fa partite da 15 minuti a testa.

Dove/quando possibile salvare anche i .log dei programmi e il .debug di Winboard. Il tutto lo si può mettere nella pagina Files->Gelo raggiungibile dalla home page della ML.

Nel caso si "gelasse" Tscp usare la versione modificata da Gianluigi che si trova sulla pagina della ML->Files->Gelo (è l'eseguibile che trovate nella directory, non quello che c'è nel file zippato, dove ci sono solo i sorgenti modificati).
Il documento completo con le indicazioni per il Gelo si trova nella sezione Gelo