Skip to content

Releases: FitzOReilly/fatalii

0.10.0

09 Mar 22:55

Choose a tag to compare

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

08 Feb 22:20

Choose a tag to compare

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

17 Oct 21:53

Choose a tag to compare

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

06 May 21:08

Choose a tag to compare

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

05 Apr 20:35

Choose a tag to compare

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

10 Jan 22:40

Choose a tag to compare

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 seldepth in UCI info
  • No longer print the last uci info twice

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

11 Oct 21:46

Choose a tag to compare

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/btime is 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

06 Mar 18:18

Choose a tag to compare

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
    • info now 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

05 Oct 20:22

Choose a tag to compare

Fixed a bug that affected Chess960 and caused the engine to illegally castle queenside in some positions

0.3.0

10 Sep 14:13

Choose a tag to compare

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 %