Skip to content

Releases: bdmendes/camel

v1.6.0

08 Jun 20:09
7016c1d
Compare
Choose a tag to compare

This release includes a more optimized evaluation function due to Texel Tuning and some minor adjustments.

This is the final 1.x release. I learned a lot about chess programming in the past few months and want to do some things differently, so the next (major) version will be a significant rewrite of the engine to move to a more performant, incremental, NNUE-based architecture from the ground up. In the meantime, I'll gladly patch this version if some issue arises, e.g. in CCRL competitions. See you then!

Changelog

  • Tune most evaluation parameters with Texel Tuning
  • Search winning captures first via SEE lookup
  • Fix Chess960 castling pseudo-legality test

Estimated Strength

  • Lichess: 2320 (Bullet), 2250 (Blitz), 2340 (Rapid)
  • Against v1.5.1 [hash=64; threads=1]: ✅ Elo difference: 40.13 +/- 17.93

v1.5.1

02 May 08:12
d8de9f0
Compare
Choose a tag to compare

This patch fixes the handling of negative remaining times, which is necessary for GUIs such as CuteChess (thank you, @tissatussa, for the report). It also includes minor search optimizations.

Changelog

  • Parse negative remaining times as zero
  • Don't probe the transposition table just before dropping into quiescence search
  • Don't search for longer mates if we've already found one (mate distance pruning)
  • Clear killer moves when starting new searches
  • Store killer moves by ply instead of depth

Estimated Strength

  • Against v1.5.0 [hash=64; threads=1]: 🆗 Elo difference: 15.65 +/- 22.22

v1.5.0

26 Apr 18:37
d576b7b
Compare
Choose a tag to compare

This release introduces lossless pruning in quiescence search via Static Exchange Evaluation (SEE). It also further reduces the size of the transposition table entries to 64 bits and fixes bugs such as wrong retrieved mate scores and double null moves.

Changelog

  • Prune losing captures with SEE in quiescence search
  • Pack transposition table entries in 64 bits
  • Fix wrong mate scores retrieved from the transposition table
  • Tweak transposition table replacement scheme
  • Probe transposition table hash move for pseudo-legality
  • Disable double null move
  • Disable futility pruning in endgame positions
  • Search with full depth if reduced search raises alpha
  • Add redundant mailbox to board for faster piece_at operations
  • Add Win at Chess (WAC) tests to the test suite

Estimated Strength

  • Lichess: 2310 (Bullet), 2240 (Blitz), 2328 (Rapid)
  • Against v1.4.0 [hash=64; threads=1]: ✅ Elo difference: 81.98 +/- 23.96

v1.4.0

01 Apr 13:44
14680e3
Compare
Choose a tag to compare

This release makes the engine multithreaded, using the LazySMP approach, by spawning helper threads with different move ordering. It also refactors the hash table to have smaller entries, directly stored as atomics with 16 bytes, allowing fast, native concurrency. Futility Pruning was also introduced as a new technique, significantly reducing time to depth in some positions.

This makes Camel about 100 Elo stronger in fast time controls, even without threading enabled. The gains with multiple threads will be less deterministic due to the nature of the approach used.

Changelog

  • Support the Threads UCI option
  • Search with multiple threads using LazySMP
  • Prune moves with Extended Futility Pruning when depth <= 2
  • Refactor the data layout of hash table entries
  • Refactor check detection/evasion

Estimated Strength

  • Lichess: 2270 (Bullet), 2200 (Blitz), 2290 (Rapid)
  • CCRL: 2133 (Blitz)
  • Against v1.3.1: ✅ Elo difference: 89.20 +/- 20.97

v1.3.1

17 Jan 11:10
0b818ab
Compare
Choose a tag to compare

This patch falls back to more conservative late move reduction, to deal better with highly tactical positions (thank you @tissatussa).

Changelog

  • Adjust late move reduction depth

Estimated Strength

  • Compared to the previous version: 🆗 Elo difference: 6.95 +/- 21.47

v1.3.0

15 Jan 15:56
953b629
Compare
Choose a tag to compare

This release introduces late move reduction, support for Chess 960 and pondering.

Changelog

  • Reduce search depth on quiet, non-PV moves (late move reduction)
  • Use the opponent's time for searching (pondering)
  • Support Chess 960
  • Optimize legal move generation
  • Tune bishops, rooks and pawns evaluation
  • Add automove and perft debug commands
  • Switch from once_cell to ctor for initialization of magics and zobrist numbers

Estimated Strength

  • Lichess: 2151 (Bullet), 2140 (Blitz), 2229 (Rapid)
  • Compared to the previous version: ✅ Elo difference: 71.64 +/- 24.54

v1.2.0

18 Sep 21:49
7af3762
Compare
Choose a tag to compare

This release introduces several new techniques to improve search and evaluation, ready to be tuned in the future.

Changelog

  • Use aspiration windows centred at the last iteration score to tighten the search bounds
  • Generate moves by stages
  • Incentivize the advancement of passed pawns
  • Penalize broken pawn shelter around the king
  • Incentivize pieces to attack the opponent king ("king tropism")
  • Generate all check evasions in quiescence search if in check

Estimated Strength

  • Lichess: 2100 (Bullet), 2150 (Blitz), 2217 (Rapid)
  • CCRL: 2037 (Blitz)
  • Compared to the previous version: ✅ Elo difference: 57.25 +/- 22.18

v1.1.0

11 Sep 11:59
383b7ce
Compare
Choose a tag to compare

This release introduces an important evaluation factor: piece mobility. It also includes performance-related changes and better developer tooling.

Changelog

  • Consider piece mobility in the evaluation function
  • Add FIDE's insufficient material draw rules
  • Use incremental zobrist hashing for hashing positions (instead of AHash)
  • Pick one move at a time (do not physically sort the move list)
  • Count all search tree nodes instead of only leaf nodes
  • Bundle deploy script, test script, benchmarking tooling

Estimated Strength

  • Lichess: 2081 (Bullet), 2118 (Blitz), 2207 (Rapid)
  • Compared to the previous version: ✅ Elo difference: 64.57 +/- 21.97

v1.0.1

12 Jul 16:46
d8a62f6
Compare
Choose a tag to compare

Minor optimization and bug fixing release that earns Camel some points in slower time controls.

Changelog

  • Move generation optimizations
  • Global, fixed-size hash table with custom replacement schema, using AHash as the hashing algorithm
  • Support for the "Hash" UCI option
  • Less aggressive transposition table probing to avoid 3-fold repetitions

Estimated Strength

  • Lichess: 2044 (Bullet), 2106 (Blitz), 2069 (Rapid)

v1.0.0

02 Jul 11:54
f54bdc9
Compare
Choose a tag to compare

This release marks the debut of bitboards as the board representation, which required a rewrite of most of the engine's components, especially the move generation. It is now much faster, enabling future improvements to the evaluation which were not possible due to the high cost of accessing the old array-based board representation.

Camel is now established as a 2000-Elo player in most Lichess time controls.

Changelog

  • Bitboards as board representation
  • Fancy magic bitboards as a way to generate sliding piece attacks
  • Spend more time right after the opening
  • Delta pruning for each move in quiescence search
  • Removed king mobility evaluation (in favour of future king tropism and pawn structure)

Estimated Strength

  • Lichess: 2086 (Bullet), 2011 (Blitz), 2005 (Rapid)