Skip to content

saisree27/Maelstrom

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

210 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MAELSTROM

a UCI-compliant chess engine made in Go

Version Estimated Elo CCRL Blitz
v3.3.0 ~3310 3334
v3.2.0 ~3200 3224
v3.1.1 ~3070 -
v3.1.0 ~3040 -
v3.0.0 ~2820 -
v2.1.0 ~2300 -
v2.0.0 - 2111

Play/watch games

Maelstrom often plays on Lichess here. Please feel free to challenge the engine on lichess whenever it is online.

Features

  • 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

Releases

Checkout and download binaries and source code from the Releases page.

Building from Source

Requirements:

  • go version 1.23.0 or later
  • any C compiler
  • AVX2 enabled processor (if not enabled, update engine/screlu/screlu.go with AVX2_ENABLED=false and 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

Engine Testing

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

References and Acknowledgements

  • 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:
  • 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!

About

a UCI chess engine written in Go

Topics

Resources

License

Stars

Watchers

Forks

Contributors