/Alexandria

bitboard chess engine

Primary LanguageC++GNU General Public License v3.0GPL-3.0

Features

  • Engine

    • Bitboard representation
    • Zobrist hashing
  • Search

    • Negamax framework
    • Aspiration Window
    • Alpha-Beta pruning
    • Reverse Futility pruning
    • Late-move reduction
    • Late-move pruning
    • Null-move pruning
    • Razoring
    • IIR
    • SE
    • SEE pruning
    • Check extension
    • PVS
    • Quiescence search
    • Transposition Table
    • Repetition detection
    • killer move, history
    • MVV-LVA capture ordering
  • Evaluation

    • NNUE Evaluation (Big thanks to Luecx)

Things i might try in the future

  • Evaluation
    • Improve the nnue using a better architecture and generating more data
  • Search
    • All the histories i don't comprehend at the time of writing (mostly FUH)
  • TT
    • Get Buckets working

Building

$ git clone https://github.com/PGG106/Alexandria
$ cd alexandria/src
$ make 
$ ./Alexandria

How to use the engine

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. Alexandria implements the majority of its options as described in the UCI protocol.

Generate training data using the engine

Data generation is done with the datagen command, the supported arguments are:

  • threads

    Usage: datagen threads X, sets the number of threads to use for datagen to X.

  • nodes

    Usage: datagen nodes X, makes each search in the datagen process stop after any depth cleared once it used at least the given X amount of nodes.

  • depth

    Usage: datagen depth X, makes each search in the datagen process stop after any clearing depth X.

  • games

    Usage: datagen games X, sets the number of games to play to X (per thread).

The commands can be chained and don't need a specific order, for example a valid command is: datagen nodes 2500 games 50000 threads 8

Participating in the project

Alexandria's improvement is a time consuming effort and any help is extremely appreciated. If you like the project and what to help it out the following are the preferred ways to do so, please read the next section very carefully.

Donating hardware

If you want to donate hardware that will go towards testing patches for the engine, you can donate your hardware resources by getting a client file for OpenBench and creating a profile on alexandria's OB instance here.

Improving the code

Alexandria is open to external PRs and code contributions are highly encouraged and appreciated, just abide by a few rules:

Issues

  1. before starting to work on a PR that fixes an issue with the engine open an issue in the repository first, from that we'll be able to discuss on who will handle the issue and what is the best way to proceed in fixing it.

Bench altering commits (anything that is functional and changes bench)

  1. Please make sure your idea makes sense from a chess engine development point of view, no single position analysis nor bizarre chess theories that only apply to humans.
  2. If possible ensure your change passes a SPRT before making the PR, if not create a test on alexandria's OB instance and i'll judge whether i can spare the resources to run it.

Acknowledgements

This project would not have been possible without the following people

  • BluefeverSoftware for his Vice chess engine from which i learnt the basic structure and functionality of a chess engine
  • CodeMonkeyKing for his bbc chess engine from which i learnt how bitboards work and several refined search techniques
  • The whole Stockfish Discord server and Disservin in particular for the sharing of code and the avaliability in answering questions
  • A giant thanks to Luecx that helped me immensely in the process of setting up the NNUE and gave me some training data generated by Koivisto
  • Lucex (again) and Jay Honnold for the wonderlud CudAD trainer that was used to train the NNUE https://github.com/Luecx/CudAD
  • Andrew Grant for the OpenBench platform https://github.com/AndyGrant/OpenBench
  • Morgan Houppin, author of Stash for his "option" code https://github.com/mhouppin/stash-bot