Clemens is an UCI compatible Chess Engine written in Go.
The binaries for Linux and Windows can be downloaded from the Releases section. Those binaries can be used in every UCI compatible Chess GUI, like Cute Chess or the Arena Chess GUI. There is also a small web UI at https://chess.haardiek.org/ where you can play against the current version, Of course, this version is very limited.
You can also build the program from the source.
The project includes a Makefile for this purpose.
Executing make
will build the binaries.
The binaries with the .exe
extension are for Windows, while the others are for Linux.
The chess engine is the binary named clemens
.
- Evaluate Isolanis.
- Evaluate Doubled Pawns.
- Evaluate Passed Pawns.
- Transposition Table for Evaluations.
- Repetition
- Firty-Move Rule in Evaluations.
- Bug Fix King Shield Evaluation.
- Bug Fix Piece Square Tables.
- Inplace Zobrist Hash Updates while making the move.
- Bug Fix Mobility and King Attacks.
- Draw Evaluation and Contempt Value.
- Static Exchange Evaluation in Quiesence Search.
- Major Bug Fix in Transposition Tables.
- Aging in Transposition Tables.
- Killer Moves in move order.
- Remove Mate Distance Pruning.
- Remove Null Move Pruning.
- Futility Pruning
- Delta Pruning
- Squares as uint8.
- Principal Variation Search
- Slightly better time control.
- Static Null Move Pruning.
- Bucket based Transposition Table.
- Null Move Pruning.
- Selection Sort on Move Order.
- History Heuristic.
- Countermove Heuristic.
- Move Ordering with MVV-LVA.
- Checkmate and Stalemate Detection.
- Improved King Safery by evaluating the King Shield.
- Pair Evaluation, e.g. Bishop Pair.
- Game Phases based Evaluation.
- Piece Adjustments based on Pawns.
- Rook Evaluation.
- Mate Distance Pruning.
- ELO Rating Script.
- Mobility Evaluation.
- King Zone Attacks.
- Move from Full Move to Ply.
- Null Move Pruning.
- Better UCI Handling.
- Transposition Table for Search Results.
- Speed up using some Implementation Details, using less Memory on the Heap and less Memory Allocation in general.
- Better Mobility with Piece-Square Tables in Evaluation.
- Quiescence Search.
- Add Aspiration Windows to Search.
- Basic Time Management.
- Use best Move from last Search first.
- Iterative Search
- Principal Variation Line.
The first version that you could somehow play against.
- Bitboard Implementation
- Sliding Pieces
- Magic Bitboards
- Chess Position
- Position from and to FEN String
- Generate Pseudo Legal Moves
- Make Move Funktion
- Perft Testing
- Basic Evaluation
- RudimentaryUCI Implementation
- Alpha-Beta Search Funktion
Since I had no idea how to write a chess engine at the beginning of the project, I did a lot of reading. Therefore, my special thanks go to the Chess Programming Wiki, an excellent source of information, but also to the engines Blunder, CPW Engine and Stockfish, from whose code I learned a lot.
Also, to my father, who reintroduced me to playing chess and thus was the inspiration for this project. That's why the engine bears his name.