CubixChess is a lightweight UCI chess engine, designed as a C++ translation of the engine I had written in Go (Simplex).
The engine uses a NNUE evaluation function, with architecture (768 -> 128)x2 -> 1. It was trained with the Bullet trainer, using Leela self-play data.
- Negamax with Alpha-Beta pruning
- Iterative deepening
- Principal variation search (PVS)
- Late move reductions (LMR)
- Quiescence search
- Transposition table
- Aspiration windows
- Move ordering with:
- Hash move first
- MVV-LVA
- Killer heuristic
- History heuristic
- Null-move pruning
- Reverse futility pruning
- Razoring
- Futility pruning
- Late move pruning
- Delta pruning
For move generation and board representation, the engine uses Disservin/chess-library (contained in header file chess.hpp).
The only UCI option available is Hash to set the desired size (in MB) of the transposition table.
The engine is single-threaded, hence it does not support the Threads option.
- First clone the repository:
git clone https://github.com/Cubix1729/CubixChess.git cd CubixChess - Build the project using CMake:
If your CPU does not support AVX2, then use
cmake -B build -DCMAKE_BUILD_TYPE=Release cmake --build buildcmake -B build -DCMAKE_BUILD_TYPE=Release -DUSE_AVX2=OFF
- Engines like PZChessBot or Weak for providing some inspiration
- Disservin for his great chess library
- jw1912 for the Bullet NNUE trainer
- linrock for the NNUE training data used (linrock/test80-2024)