Skip to content

ArjunBasandrai/elixir-chess-engine

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Elixir Chess Engine


License
GitHub release (latest by date) Commits since latest release

Elixir is a UCI-compliant chess engine developed in C++. It is the successor of my previous engine, Shuffle, and is under development with the goal of achieving an ELO rating of 3500+

Ratings

CCRL BLitz CCRL 40/15
v3.0 - -
v2.0 3018 2938
v1.0 2828 -

Instructions to build

Building Elixir requires Make and latest versions of clang++ or g++ with C++20 support

make CXX=<compiler>
  • Replace <compiler> with your preferred compiler - either clang++ or g++
    • If not specified, the compiler defaults to clang++
  • Upon successful compilation, the binary file will appear in the root directory as elixir or elixir.exe depending on your operating system
    • You can also give a custom name to the binary by specifying it as EXE=<name> during compilation

Alternatively, you can download pre-compiled binaries from the Releases page

Note

Elixir utilizes a third-party tool - INCBIN to embed NNUE weights into the binary. However, INCBIN is not fully compatible with clang++ on Windows. If you're using clang++ to compile Elixir on a Windows system, ensure that the nnue.bin file is located in the same directory as the compiled binary.

UCI Options

Name Type Default value Valid values Description
Hash integer 64 [4, 1048576] Memory allocated to the Transposition Table (in MB).
Threads integer 1 [1, 1024] Number of Threads used to search.

Features

  • Search : Standard PVS with Quiescence Search and Iterative Deepening
    • Aspiration Windows Search
    • Check Extension
    • Repetition Draw Detection
    • Insufficient Material Draw Detection
    • Mate Distance Pruning
    • Transposition Table (TT) cutoff
    • Internal Iterative Reduction
    • Razoring
    • Reverse Futility Pruning
    • Null Move Pruning
    • Late Move Pruning
    • Futility Pruning
    • Static Exchange Evaluation (SEE) Pruning
    • Late Move Reductions
    • Improving Heuristic
  • Move Ordering
    • TT Move ordering
    • Good and Bad Captures ordering using SEE
    • Killer Move Ordering
    • Counter Move History
    • Continuation History
      • 1-ply Continuation History
      • 2-ply Continuation History
    • Butterfly History
  • Evaluation : Neural Network based evaluation (NNUE)
    • Architecture: (768 -> 1024)x2 -> 8
    • Material Output Buckets: 8
    • Input King Buckets: $${\color{yellow} \text{Not implemented yet}}$$
    • Data Size: 3.3B positions

Important

As of version 2.0, Elixir no longer utilizes Hand-Crafted Evaluation (HCE). The following information is retained here for reference purposes.

  • Evaluation : Hand Crafted Evaluation (HCE) using texel-tuned values
    • Tapered Evaluation
    • Material + Piece Square Table Evaluation
    • Piece Mobility Evaluation
    • Supported Pawn Bonus
    • Pawn Duo Bonus
    • Pawn Bonus attacking opponent Majors & Minors
    • Pawn Bonus if opponent has no Majors
    • Stacked Pawn Penalty
    • Isolated Pawn Penalty
    • Knight Outpost Bonus
    • Bishop Pair Bonus
    • Passed Pawn Bonus
    • Rook Open & Semi-Open File Bonus
    • King Open & Semi-Open File Penalty
    • King Zone Attacker Bonus
    • Pawn Shelter Bonus
    • Pawn Storm Penalty
    • Tempo Bonus

Acknowledgements

  • A special thanks to Ciecke, Zuppa, Yoshie, Shawn, A_randoomnoob, Gabe and everyone else on the StockFish Discord server for their continuous help in developing and bug-fixing Elixir.
  • This project would never have been where it is right now, if it was not for the help of everyone on my OpenBench instance - Aron, Yoshie, Shawn, Mid. Massive CPU time donations by these guys is what enabled me to heavily test and tune Elixir.
  • Andrew Grant for developing the OpenBench platform.