Skip to content

Releases: jakhac/chai

NNUE Evaluation

06 Feb 17:25
124ddae
Compare
Choose a tag to compare

This release contains strength improvements regarding the evaluation of positions. The handcrafted evaluation has been refactored completely and further, a NNUE evaluation is now implemented. Supported networks files can be found here.

chai 2.6.6

30 Nov 13:41
Compare
Choose a tag to compare

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

10 Jun 16:02
Compare
Choose a tag to compare

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

15 Mar 17:36
Compare
Choose a tag to compare
chai 2.4 Pre-release
Pre-release

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

20 Feb 11:05
Compare
Choose a tag to compare
  • 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)
  • Eval
    • detect endgames (knight, bishop endgame, light/dark squared bishop)
    • lazyEval() used in NMP and contemptFactor()
  • 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

30 Jan 13:07
Compare
Choose a tag to compare
  • 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

04 Jan 19:01
Compare
Choose a tag to compare
  • Elo

    • chai - TSCP181 → 252-187-61 (+49)
    • chai - Bubble → 92-342-66 ( -191)
  • Move Ordering:

    • Promoting captures are sorted higher than normal captures
    • Order:
      1. Hash Move from TTable
      2. Promoting pawn with capture
      3. Good captures (caps with SEE > 0)
      4. Promoting pawn
      5. Equal captures (caps with SEE == 0)
      6. Both standard killer moves (quiet)
      7. Rest of quiet moves ordered by history heuristic
      8. 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