Internet Chess Club………………………………119
Total Page:16
File Type:pdf, Size:1020Kb
Università degli studi di Bologna FACOLTÀ DI SCIENZE MATEMATICHE, FISICHE E NATURALI Corso di Laurea in Informatica Materia di Tesi: Laboratorio di Ingegneria del Software PROGETTO E REALIZZAZIONE DI UN PROGRAMMA CLIENTE PER INTERNET CHESS CLUB Tesi di Laurea di: Relatore: MARCO COLLAREDA Prof. PAOLO CIANCARINI Parole chiave: servizi Internet, client, server, scacchi, Internet Chess Server Anno Accademico 2001-2002 Sessione autunnale 2 Indice ABSTRACT……………………………………………… 9 1 Introduzione………………………………………….….. 13 1.1 Perché gli scacchi?…………………………………………. 13 1.2 Breve storia dei motori scacchistici………………………… 14 1.3 Ma si tratta davvero di intelligenza artificiale?…………….. 17 1.4 Deep Blue…………………………………………………… 18 1.5 Scacchi e computer..……………………………………….. 19 2 Caratteristiche di un programma di scacchi………….. 21 2.1 In quali problemi ci si imbatte?……………………………. 21 2.2 Gli algoritmi………………………………………………… 24 2.2.1 L’algoritmo MinMax…………………………………………. 24 2.2.2 Alpha-Beta pruning…………………………………………… 26 2.2.3 L’ordinamento dei nodi……………………………………….. 28 2.2.4 Mosse killer…………………………………………………… 29 2.2.5 History Heuristic………………………………………………. 29 2.2.6 MVV/LVA (Most Valuable Victim/Least Valuable Attacker).. 29 2.2.7 Iterative deepening……………………………………………. 30 2.2.8 L’algoritmo PVS (Principal Variation Search)………………... 30 2.2.9 Generazione completa o generazione incrementale?…………. 31 2.2.10 L’effetto orizzonte…………………………………………….. 31 3 2.2.11 Selective extensions………………………………………….… 32 2.2.12 L’algoritmo delle mosse nulle……………………………….… 32 2.3 Il problema fondamentale………………………………….…….33 2.4 La funzione di valutazione……………………………………...34 2.4.1 Il materiale……………………………………………………..……34 2.4.2 La mobilità dei pezzi.………………………………………………35 2.4.3 Posizione del materiale……………………………………….…….35 2.4.4 I pedoni…………………………………………………………….35 2.4.5 Bonus e penalità…………………………………………………….36 2.4.6 Definire una buona funzione………………………………….….…37 2.5 Tabella delle trasposizioni……………………………………..37 2.6 La rappresentazione della scacchiera…………………………..38 2.6.1 Bitboard.……………………………………………………………38 2.6.2 Esempi……………………………………………………………..40 2.6.3 Rappresentazione 12×10…………………………………….....…..42 2.6.4 Informazioni sullo stato del gioco…………………………….….…43 2.7 Generazione di mosse pseudo-legali……………………….……43 2.8 Le aperture………………………………………………………44 2.9 Motori scacchistici………………………………………………45 2.10 Una lista di motori scacchistici…………………………………46 3 GNU Chess..….……………………………………….… 49 3.1 Generalità…………………………………………………….…49 3.2 La rappresentazione della scacchiera………………………. 50 3.3 Generazione di mosse pseudo-legali……………………………52 3.4 L’albero di mosse…………………………………………….…55 3.5 Gli algoritmi………………………………………………….…56 3.6 Euristica della funzione di valutazione…………………………57 3.7 Tabelle delle trasposizioni……………………………………..60 3.8 Libro di aperture………………………………………………..63 3.9 Il formato delle mosse………………………………………….64 3.10 Features…………………………………………………………64 3.11 Alcuni comandi ………………………………………………..65 4 4 Crafty……………………………………………………. 67 4.1 Generalità…………………………………………………… 67 4.2 La rappresentazione della scacchiera……………………… 68 4.3 Generazione di mosse pseudo-legali………………….…… 69 4.4 L’albero di mosse…………………………………………… 70 4.5 Gli algoritmi………………………………………………… 71 4.6 Symmetric Multiprocessing………………………………… 73 4.7 Euristica della funzione di valutazione……………….……. 73 4.8 Tabelle delle trasposizioni…………………………………. 77 4.9 Le Tablebases……………………………………………… 79 4.10 Libro di aperture……………………………………………. 80 4.11 Features…………………………………………………….. 83 4.12 Alcuni comandi…………………………………………….. 86 5 Interfacce grafiche……………………………………… 89 5.1 Cos’è un’interfaccia grafica per un programma di scacchi… 89 5.2 Come funziona……………………………………………… 90 5.3 I servizi offerti……………………………………………… 91 5.4 Alcune interfacce grafiche…………………………………… 91 6 Winboard/Xboard………………………………….…… 97 6.1 Aspetti generali…………………………………………….. 97 6.2 Funzioni……………………………………………………. 98 6.3 Winboard/Xboard e motori scacchistici……………………. 100 6.3.1 Come avviene la comunicazione: pipe………………………… 101 6.3.2 Segnali………………………………………………………… 103 6.3.3 Messaggi da Winboard/Xboard al programma………………… 103 6.3.4 Messaggi dal programma a Winboard/Xboard………………… 105 5 6.4 Winboard/Xboard e ICS……………………………………. 106 6.4.1 Stabilire una connessione……………………………………… 107 6.4.2 Il parsing dell’output dell’ICS………………………………... 108 6.5 Zippy………………………………………………………... 109 6.6 CMail………………………………………………………. 111 7 Internet Chess Server…………………………………... 113 7.1 Cosa sono…………………………………………………… 113 7.2 Il login……………………………………………………… 113 7.3 Quali servizi offrono………………………………………... 114 7.4 La funzione timestamp/timeseal…………………………….115 7.5 Alcuni Internet Chess Server………………………………. 116 8 ICC – Internet Chess Club………………………………119 8.1 Introduzione………………………………………………… 119 8.2 Storia di ICC…………………………………………………119 8.3 Il software BlitzIn……………………………………………120 8.4 Altri tipi di interfaccia……………………………………… 120 8.5 La connessione………………………………………………121 8.6 Giocare una partita su ICC…………………………………. 122 8.6.1 Cercare uno sfidante…………………………………………… 122 8.6.2 La partita..……………………………………………………… 125 8.7 Comunicare su ICC………………………………………… 127 8.7.1 Messaggi personali: il comando tell…………………………… 127 8.7.2 Canali…………………………………………………………. 128 8.7.3 Messaggi………………………………………………………. 129 8.7.4 Comunicare durante una partita………………………………. 129 8.8 Informazioni sugli utenti…………………………………… 130 8.9 Osservare ed esaminare le partite……………………………131 6 8.10 Il formato dei dati di output………………………………… 132 8.10.1 Livello 1………………………………………………………. 132 8.10.2 Livello 2………………………………………………………. 133 9 Sviluppo di un programma per il salvataggio automatico di file PGN da ICC…………………………135 9.1 Introduzione a PGN-Saver…………………………………. 135 9.2 Compilare e lanciare il programma…………………………..136 9.3 Comandi……………………………………………………..136 9.3.1 Salvare le partite………………………………………………. 136 9.3.2 Il formato del file in input……………………………………… 138 9.3.3 Rimozione di handle incorrette………………………………… 140 9.3.4 Tipi di partite da salvare……………………………………….. 140 9.3.5 Intervallo tra connessioni……………………………………... 143 9.3.6 Numero di connessioni………………………………………… 143 9.3.7 Tentativi di connessione………………………………………. 144 9.3.8 File di log……………………………………………………… 144 9.3.9 Help e valori di default……..…………………………………. 146 9.3.10 PGN-Saver e il demone cron……………………………………147 9.3.11 Come uscire dal programma…………………………………… 149 9.4 I nomi dei file………………………………………………. 150 9.5 Le basi del programma………………………………………151 9.5.1 Il comando history…………………………………………….. 151 9.5.2 Il comando smoves……………………………………………. 152 9.5.3 Datagram di livello 1………………………………………….. 153 9.6 Il dialogo col server……………………………………….…155 9.7 La tabella history…………………………………………… 157 9.8 Nomi di file: concatenazione……………………………….. 158 9.9 File di log: creazione e scrittura……………………………. 158 9.10 Metodo per il salvataggio delle partite………………………159 7 10 Tool…………………………………………………….. 161 10.1 Viewer e editor…………………………………………….. 161 10.2 Database management……………………………………... 163 10.3 Scacchi via e-mail………………………………………….. 164 10.4 Altri tool…………………………………………………… 164 11 Conclusioni……………………………………………. 167 11.1 Scacchi e computer: conclusioni…………………………... 167 11.2 PGN-Saver: commenti sul lavoro svolto…………………... 167 11.3 Prospettive future…………………………………………... 168 APPENDICE – Codice di PGN-Saver…………………… 171 A.1 Makefile…………………………………………………… 172 A.2 stringfunct.h……………………………………………. 173 A.3 stringfunct.c……………………………………………. 174 A.4 cmd.h………………………………………………………. 177 A.5 cmd.c………………………………………………………. 178 A.6 history_parser.h……………………………………….. 192 A.7 history_parser.c……………………………………….. 193 A.8 iccfunct.h……………………………………………….. 199 A.9 iccfunct.c……………………………………………….. 200 A.10 connection.h…………………………………………….. 207 A.11 connection.c…………………………………………….. 208 A.12 def.h…………………………………………………….… 212 A.13 main.c……………………………………………………... 214 Bibliografia e riferimenti…………………………………. 219 8 ABSTRACT Chess has been for more than fifty years one of the most interesting game for the computer scientists. Much work has been done over the years and all of the researchers in the game theory field have, sooner or later, applied their algorithms to chess. Studies about chess programs became concrete during the post-war period, thanks to the contribution of scientists such as Claude Shannon and Alan Turing. From then on chess engines improved a lot, until in 1997 the most powerful chess program managed to defeat the World Champion. From the computer science point of view chess is such an interesting game because its application on a computer is a trade-off between purely mechanical algorithms and hardware limitations. For this reason a chess program must use some methods to override such obstacle and this is what involved the researchers in Artificial Intelligence field. Recently, as computer technology evolved, we have seen the diffusion of many programs, even pretty advanced, applied to chess. This is not true only for chess engines, but for graphical interfaces and several kinds of tools as well. The aim of this paper is, first of all, to show the structure of a chess engine; we will illustrate the principles of the most used algorithms, of some data structures used to make programs be faster and faster, and of all those techniques which over the years have been frequently used in most of chess programs. 9 One of our purposes is to analyse two existing chess engines, showing their architecture, the algorithms and the data structures they are made up of, play strategies, the methods and the techniques they implement. Thereafter, we will see how the interest has moved from chess engines to applications. On the net, in fact, there are lots of programs that implement almost any service connected