Ultimo aggiornamento: 31/01/2001
- Aggiornati i link relativi alla mailing list.
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.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.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.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