Gwaihir is a strong (hopefully in the future) UCI compatible chess engine written in C++.
Board representation:
- Move generation (with Magic Bitboards)
- Constrution of position from FEN
Search:
- Negamax
- Alpha-Beta pruning
- Move Ordering (Hash > MVV-LVA > Killer > History)
- Iterative Deepening
- Transposition tables (with Zobrist Hashing)
- Quiescence search
- Principled Variation search
- Aspiration windows
- SEE
- Search Extensions Reductions
- Late Move Reduction (LMR)
- Null Move Pruning
- Lazy SMP
Evaluation:
- Material
- Game-Phase dependent evaluation
- Piece-Square Tables
- Pawn Structure
- Evaluation of Pieces
- Evaluation Patterns
- Mobility
- Center Control
- Connectivity
- Trapped Pieces
- King Safety
- Space
- Tempo
- Evaluation/Pawn TT
Other game phases:
- Opening book
- Endgame tablebases
Miscellaneous:
- UCI protocol implementation
- Time control
Tests:
- Perft Test
- Engine could not mate in NBK vs K endgame (sigh...)
- Figure out why are so few nodes searched if compiled with RelWithDebInfo
- 50 move rule
- MNPS drops significantly towards the endgame. Potential causes:
- More TT hits, so nodes are not being counted.
- History stack is getting too big.
- Minor - don't make illegal move when getting mated
- Minor - stop iterative deepening when there is a mate already
- Extensions and Reductions
- NMP
