Tofiks UCI chess engine - Yes, I am a dog and, yes, I play chess. Get over it!
Installation
Latest stable version 64-bit binaries can be found in the release section.
Compile yourself
- Clone repository or copy files
- Make sure you have Golang 1.19+ installed
make build
will compile it your native architecture.
- In the Makefile you can change the
GOAMD64VERSION
variable. The values range from v1 to v4 and include various sets of extended instructions. A higher v-value should be expected to have better performance but might have more specific architecture and instruction set extension requirements. Most modern CPUs should be AVX2 compatible which is v3, v4 requires AVX512 support.
Feature Overview
- Magic Bitboard move generator
- MVV-LVA move ordering
- Principal Variation Search
- Null Move pruning
- Late Move pruning
- Transposition table
- History Heuristic
- Killer Move Heuristic
- Quiescence search
- Draw detection - repetition, 50-move rule and insufficient material
- Piece-Square-Table evaluation for early game and endgame.
- Pawn structure evaluation
- King safety-activity evaluation
- Piece specific evaluation
- PolyGlot opening book support
- Supported UCI commands and options:
- uci - 'handshake' initialization by the GUI, engine responds with its id and supported options with their defaults and ranges
- go - with the following options: wtime, btime, winc, binc, movestogo, depth, movestime, ponder and infinite
- setoption name \<option> value \<value>
- Ponder default false
- OwnBook default false - if there is a PolyGlot
book.bin
in the same directory as the executable the engine will try to load it and allow the option to be toggled.
- Hash - Transposition Table size in MB
- Move Overhead - lag compensation variable. Works as a negative increment to reduce the allotted thinking time. Crucial for playing over the web where the
go
time variables might be already outdated when receiving the command and also adjust for the time the for the GUI to receive the bestmove
.
- Non-UCI commands:
- go perft \<depth> - perft display number of leaf nodes at depth grouped by legal moves in the position also displays the nodes per second value for performance benchmarking.
Acknwoledgments
- Lichess and the Community for nurturing my love for chess and offering a free open source platform for chess. Tofiks can be found playing on lichess under its bot account.
- The authors of Official lichess bot client. It saved a lot of time and headaches adopting a reliable solution to interact with the Lichess API instead of coding all myself.
- The authors of Blunder engine. It is a great reference to practical examples of engine principles and algorithms with its well documented code.
- Everyone on TalkChess.com Forums who have been helpful and patient explaining even very basic concepts to me.
- Chess Programming Wiki and its maintainers for creating a very comprehensive resource for everything chess programming related.