-
Notifications
You must be signed in to change notification settings - Fork 17
/
ChangeLog.txt
413 lines (371 loc) · 22.9 KB
/
ChangeLog.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
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
ChangeLog
=========
20240817 (release 2024-08-17) :
- Another improvement for search parameters with OpenBench's spsa tuner
- New network nn-bc638d5ec9-20240730.nnue
- Introduce correction history for better static eval
- Introduce cache (Finny tables) for faster accumulator updates
- Double extensions for very singukar moves
- Some fixes
20240112 (release 2024-01-12) :
- Improved search parameters with OpenBench's spsa tuner
- Various speed improvements by fixing and refining accumulator updates
- Improve mate finding with and without using tablebases
- Fix output of MultiPV mode
- Some few search improvements
- ARMv6 and ARMv8.2+dotprod now supported
20230918 (release 2023-09-18) :
- Allows to play various NNUE architectures and input dimensions
- Reads and writes LEB128 compressed network files
- New network nn-c257b2ebf1-20230812.nnue
- Some fixes on the training material generator
- LMR tweak based on fails high of child nodes
- Score output scaling based on stats processed with https://github.com/vondele/WLD_model
- Compiles for x86-32 now
20230410 (release 2023-04-10) :
- New option 'LimitNps' to limit speed (and strength) of the engine
- New default network nn-fdccaaabd3-20230314.nnue
- Fix performance problem reading big tablebase files in Linux
- Some fixes to avoid blunders in won (TB-)endgames using many threads
- TT access now uses a pointer to entry instead of direct read
- Measure and log delay of engine and communication with GUI
- Some small improvements in search (history extension, no tt move reduction)
- perft is now 50% faster
- Additional native x64 binary is now built avoiding even SSE2 code (for debugging purpose)
- Support for Intel icx compiler which creates builds even faster than Clang
20221203 (release 2022-12-03) :
- Bugfix for MultiPV which was completely broken in 20221120
20221120 (release 2022-11-20) :
- New default network nn-5e6b321f90-20221001.nnue using a new archtitecture
- Preserving compatibility to old networks
- Support for (de-)compressing network files using zlib
- Fixed a bug probing 7-men-dtz files using the wide extension
- Prevent flooding UCI output in low depth
- Small improvements in search (pruning, cut nodes)
- Several fixes (crash when default net missing, multi-pv output)
- Implemented cross-compilation fpr Android (thanks go to Archimedes)
20220813 (release 2022-08-13) :
- Time management improvements:
+ Plays movetime mode respecting move overhead
+ More flexible time usage depending on nodes spending on best move
+ Plays very short time controls like 1+0.001 without time forfeits now
+ Better support for nodes based time control
+ Avoid getting low on time in moves/time control
- New default network nn-b1c332ae1d-20220613.nnue
- Improve endgame draw detection when playing withou tablebase
- Contempt (default 0) and rating based contempt (triggered by GUI using UCI_RatingAdv)
- Improved logging ('..._app' for appending, '..._pid' for concurrent loggin using the process id)
- Speed improvements (1-3% on x86, > 10% on Arm/Neon)
- Several fixes
20220223 (release 2022-02-23) :
- Several new and improved networks by successful training (still the Nodchip/S. Vieri fork with several modifications)
+ using > 3 billion completely shuffled positions now
+ scored by iteratively improved networks
+ created by starting with several books like Stefan Pohls UHO
+ pre-testing every epoch's network, not only the loss-decreasing nets
- New binpack encoder/decoder; full support for converstion between binpack, sfen/bin and plain
- Fix for DFRC (double fisher random chess)
- New -uci parameter to feed the engine with UCI commands for batch mode (use 'wait' to let search finish)
- Use late move reduction for tactical moves
- New UCI option 'LogFile' to log UCI communication and SDEBUG/TDEBUG output
- Several fixes: Mates in multi-pv, cpuid detection, embedding networks, ...
2021 (release 2021-12-31) :
- Switch to a date-based versioning
- Better use of transposition table like saving fail high in probcut
- Improve reductions based on hash move
- Removed pruning of moves with bad counter history
- Futility pruning retuned
- Make use of bmi1 and lzcnt cpu instructions
- Scale nnue evaluation with game phase
- Use a per-threatened-square move history table (idea by Koivisto)
- Some fixes for MultiPV
- Use less time and less moves to mate
- Implement binpack format for generating training data
- Export network is possible now
2.2 (release 2021-07-07) :
- New default network created with trainingdata from 2.1 and lambda 0.4
- Some speed improvements
- Fixed segfaults when GUI stops unexpected
- Makefile supports more platforms now including x86-64-AVX512 and ARM64
- Implemented penalty for FRC "cornered blocked bishop"
- 'go searchmoves' is supported now
- Supports polyglot opening books via UCI options BookFile, BookDepth, BookBestMove
2.1 (release 2021-04-14) :
- New default network created with trainingdata from 2.0.1 using better depth and fixed gensfen code
- Expose last NNUE layer and scaling factor to UCI options via EVALOPTIONS and tuned scaling with Kiudee tools
- NNUE updates slightly faster by using differential updates up to the costs of a full update if possible
- Better / faster mating by avoiding stupid sacs in TB positions and disabling some pruning when mate was discovered
- Don't display full PV when this line is already refuted in a fail low or fail high
- UCI option NnueNetPath uses "Default" for the current net to avoid GUIs reconfiguration with a network change
- Faster sorting of quiet moves
- Some fixes in the Makefile e.g. for MacOS
- Fixed SSSE3 detection
- Makefile can create binary for SSE2+POPCNT now (e.g. for AMD Phenom II)
2.0.1 (release 2021-02-03) :
- Fixed KBNvK endgame.
2.0 (release 2021-01-27) :
- Improved / fixed futility pruning
- Added support for large pages in Windows
- Improved speed of NNUE evaluation
- Switch to handcrafted evaluation for positions with onesided psq
- Trained a new net based on Rubi evaluation using last net
- Improved gensfen: Book support, more parameters
- Fix for native msys2 compilation
- SDEBUG fixes
1.9 (release 2020-11-25) :
- Implement NNUE evaluation code (standard SF flip and mirror format are supported)
- Trained a net based on Rubi handcrafted evaluation and some data based on first-iteration net
- Texel tuner has some more options now and an interactive interface
- Support for search parameters exposed to UCI options (#define SEARCHOPTIONS)
- Tuned LMP parameters using the kiudee tuning tools
- Don't initialize bestscore with the positions static evaluation
- Implemented history heuristic for tactical moves to support move ordering and reduction
- Evaluation: Penalty for bad rooks without castle right
- Small fix in the endgame scaling
- Fix in MultiPV mode
1.8 (release 2020-08-15) :
- New BMI2 binary using the pext instruction for slider attacks
- Some tests and warnings if the hardware matches the binary to avoid bad performance and crashed by not supported cpu instructions
- Evaluation of discovered attacks against queen
- Evaluation of discovered slider attacks against king area
- Improved evaluation of (un-)opposed isolated/backward pawns
- Small evaluation fix for FRC
- History extension with dynamic update of threshold to avoid depth explosion
- Tweak on the probcut pruning
- Small tweak on the time management using different time depending on ponder hit
- Small tweak/simplifiction in the aspiration window handling
- Small tweak on history aging
- Tweak on null move pruning returning beta instead of score of null move search
- Speed optimizations by better memory alignment
- Compiler flag to expose eval parameters as UCI options usefull for MEA/NICE testing
- Improved search debug
- Fix for extreme positions like the "9-queens"
- Finally fixed the "stuck at depth 1" problem that should have been fixed in 1.7.1 but wasn't
1.7.3 (no-release 2020-05-11 for TCEC S18) :
- Added FRC/Chess960 (playing quite bad for now)
- Faster move generation esp. pawn moves
- Evaluate backward and isolated pawns with respect to their file (idea by Ed Schröder)
- Make pawn hash aligned to cache line
1.7.2 (release 2020-04-27) :
- Fixed a bug in the test for ep capture moves being legal
- Fix for Android compilation
1.7.1 (release 2020-04-20) :
- Fixes a bug that in some rare cases lets the root search get stuck at depth 1 with a failing low move from the tt
1.7 (release 2020-04-19) :
- moveGivesCheck handles discovered checks now
- Several fixes in the PVS logic (was unchanged since 0.4 release and quite buggy)
- Added evaluation for minors protected behind pawns, bishop center control and knight outposts
- Fix for the (rare) bug regarding undetected 3-fold in or following root move
- Introduce some basic endgame evaluation interface; so far only used for the KBNvK endgame
- Support for Clang compiler now in the general Makefile
- Several fixes regarding the UCI interface (nps overflow, wrong scores at fail high/low)
- Several improvements in the tuner (e.g. correlation of parameters)
- Some improvements for transposition table (save in qsearch, aligned allocation, support for Linux huge pages, 16bit hash signature)
- New search debugging code (enabled via SDEBUG)
- Gerate epd with special endgame positions via new parameter '-generate'
- Moved time management to main search thread and removed the time management thread
- Fixed a bug in the evaluation of potential passed pawns
- Do not reset history stats at every search but only at ucinewgame
- Don't return tt value at PV node
- Avoid null moves in pawn endgames, extend capture moves that lead to pawn endgames (solves some bad endgames played by 1.6)
1.6.1.1 (release 2020-01-11 for TCEC S17) :
- King danger eval tuned
1.6.1 (release 2020-01-11) :
- Statistic for several search features enabled via STATISTICS
- Some lmr tweaks based on analyzing this statistics
- Fixed some bugs in the tuner and retuned several parts of evaluation parameters
- Evaluate complexity of endgames (idea by SF and several other engines)
- OpenBench compatibility
- Simplification in repetition detection
- Fix in 50-moves detection
- Bench mode can be run on epd files and test for bestmove detection
- Enginetest mode can print static evaluation now for comparison
1.6 (release 2019-10-15) :
- Support for 7-men Syzygy tablebase
- Improved time management and fixed a related bug causing time violations in some special positions
- Faster evaluation after null move
- Removed old and obsolete repetition hash table
- Reintroduce counter move as third preferred quiet move
- Evaluate penalty for pawns on same color as bishop
- Evaluate bonus for rook on rank 7
- Retune psq parameters with lichess quiet position set
- Prune quiet moves with bad counter move history
- Fix for ponder mode not switching to better ponder move sometimes
- Added parameter for depth used in bench mode
- Change TB scores to make TCEC GUI not read it as mate score
- Avoid complete sorting of movelist, just loop for best remaining move
- Fix voting of best thread, bug was probably introduced with the time management fix
- Switched to Clang compiler for Windows releases using lto and profiling
1.5 (release 2019-06-27) :
- Replaced the (sometimes wrong) pv reading from hash table with a real pv table
- Texel-tuning: Ignore parameters with too few positions in tuning set
- Replaced "nullmoveallowed" with a verification search
- Use more granular bonus for connected pawns respecting the number of supporting pawns
- Evaluate a penalty for pieces pinned to the king
- Evaluate king support for friendly passed pawn and defense against opponents passed pawn
- Some small improvements for king danger evaluation
- Implement aging of moves history bonus
- Implement "go nodes"
- Increase general late move reduction and decrease it depending on the moves history
- Use values read from tt in quiescence search
- Some speed improvements by removing piece and color loops using template functions
- Speed improvements by calculating only differential psq in playMove()
1.4 (release 2019-04-27) :
- Evaluate potentially passing pawns
- Improved king danger evaluation by a quadratic evaluation term and adapted texel tuner for that
- Improved speed of by preallocating static memory for all move lists of all plies
- Improved speed by leaving QUIETSTATE directly in lmr
- Fixed a (rare but heavy) bug in TB rootmove selection under time preasure
- Introduced counter move history
- Introduced razoring
- Fixed ordering of moves escaping from null move refutation target (didn't work at all before).
- Thread limit now at 128
- New parameters -ppg (positions per gane) and -quietonly for extraction of fen positions from pgn
- Improved memory usage of texel tuner
- Fix: Don't use move from hash as best root move if the hash value fails low
1.3.1 (release 2019-02-27 for TCEC) :
- Make moveoverhead relative to number of threads
- Don't reallocate hash when number of threads is changed
- Leave out exchanges with neutral see in qsearch
1.3 (release 2019-02-10) :
- Finally Lazy SMP is implemented based on the ideas of many common AB engines
- Changed order of nullmove and (reverse) futility pruning
- Exclude moves that give check from futility pruning
- Introduced simple probcut
- Increase reduction for moves with bad history
- Introduced a scaled evaluation for drawish endgame material
- Evaluate pieces that can give check
- Fixed a "by one" bug in the 50-moves rule handling
- Implemented movelist for check evasion
1.2.1 (release 2018-12-14) :
- Some fixes preventing rootsearch playing a move that fails low and wasn't in pv
1.2 (not released 2018-12-10) :
- Evaluate hanging pieces
- Evaluate mobility of pieces more fine grained
- Evaluate passed pawns more fine grained
- Added extension for singular moves
- History heuristic: Added penalty for quiet moves that don't fail high and finally switched from piece-destination to butterfly history table
- Improved debugging code in search
- Added "position improved" detection and made reduction and futility pruning depend on it
- Imroved null move search respecting static evaluation and increasing depth reduction
- Introduced late move pruning, also depending on "position improved" flag
- Tweaked futility pruning margins
- Tweaked time management to spend more time if best root move changed
1.1 (release 2018-10-01) :
- Every evaluation parameter is tapered now
- Introduced attackedBy information and used them for pawn attacks and pawn push threats
- Added kind of pawn storm evaluation
- Turned pawn hash into a "pawn and king" hash
- Completely rewritten the evaluation and the tuning mode not calling the qsearch all the time but only the evaluation term
- Tuned all the parameters with game material from Laser (provided by AGE, thanks for that)
- Improved and fixed ponder mode
- Added selective depth information in UCI output
- Introduced bucket system for the transposition table
- Internal iterative deepening in PV node if hash move is missing
- New more general SEE code used for pruning moves with bad SEE
- Switched to a staged move generation seperating tactical from silent moves
- Fixed bug in repetition detection: Drawing in winning position by perpetual check shouldn't happen to often
- Some minor fixes and cleanups regarding futility pruning and move stack
1.0 (release 2018-08-04) :
- Cleanup: Removed board88 and rotating botboard code
- Refinement of aspiration window
- Retuned evaluation parameters based on new test games texeltune-09-bal.pgn and finally texeltune-10.pgn
- More agressive delta pruning in qsearch
- Fix: Increase history heuristic value only for cutoff move (not for moves that just raises alpha)
- Fix: Killer moves where taken from wrong ply
- Seperated move creation in tactical and quiet moves to gain some speed
- Code consolitation in rootsearch e.g. lmr
0.9 (release 2018-05-28) :
- Implemented Syzygy tablebase probing
- Fixed bug with wrong depth stored in TT after a unreduced research
- Improved LMR from simple "one depth reduction after move 3" to a reduction depending on depth an move number
- Fixed quiescience search: Doesn't evaluate patscore when in check
- Evaluation: Added some king danger via attack units
- Move order: Moves that escape from null move refutation capture get a higher score
- Added four more positions for benchmarking as this got too fast
0.8.1 (release 2018-03-24) :
- Implemented ponder mode (works if ponder move can be read from tt)
- Implemented / fixed "suddendeath without increment" timecontrol
0.8 (release 2018-03-14) :
- Fast move after depth 4 for singular root move
- Extended and reverse futility pruning up to depth 3
- Added mobility for rook/queen and retuned with fresh games pgn
- Seperate evaluation for semi- and open file bonus for rooks; excluding the queen now
- Null move pruning improved: prune even in later game phase and with variable depth reduction
- Improved tuning: Can create and read fen+moves files now which is 5x faster
0.7 (release 2018-01-19) :
- Introduced small tempo value for evaluation
- Implemented MultiPV mode for analysis
- Fixed bug that writes wrong values of incomplete/interrupted search to hash (responsible(?) for blunder in game 65 of Graham div 9)
- use additional move buffer in calculation of remeaining time in move/time mode
0.7 (release 2018-01-06, Pre-Release for Graham division 9 tournament) :
- Texel-Tuning!!! Implemented a tuner and tuned all the evaluation parameters which gains about 150 ELO. Thanks to Peter Österlund.
- Improved search:
+ futility pruning implemented with margin 130
+ delta pruning implemented
+ quiescience search now handles promotion moves
+ fixed bug in SEE (missing pawn attacks) and retuned
- Total score against 0.6 (4000 games in 10+0.1, 2moves_v1 book): 214.97ELO +/- 11.33
0.6 (release 2017-11-26) :
- Store best move in transposition table even for beta cutoff which is important for move ordering
- New magic bitboard implementation about 24 % faster than rotating bitboards (still compilable via define)
- Switched to fail soft environment
- Fixed a bug where pv move value gets overwritten by killer history value which results in bad move order and sometimes even worse bestmove
- Simplified/fixed quiescence search (again)
- Introduced LMR (quite simple right now)
- Improved sudden death time management again; ELO in 10+0.1 is now almost equal to 40/10
- Improved evaluation of pawns now using a pawn hash (only used in Bitboard version)
0.5 (release 2017-09-29):
- Moved undo data from chessmove struct to a static stack which speeds up playing moves
- More speed by making engine, position, tables global instead of passing them by parameters
- Better evaluation: Ballanced pawn / minors, diagonal mobility, progress of passed pawns
- Improved time management, especially sudden death mode
- Avoids wrong best move from last search when under time pressure
- Really disabled all the debug code if DEBUG is not defined
- First Linux release.
0.4 (release 2017-08-04):
- First rotating bitboard version (choose by #define BITBOARD); 0x88 board still available
- Use 2^x for transposition size and & instead of % which make accessing the TP a lot faster
- Some fixes in the pawn evaulation (got different scores for white and black before)
- Added test for symmetric position evaluation (new parameter - dotests substitutes - hashtest)
- Fixed timemode "time/inc for whole match"
- Testrepetition() stops searching at halfmovecounter reset now
- Search improvement by adding aspiration windows and principal variation search
0.3 (release 2017-06-05) :
- Now really fixed en passant hashing (code got lost somehow before releasing 0.2.1)
- New evaluation using phase triggered value tables and some pawn specials
- Function 'getMoves' now returns pseudo legal moves to avoid time consuming play/unplay
- Both of these changes leads to speed improvement ~40 % compared to 0.2.1
- Improved quiscense serach although this might not be the end of story
- Implemented simple heuristic for insufficient material
- Improved time management for tournament mode and switched to QueryPerformanceCounter API
- Fixed memory leaks
- Removed undotest flag
- Implemented benchmark mode
- Some fixes in uci option handling
0.2.1 (release 2017-03-28):
- Tuned attack detection, move generation, SEE, play/unplay to get more speed out of it; perft shows ~10 % better performance
- Added history heuristic for move ordering; improvement visible in wacnew/199 where next depth is reached in half time compared to 0.2
- Implemented 50-moves rule
- Fixed bug in en passant hashing
- Fixed bug: ENGINESTOPSOON did not take move of last iteration
- Improved testengine mode (compare mode, avoid moves, exit flags)
0.2 (release 2017-03-19):
- Improved use of transposition table which is not reset anymore and can deal with alpha and beta bound entries
- Alphabeta now uses a quiscence based on SEE evaluation for captures to go
- Null move pruning added
- Move ordering now uses killer moves
- Simplified unplay to just reset the old values stored by play procedure instead of emulating the reverse play
- Function 'getPositionValue' changed to some simple rules:
+ prefer central fields for knight and bishop
+ prefer open files for rook and queen
+ prefer border positions for king in the beginning to force castles
+ pawns: prefer central pawns, penalty for double pawns, move forward in endgame
0.1 (release 2017-02-24):
- 0x88 board representation with (hopefully) bugfree move generation and play/unplay
- Alpha-beta-search implemented with pv move ordering and some 'prefer captures' heuristic
- Basic implementation of transposition table; not yet very powerfull as it is cannot deal with non-exact values and is reset after every iterative seach
- getPositionValue: expensive but quite strong position evaluation bases on counting dominated fields
- Basic UCI protocol implementation so that it can play tournaments in Arena
- perft implemented
- testengine mode for bulk testing of EPD files