Rice is a powerful NNUE chess engine that combines the use of alpha-beta search with various other search techniques to achieve its impressive performance.
- Bitboards
- Fancy magics for movegen
- Negamax
- Alpha beta pruning
- Quiescence search
- Null move pruning (NMP)
- Static null move pruning aka Reverse Futility Pruning
- PVS (Principal Variation Search)
- ZWS (Zero Window Search)
- LMR (Late Move Reduction)
- SEE Pruning (Static Exchange Evaluation Pruning)
- Movecount Pruning/LMP (Late Move Pruning)
- Transposition Table cutoffs and move ordering
- History, killers and MVVLVA Move ordering
- Search Extensions
- NNUE (Efficiently updateable neural network)
- Net Architecture: 16 king buckets horizontally mirrored, no output buckets
(12 * 64 * 16 -> 512)x2->1
- NNUE Trainer: Grapheus by Luecx
- Old trainer: marlinflow
Default build (g++):
git clone https://github.com/rafid-dev/rice
cd rice/src
make
./Rice
Clang build:
git clone https://github.com/rafid-dev/rice
cd rice/src
make CXX=clang++
./Rice
The Universal Chess Interface (UCI) is a standard protocol used to communicate with a chess engine, and is the recommended way to do so for typical graphical user interfaces (GUI) or chess tools. Rice requires a UCI-compatible graphical user interface in order to be used with the protocol.
From 5.0, Rice has switched to NNUE from its handcrafted evaluation.
When I lack the hardware resources to generate enough training data, I need to use data generated by external engines. However, I think it's important to be transparent about the use of these engines and where the training data comes from.
Rice 5.0 has used data generated by Viridithas, a strong chess engine by Cosmo.
Leela Chess Zero by the Lc0 Team
LC0 employs a novel method for playing high-level chess by utilizing MCTS and acquiring its chess knowledge through self-play. As Rice 6.0 and onwards utilizes data from LC0, it is worth noting that this data is licensed under the Open Database License, which promotes the sharing and reuse of data while maintaining legal protection for contributors and users.
- Runpod for providing the GPU hardware to train Rice's neural networks.
- Andrew Grant , author of Ethereal for his clear and concise code which led to better understanding. I also thank him for contributing threads for the development of Rice.
- Disservin, author of Smallbrain for his chess library in c++ which is used in Rice.
- Luecx, author of Koivisto for his enormous help for implementation of NNUE
- Readme is heavily inspired by BlackCore.
- Ciekce for helping write good C++ code
- Stockfish by the Stockfish Team
- NanoPixel
- Zuppa
- Rak
- Shaheryar Sohail
- Archi