Maelstrom often plays on Lichess here. Please feel free to challenge the engine on lichess whenever it is online.
- Fast bitboard move generation (magic bitboards for sliding pieces)
- Iterative deepening principal variation search with aspiration windows
- Stage-based move picker with MVV-LVA, history, killer, counter-move, and 1-ply continuation history
- Transposition table
- Null move pruning
- Static null move pruning
- Late move reductions
- Check extensions
- Futility pruning
- Late move pruning
- Quiescence search
- Static Exchange Evaluation (SEE) pruning and move ordering
- NNUE Evaluation using a (768->512)x2->1 architecture using a SIMD SCReLU activation function, trained on Lc0/SF data
- UCI protocol implementation, so you can run the engine using a UCI-supported GUI such as CuteChess
- Time management with soft/hard bounds and soft scaling
- Pondering
Checkout and download binaries and source code from the Releases page.
Requirements:
- go version 1.23.0 or later
- any C compiler
- AVX2 enabled processor (if not enabled, update
engine/screlu/screlu.gowithAVX2_ENABLED=falseand remove the AVX2 CFLAGS)
Clone the repository, then run go build maelstrom/main.go. The engine binary will be built into the project root folder as the binary main. Run this executable to start the CLI, which uses the UCI-protocol.
Enter the following commands to run the engine on starting position from binary:
> uci
id name Maelstrom v3.1.0
id author Saigautam Bonam
option name Hash type spin default 256 min 1 max 4096
option name Ponder type check default false
uciok
> isready
readyok
> position startpos
> go infinite
SPRT command:
cutechess-cli -engine proto=uci cmd={BINARY_TO_TEST} name={TEST_NAME} -engine proto=uci cmd={EXISTING_VERISON_BINARY} name={EXISTING_NAME} -each tc=8+0.08 option.Hash=32 -games 2 -rounds 1000 -repeat -concurrency 8 -openings file={PATH_TO_EPD} format=epd order=random -pgnout {PATH_TO_PGN} -sprt elo0=0 elo1=5 alpha=0.05 beta=0.1 -ratinginterval 10
- Definitely the most helpful reference in developing this engine for me has been the Chess Programming wiki! If you're interested in developing your own chess engine or move library, this website has everything.
- Engine references that helped me improve the engine:
- Blunder
- Carballo
- Ethereal
- Stockfish
- Zahak
- Stormphrax
- Viridithas
- Alexandria
- Stash
- Starzix
- and many more open-source engines, these are just the ones I can name off the top of my head!
- bullet for allowing me to easily train the NNUE.
- Engine Programmers and Stockfish discord servers for their huge knowledge base/resources and advice.
- Huge thanks to Gabor Szots and the folks at CCRL for rating the engine!
