Releases: FitzOReilly/fatalii
Releases · FitzOReilly/fatalii
0.10.0
Improvements
- Better repetition detection. Compared to the previous version, the engine will convert more winning positions and less often run into threefold repetitions.
- Evaluate passed pawns based on their squares (instead of just counting them)
- Evaluate pieces and passed pawns based on their rank and file distances to the kings (and replaced the old evaluation terms which only considered the total distance to the kings)
- The tuner is now faster, uses less memory and it's less cumbersome to add new evaluation terms.
Full Changelog: v0.9.0...v0.10.0
Result against previous version
8s + 0.08s
Score of Fatalii 0.10.0 vs Fatalii 0.9.0: 518 - 153 - 329 [0.682] 1000
... Fatalii 0.10.0 playing White: 276 - 69 - 155 [0.707] 500
... Fatalii 0.10.0 playing Black: 242 - 84 - 174 [0.658] 500
... White vs Black: 360 - 311 - 329 [0.524] 1000
Elo difference: 132.9 +/- 18.2, LOS: 100.0 %, DrawRatio: 32.9 %
0.9.0
Improvements
- Faster static exchange evaluation
- Add SEE pruning
- Transposition table improvements
- Speed up code that checks if the side to move is in check and if a move gives check
- Update conditions and depth reduction formula for late move reductions and null move pruning
Full Changelog: v0.8.0...v0.9.0
Result against previous version
8s + 0.08s
Score of Fatalii 0.9.0 vs Fatalii 0.8.0: 495 - 128 - 377 [0.683] 1000
... Fatalii 0.9.0 playing White: 266 - 55 - 179 [0.711] 500
... Fatalii 0.9.0 playing Black: 229 - 73 - 198 [0.656] 500
... White vs Black: 339 - 284 - 377 [0.527] 1000
Elo difference: 133.7 +/- 17.4, LOS: 100.0 %, DrawRatio: 37.7 %
0.8.0
Improvements
- Improved and simplified transposition table
- Improved history heuristic
- Added late move pruning
Match against previous version
8s + 0.08s
Score of Fatalii 0.8.0 vs Fatalii 0.7.0: 457 - 167 - 376 [0.645] 1000
... Fatalii 0.8.0 playing White: 245 - 76 - 179 [0.669] 500
... Fatalii 0.8.0 playing Black: 212 - 91 - 197 [0.621] 500
... White vs Black: 336 - 288 - 376 [0.524] 1000
Elo difference: 103.7 +/- 17.3, LOS: 100.0 %, DrawRatio: 37.6 %
0.7.0
Improvements
- Add king tropism as a simple king safety evaluation
- Use kindergarten bitboards for faster sliding piece move generation
- Update transposition table entry age on access
- Store move list on the stack instead of the heap if it is small (up to 32 moves)
Match against previous version
8s + 0.08s
Score of Fatalii 0.7.0 vs Fatalii 0.6.1: 485 - 281 - 234 [0.602] 1000
... Fatalii 0.7.0 playing White: 262 - 130 - 108 [0.632] 500
... Fatalii 0.7.0 playing Black: 223 - 151 - 126 [0.572] 500
... White vs Black: 413 - 353 - 234 [0.530] 1000
Elo difference: 71.9 +/- 19.1, LOS: 100.0 %, DrawRatio: 23.4 %
0.6.1
Fixes an issue that prevented the engine from searching if one of the UCI go options was set to a negative value (e.g. go wtime 109264 btime -76 winc 8000 binc 8000). It now prints a warning, replaces the negative value with 0 and starts searching. (Previously, it printed an error message without starting the search.)
Thanks @GrahamCCRL and @Mathmagician8191 for finding the issue and helping with it!
0.6.0
Improvements
Search
- Switch from fail-hard to fail-soft alpha-beta search
- Add static exchange evaluation (SEE)
- Use SEE for move ordering
- Skip losing captures in quiescence search
- Use subtree size for root move ordering
- Add check extensions
- Add delta pruning in quiescence search
- Use futility and reverse futility pruning at depths > 1
- Add late move reductions
- Improve null move pruning
- Only do null move pruning if the static evaluation is greater than or equal to beta
- Do not play 2 null moves in a row
- Reset killers for the next ply before playing a move
- Persist history table between searches
- Play forced moves immediately, without searching depth 1 (searching depth 1 has sometimes led to weird eval jumps)
- Tune search parameters
Time management
- Make better use of the given time in games with increment
UCI
- Include
seldepthin UCI info - No longer print the last uci
infotwice
Bugfixes
- Fix replacement scheme in transposition table (could cause duplicate entries)
- Disable reverse futility pruning in PV nodes (could lead to missing checkmates)
Match against previous version
Chess960, 8s + 0.08s
Score of Fatalii 0.6.0 vs Fatalii 0.5.0: 265 - 113 - 122 [0.652] 500
... Fatalii 0.6.0 playing White: 140 - 52 - 58 [0.676] 250
... Fatalii 0.6.0 playing Black: 125 - 61 - 64 [0.628] 250
... White vs Black: 201 - 177 - 122 [0.524] 500
Elo difference: 109.1 +/- 27.4, LOS: 100.0 %, DrawRatio: 24.4 %
0.5.0
Improvements
- In this release, an evaluation tuner is added to the engine. All evaluation parameters have been tuned with it using the training positions from the Zurichess dataset quiet-labeled.v7.
- Additional evaluation parameters
- Pawn structure: passed, isolated, backward and doubled pawns
- Mobility
- Bishop pair
- Search
- Improve root move ordering: whenever a new best move is found, it is moved to the front of the move list
- Use multiple TT entries for move ordering (if the bucket contains multiple entries with different moves for the given position)
- Add aspiration windows
- Include non-capturing queen promotions in quiescence search
- Add countermove heuristic
- Stop search after depth 1 if there is only one legal move (only if the option
wtime/btimeis used)
Bugfix
- Use all/both killer moves (previously, only one move was used)
Match against previous version
Chess960, 2s + 0.02s
Score of Fatalii 0.5.0 vs Fatalii 0.4.0: 309 - 125 - 66 [0.684] 500
... Fatalii 0.5.0 playing White: 154 - 63 - 33 [0.682] 250
... Fatalii 0.5.0 playing Black: 155 - 62 - 33 [0.686] 250
... White vs Black: 216 - 218 - 66 [0.498] 500
Elo difference: 134.1 +/- 30.2, LOS: 100.0 %, DrawRatio: 13.2 %
0.4.0
Improvements
- Search
- Added null move pruning
- Added futility pruning
- Added reverse futility pruning
- Transposition table
- Now uses a bucket system with 4 entries per bucket
- Improved replacement scheme based on entry age and depth
- Evaluation
- Draws by insufficient material are now detected
- Added a small tempo bonus for the side to move
- Slightly tuned PSTs by hand (hopefully for the last time, planning to automate this in the future :D)
- UCI
infonow prints exact mate scores. No more 327.66 scores!
Match against previous version
Chess960, 2s + 0.02s
Score of Fatalii 0.4.0 vs Fatalii 0.3.1: 383 - 65 - 52 [0.818] 500
... Fatalii 0.4.0 playing White: 194 - 36 - 20 [0.816] 250
... Fatalii 0.4.0 playing Black: 189 - 29 - 32 [0.820] 250
... White vs Black: 223 - 225 - 52 [0.498] 500
Elo difference: 261.1 +/- 36.1, LOS: 100.0 %, DrawRatio: 10.4 %
0.3.1
Fixed a bug that affected Chess960 and caused the engine to illegally castle queenside in some positions
0.3.0
Enhancements
- Added support for Chess960
- Improved move ordering
- Added killer heuristic
- Added history heuristic
- Queen promotions are now searched directly after the hash move
- Underpromotions are searched last
- Improved quiescence search
- Ignore underpromotions
- Include all moves while in check
- Use principal variation search
- Evaluate position incrementally
- Minor optimizations
Bugfix
- Detect threefold repetition correctly if the position first occurred after a double pawn push but there was no legal en passant capture
Self-play vs. previous version
Match result at 2s + 0.1s:
Score of Fatalii 0.3.0 vs Fatalii 0.2.1: 164 - 21 - 15 [0.858] 200
... Fatalii 0.3.0 playing White: 73 - 18 - 9 [0.775] 100
... Fatalii 0.3.0 playing Black: 91 - 3 - 6 [0.940] 100
... White vs Black: 76 - 109 - 15 [0.417] 200
Elo difference: 311.8 +/- 65.2, LOS: 100.0 %, DrawRatio: 7.5 %