Releases: bdmendes/camel
v1.6.0
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
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
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
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
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
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
andperft
debug commands - Switch from
once_cell
toctor
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
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
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
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
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)