Releases: jakhac/chai
NNUE Evaluation
chai 2.6.6
In this version, a stronger version of chai is released. The most notable changes are multi-threading support and the implementation of a tool for endgame-tablebase probing (Fathom). Further, new features include Aspiration Windows and a time-management algorithm.
For testing and custom builds, note that number of threads and size of the hashtable can be set via Makefile parameters. For reference, see the Installation section in the readme.
Full Changelog: v2.3.2...v2.6
chai 2.5.5
Full Changelog: v2.3.2...v2.5
In this release, the search algorithm is extended by Late Move Reductions and Futility Pruning. The detection of checkmates at deeper depths (quiescence search) are refactored. Order of applied pruning techniques is changed such that wins are preferred over draws by repetition.
Further, probing repeating positions in the transposition table is refactored and now uses an upper / lower part of a hashkey to determine an index and a bucket entry within the hashtable entry. To fit several position entries in a single hashtable entry, the move encoding was changed to 16bit per move.
At several occasions, bugs were fixed and CLI and UCI options were completed.
This release contains a GNU build with the provided Makefile and a MSVC build.
chai 2.4
The most notable additions in this release are Futility Pruning and Mate Distance Pruning.
New Features include:
- Futility Pruning
- Razoring (implemented but was losing elo, retry with variable pawn eval)
- Mate Distance Pruning
- ContemptFactor considers drawn piece-combinations
- Reset MateKillers between search
Full Changelog: v2.3.2...v2.4
Null Move Pruning, Interal Iterative Deepening, Speed Optimizations
- Elo
- ttSize=128MB
- chai - Chai_2.2_1bucket → 51%: 201-191-108 (+7)
- chai - TSCP181 → 56%: 244-186-70 (+42)
- chai - Bubble → 27%: 102-330-68 (-173)
- ttSize=200MB and reordered
- chai - Chai_2.2_1bucket → 49%: 196-184-120 (-7)
- chai - Bubble → 27%: 90-320-90 (-173)
- NMP (At least 7 pieces, d>2), ttSize=256MB, no-logs,
lazyEval()
- chai - Chai_2.2_1bucket → 52%: 202-185-113 (+14)
- chai - Bubble → 34%: 123-286-91 (-115)
- ttSize=128MB
- Eval
- detect endgames (knight, bishop endgame, light/dark squared bishop)
-
lazyEval()
used in NMP andcontemptFactor()
- Transposition Table
- ttSize=256MB
- AlphaBeta
- Adaptive Null Move Pruning
- IID if no hash move
- Reorder: Check for FiftyMove, Mate Distance Pruning (disabled) and TTable before dropping in quiescence
- Beta cutoffs NOT stored in ttable
- Project
- UCI Mate in X option
- Low time regulations in
uciParseGo()
- Removed
log()
in UCI calls
Refactor ttables (buckets), quiescence checkers and checks
- Elo
- Chai_2.2_1bucket - Chai_2.2_2bucket → 59%: 247-157-96 (+63)
- Chai_2.2_1bucket - Chai_2.2_4bucket → 75%: 335-86-79 (+191)
- Chai_2.2_1bucket - Chai_v2.1.2 → 62%: 252-132-116 (+85)
- Chai_2.2_1bucket - Tscp181 → 58%: 253-176-71 (+56)
- chai (1bucket) - TSCP181 → 52%: 232-212-56 (+14)
- chai (1bucket) - Bubble → 29%: 115-321-64 (-156)
- Compiler Optimizations DISABLED WHILE TESTING
- Quiescence
- Forced checkmates are detected in quiescence
- Generate checkers at first ply
- Transposition Table
- Prefetch Pawn Table
- Buckets (best size is 1)
- Replacement Strategy: Overwrite lowest depth
- Refactor usage of ttable hits
- Features
- Parse FEN into board from console
- Print FEN
- Bugfixes
- Fixed incorrect eval type (
uint_16
) in pawn entry - Alpha cutoff stored NO_MOVE in TT
Reference perft, move order heuristic, specific move gen
-
Elo
- chai - TSCP181 → 252-187-61 (+49)
- chai - Bubble → 92-342-66 ( -191)
-
Move Ordering:
- Promoting captures are sorted higher than normal captures
- Order:
- Hash Move from TTable
- Promoting pawn with capture
- Good captures (caps with SEE > 0)
- Promoting pawn
- Equal captures (caps with SEE == 0)
- Both standard killer moves (quiet)
- Rest of quiet moves ordered by history heuristic
- Losing captures
-
Quiesence
- Removed Delta cutoff
lazySee()
early return in see calculation for quiescence (attackerVal < capVal)- Negative see pruning
scoreMovesQuiescence()
- No stand pat pruning when in check
-
Transposition Table
- Prefetch transposition table
- Size = 128MB
-
Bugfixes
- moveScores in alphaBeta swapped moves but not scores
- counterMoves, EP moves, castleMoves scored wrong at index
- assign correct PROMOTION bonus in alphaBeta and qui moveScoring
-
Features
- Choose FEN in perft option
- PV line in quiescence