forked from phenri/glaurung
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathReadme.txt
360 lines (268 loc) · 14.6 KB
/
Readme.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
1. Introduction
---------------
Glaurung is a free UCI chess engine. It is not a complete chess
program, but requires some UCI compatible GUI (like XBoard with
PolyGlot, eboard, José, Arena, Sigma Chess, Shredder, Chess Partner,
or Fritz) in order to be used comfortably. Read the documentation for
your GUI of choice for information about how to use Glaurung with your
GUI.
Glaurung 2 is a completely rewritten version of Glaurung. Apart from
the parallel search code, almost no code is shared with Glaurung
1.2.1, the previous stable version. The new program is clearly
stronger than the old, but has a less attractive style of play,
because there are still a few major holes in its evaluation function
(most notably space and development).
This version of Glaurung supports up to 8 CPUs, but has not been
tested thoroughly with more than 2. The program tries to detect the
number of CPUs on your computer and set the number of search threads
accordingly, but please be aware that the detection is not always
correct. It is therefore recommended to inspect the value of the
"Threads" UCI parameter, and to make sure it equals the number of CPU
cores on your computer.
2. Files
--------
This distribution of Glaurung consists of the following files:
* Readme.txt, the file you are currently reading.
* Copying.txt, a text file containing the GNU General Public
License.
* src/, a subdirectory containing the full source code, including a
Makefile that can be used to compile Glaurung on Unix-like
systems. For further information about how to compile Glaurung
yourself, read section 4 below.
* MacOSX/, a subdirectory containing excutables for Apple Macintosh
computers running Mac OS X 10.4 (Tiger) and newer. There are two
executables, one for OS X 10.4, and one for OS X 10.5. The
executable for OS X 10.4 will work in 10.5 as well, but the one
for 10.5 is faster.
* LinuxX86/, a subdirectory containing 32-bit and 64-bit x86 GNU/Linux
executables (not available yet).
* Windows/, a subdirectory containing 32-bit and 64-bit Windows
executables.
* polyglot.ini, for using Glaurung with Fabien Letouzey's PolyGlot
adapter.
3. Opening books
----------------
This version of Glaurung has experimental support for PolyGlot opening
books. For information about how to create such books, consult the
PolyGlot documentation. The book file can be selected by setting the
UCI parameter "Book File".
A book file contributed by Salvo Spitaleri can be found on the
Glaurung web page.
4. Compiling it yourself
------------------------
On Unix-like systems, it should usually be possible to compile
Glaurung directly from the source code with the included Makefile.
The exception is computer with big-endian CPUs, like PowerPC
Macintoshes. Some of the bitboard routines in the current version of
Glaurung are endianness-sensitive, and won't work on a big-endian CPU.
Ensuring that the line with #define USE_32BIT_ATTACKS" near the top
of bitboard.h is commented out should solve this problem.
Commenting out the line with "#define USE_32BIT_ATTACKS" near the
There is also a problem with compiling Glaurung on certain 64-bit
systems, regardless of the endianness. If Glaurung segfaults
immediately after startup, try to comment out the line with
"#define USE_FOLDED_BITSCAN" near the beginning of bitboard.h and
recompile.
Finally, even if Glaurung does work without any changes on your
computer, it might be possible to improve the performance by changing
some of the #define directives in bitboard.h. The default settings
are optimized for 64-bit CPUs. On 32-bit CPUs, it is probably better
to switch on USE_32BIT_ATTACKS, and to use BITCOUNT_SWAR_32 instead of
BITCOUNT_SWAR_64. For computers with very little memory (like
handheld devices), it is possible to conserve memory by defining
USE_COMPACT_ROOK_ATTACKS.
5. History
----------
2007-05-06: Glaurung 2 - epsilon
--------------------------------
The first public release, and the first version of my new program
which is able to match the old Glaurung 1.2.1 on a single CPU. Lots
of features and chess knowledge is still missing.
2007-05-10: Glaurung 2 - epsilon/2
----------------------------------
This version is very close to 2 - epsilon. The major changes are:
* A number of compatibility problems which appeared when trying to
compile Glaurung 2 - epsilon on various operating systems and CPUs
have been solved.
* Fixed a major bug in the detection of rooks trapped inside a
friendly king.
* Added knowledge about several types of drawn endgames.
* Fixed a few FRC related bugs. FRC now works, but because of
serious holes in the evaluation function the program plays very
badly.
* A slightly more sophisticated king safety evaluation.
2007-06-07: Glaurung 2 - epsilon/3
----------------------------------
The first public version with support for multiple CPUs. Unless you
have a dual-core (or better) computer, use Glaurung with a PolyGlot
book, or runs games with ponder on, you may want to skip this version,
which is almost certainly no stronger than 2 - epsilon/2 when running
on a single CPU. The main changes compared to the previous version
are:
* Parallel search, with support for 1-4 CPUs. The program currently
always allocates a separate pawn hash table and material hash
table for four threads, which is a pure waste of RAM if your
computer has just a single CPU. This will be fixed in a future
version.
* Fixed a bug in book randomization. When using Polyglot books, the
previous version would always select exactly the same move in the
same position after a restart of the program. Thanks to Pavel
Háse for pointing this out.
* Fixed a UCI pondering bug: Glaurung no longer instantly prints its
best move when the maximum depth is reached during a ponder
search, as the previous version did. According to the UCI
protocol, it is not allowed to print the best move before the
engine has received the "stop" or "quit" command.
* Additional search information: The new version displays hash
saturation and the current line(s) of search.
* Several minor bug fixes and optimizations in the search and
evaluation.
2007-06-08: Glaurung 2 - epsilon/4
----------------------------------
A bugfix release, with only a single important change:
* Fixed a very serious pondering bug. As pointed out by Marc
Lacrosse, the previous version would lose on time in almost every
single game with pondering enabled. The new version handles
pondering correctly (or so I hope). When playing with ponder
off, the new version is identical to version 2 - epsilon/3.
2007-06-25: Glaurung 2 - epsilon/5
----------------------------------
Another minor update, including the following improvements and bug
fixes:
* As Werner Schüle discovered, the previous version would sometimes
stop thinking and lose on time right before delivering checkmate
(which is of course a very unfortunate moment to lose on time).
I haven't been able to reproduce Werner's problem on my computer
(probably because I run a different OS), but I have fixed the bug
which I suspect caused the time losses. I hope the time losses
will no longer occur with 2 - epsilon/5.
* The program is now slightly less resource-hungry on computers
with less than 4 CPU cores: The previous version would always
allocated separate pawn and material hash tables for four
threads, even when running on a single-core CPU. The new version
only allocates pawn and material hash tables for the threads
which are actually used.
* A minor reorganization of the memory layout has made the parallel
search about 10% more efficient (at least on my computer, but the
results are likely to vary considerably on different systems).
* The Intel Mac OS X binary is much faster than before, thanks to
the Intel C++ compiler (previous versions were compiled with
GCC).
* A few other very minor bug fixes and enhancements.
2007-11-21: Glaurung 2.0
------------------------
The first stable (or so I hope) and feature-complete version of
Glaurung 2. The following are the main changes compared to the
previous version:
* The license has been changed from GPL version 2 to GPL version 3.
* MultiPV mode.
* Support for the "searchmoves" option in the UCI "go" command.
This means that it is possible to ask Glaurung to exclude some
moves from its analysis, or to restrict its analysis to just a
handful of moves selected by the user. This feature must also be
supported by the GUI under which Glaurung is run. Glaurung's own
GUI does currently not support this feature.
* Chess960 support now works. The program still plays this game
very badly, because of lack of opening knowledge.
* Much more aggressive pruning in the last few plies of the main
search.
* Somewhat better scaling on multi-CPU systems, and support for up
to 8 CPUs.
* Lots of new UCI parameters.
* Improved time managment, especially in games with pondering on
(i.e. when the engine is allowed to think when it's the
opponent's turn to move).
* Some evaluation improvements, and some new basic endgame
patterns.
* The program should no longer crash if the game lasts longer than
1000 plies.
* Many minor bug fixes and other tiny improvements throughout the
code.
* More generously commented code, and numerous cosmetic changes in
coding style.
2007-11-22: Glaurung 2.0.1
--------------------------
* Fixed (or so I hope) a bug which would occasionally cause one of
the search threads to get stuck forever in its idle loop.
2008-05-14: Glaurung 2.1
------------------------
This version contains far too many changes to list them all, but most
of them are minor and cosmetic. The most important and noticable
changes are a lot of new UCI parameters, and many improvements in the
evaluation function. The highlights are:
* Extensive changes in the evaluation function. The addition of
king safety is the most important improvement, but there are also
numerous little improvements elsewhere in the evaluation. There
is still much work left to do in the evaluation function, though.
Space and development are still missing, and the tuning is likely
to be very poor. Currently, the program is optimized for an
entertaining style rather than maximum strength.
* More accurate forward pruning. The previous version used the
null move refutation move to improve the pruning accuracy by
means of a very simple trick: It did not allow pruning of any
moves with the piece captured by the null move refutation move.
In Glaurung 2.1, this has been enhanced: It does not allow
pruning of moves which defend the destination square of the null
move refutation move, nor of moves which block the ray of the
piece in the case that the moving piece in the null move
refutation move is a slider.
* More conservative use of LMR at PV nodes. The previous version
searched the first 6 moves with full depth, 2.1 by default
searches the first 14 moves with full depth (but there is a new
UCI parameter for configuring this). I am not at all sure
whether this is an improvement. More thorough testing is
required.
* Feedback from the evaluation to the search. The search passes an
object of type 'EvalInfo' to the eval, and the eval fills this
struct with various potentially useful information (like the sets
of squares attacked by each piece type, the middle game and
endgame components of the eval, etc.). At the moment, almost
none of this information is actually used by the search. The
only exception is that the evaluation function is now used to
adjust the futility pruning margin in the quiescence search.
* Less extensions. This hurts the programs performance a lot in most
test suites, but I hope it improves the branching factor in deep
searches.
* A very long list of new UCI parameters, especially for tuning the
evaluation.
2008-12-20: Glaurung 2.2
------------------------
Most of the work in this version was done in May and June 2008, in
preparation for the Open Polish Computer Chess Championships in the
end of June. In my last-minute tests before the tournament, it seemed
that the development version performed worse than Glaurung 2.1; I
therefore used version 2.1 in the OPCCC. More recently, I have
discovered to my great surprise that the development version *does*
seem to play stronger than 2.1 -- something must have been wrong with
my tests in June. I've therefore decided to release the version that
didn't play in Poland, with a handful of very minor improvements and
bug fixes done in December 2008.
Here are the main changes compared to version 2.1:
* Space evaluation. This is probably the most significant
improvement, and makes Glaurung play more actively and
aggressively, particularly in the opening.
* Considers "rook brakes" in passed pawn evaluation.
* Some new basic endgame knowledge was added.
* Uses only the approximate eval, and not the full eval, for
razoring. This looks risky, but seems to work OK in practice.
This idea was stolen from Marco Costalba's new chess engine
"Stockfish".
* Lots of minor bug fixes and parameter changes in the search and
evaluation.
6. Terms of use
---------------
Glaurung is free, and distributed under the GNU General Public License
(GPL). Essentially, this means that you are free to do almost exactly
what you want with the program, including distributing it among your
friends, making it available for download from your web site, selling
it (either by itself or as part of some bigger software package), or
using it as the starting point for a software project of your own.
The only real limitation is that whenever you distribute Glaurung in
some way, you must always include the full source code, or a pointer
to where the source code can be found. If you make any changes to the
source code, these changes must also be made available under the GPL.
For full details, read the copy of the GPL found in the file named
Copying.txt.
7. Feedback
-----------
The author's e-mail address is [email protected]