Skip to content

Latest commit

 

History

History
177 lines (124 loc) · 7.15 KB

README.md

File metadata and controls

177 lines (124 loc) · 7.15 KB

Reckless – Chess Engine in Rust

Build and Test

Reckless is a UCI chess engine written in Rust as a personal project.

Guided by the insights from the chess programming community, it fearlessly combines established concepts with its reckless nature, as the name suggests.

Rating

Version CCRL Blitz CCRL 40/15 Release Date
Reckless v0.7.0 3505 +/- 16 [#59] 3407 +/- 25 [#61] Aug 23, 2024
Reckless v0.6.0 3386 +/- 16 [#78] 3318 +/- 16 [#83] Mar 22, 2024
Reckless v0.5.0 3243 +/- 19 [#94] 3213 +/- 21 [#94] Feb 4, 2024
Reckless v0.4.0 2933 +/- 19 [#151] 2929 +/- 21 [#158] Dec 13, 2023
Reckless v0.3.0 2617 +/- 20 [#229] 2615 +/- 21 [#251] Nov 6, 2023
Reckless v0.2.0 2358 +/- 19 [#333] Oct 7, 2023
Reckless v0.1.0 2020 +/- 20 [#471] May 16, 2023

Getting started

Precompiled binaries

You can download precompiled builds from the GitHub Releases page.

  • x86_64-v1: Slowest, compatible with any x86-64 CPU.
  • x86_64-v2: Faster, requires support for POPCNT, SEE3, etc.
  • x86_64-v3: Even faster, requires support for AVX2, etc.
  • x86_64-v4: Fastest, requires support for AVX512.

For detailed information on the specific features needed for each level, refer to the x86-64 microarchitecture levels Wikipedia page.

Building from source

  1. Make sure you have Rust 1.73.0 or a later version installed. If not, follow the official Rust installation guide.

  2. Download the latest NNUE model either from the Reckless Networks repository or by running the following command:

# Fetch the latest NNUE model
make fetch
  1. To build the engine, a compatible model must be present in ./networks/model.nnue. If the model is located elsewhere, specify the path manually:
# Build the engine
make

# Optionally, specify a custom path for the model file
make EVALFILE=path/to/model.nnue

Troubleshooting

If you're getting a cannot transmute between types of different sizes error, it's due to a mismatch between the model and the engine's architecture. In this case, update the source code and fetch the latest model.

Usage

Reckless is not a standalone chess program but a chess engine designed for use with UCI-compatible GUIs, such as Cute Chess or ChessBase.

Custom commands

Along with the standard UCI commands, Reckless supports additional commands for testing and debugging:

Command Description
perft <depth> Run a perft test to count the number of leaf nodes at a given depth
bench <depth> Run a benchmark on a set of positions to measure the engine's performance
eval Print the static evaluation of the current position from white's perspective

Features

Board representation

  • Bitboards with Little-Endian Rank-File Mapping
  • Magic Bitboards for sliding piece attacks
  • Copy-Make approach

Move generation

Search

  • Fail-Soft Alpha-Beta
  • Principal Variation Search
  • Quiescence Search
  • Iterative Deepening
  • Aspiration Windows
  • Lockless Transposition Table
  • Lazy SMP (Shared-Memory Parallel)

Selectivity

Pruning

  • Reverse Futility Pruning
  • Null Move Pruning
  • Razoring
  • Futility Pruning
  • Late Move Pruning
  • Delta Pruning
  • Static Exchange Evaluation Pruning
  • Mate Distance Pruning

Reductions

  • Fractional Late Move Reductions
  • Internal Iterative Reductions

Extensions

  • Check Extensions

Move ordering

  • Hash Move
  • Killer Move Heuristic
  • SEE with MVV-LVA as a tiebreaker for captures
  • History Heuristic for quiet moves
    • Butterfly History
    • Counter Move History
    • Follow-Up History

Evaluation

  • NNUE
  • Architecture: (768 -> 384)x2 -> 1x4
  • Activation Function: SCReLU (Squared Clipped Rectified Linear Unit)
  • Quantization: i16 (256, 64)
  • Trained on original data generated entirely through self-play
  • Handwritten SIMD for AVX2 instructions

Time management

  • Soft and hard bounds
  • Best move stability
  • Evaluation stability
  • Distribution of root nodes

Acknowledgements

License

This project is licensed with the MIT license.