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+
CCRL BLitz | CCRL 40/15 | |
---|---|---|
v3.0 | - | - |
v2.0 | 3018 | 2938 |
v1.0 | 2828 | - |
Building Elixir requires Make
and latest versions of clang++
or g++
with C++20
support
make CXX=<compiler>
- Replace
<compiler>
with your preferred compiler - eitherclang++
org++
- If not specified, the compiler defaults to
clang++
- If not specified, the compiler defaults to
- Upon successful compilation, the binary file will appear in the root directory as
elixir
orelixir.exe
depending on your operating system- You can also give a custom name to the binary by specifying it as
EXE=<name>
during compilation
- You can also give a custom name to the binary by specifying it as
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.
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. |
-
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
- 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.