Seaborg is a chess engine written from scratch in Rust. It isn't based on any existing engine, although the move generation scheme is heavily inspired by the approach used in Pleco.
Seaborg currently has minimal built-in understanding of chess strategy - the evaluation function is simple material counting. I've been reluctant to spend time working on something more complex than that as I'd like to incorporate a neural net-based approach in the future.
Seaborg implements the UCI protocol, and can sometimes be found playing on Lichess. He usually confounds opponents by playing bizarre opening plans like 1. ...a6, 2. ...b6, 3. ...c6 etc. in every game.
With no ability to differentiate between moves so early in the game (when material remains balanced in almost every variation to the horizon), every move looks equally good to Seaborg, so he selects the first one he sees..! Later in the game, Seaborg is often able to crush weaker opponents tactically, even after emerging from the opening with a horrible position.
During the initial development, I wanted to build a solid internal board representation, fast move generation, a variety of standard search features, including transposition tables, as well as the UCI protocol. All of this provides a base to continue developing the engine and start adding more positional awareness.
- Engine
- Bitboard board representing
- Magic bitboard move generator
- Pleco-inspired move generation scheme, using generics and traits. This approach increases code size in the compiled binary, but keeps the source code very clean and readable, while removing almost all branching from the movegen algorithm.
- Lockless shared transposition table
- UCI protocol
- Search
- Evaluation
- Material counting
The main future development direction is to improve static evaluation at leaf nodes using a neural net approach.