A chess engine implementation in rust.
/!\ since tree v2 start to be implemented, the engine is kinda buggy, the engine is currently on a really unstable state.
- Basic chess rules implementation
- Move validation
- Board representation
- Stockfish like engine
- Alpha beta pruning
- Iterative deepening
- Zobrist Hashing (for efficient board state representation)
- Transposition Tables
- Move Ordering
- With shallow depth foreseeing.
- Heuristic move ordering.
- MVV-LVA
- Time management
- Basic time allocation (total time / expected moves remaining)
- Anytime search capability
- Move urgency factors
- Only legal move
- Obvious captures/threats
- Quiescence Search
- Null Move Pruning
- Futility Pruning
- Late Move Reductions
- Razoring
- Opening Optimization
- Books based : precomputed known good opening moves
- Knowledge based : specific rules for opening (like how many square from the center are attacked)
- Endgame tables
- Aspiration Windows
- Principal Variation Search (is an improvement of alpha beta pruning)
- ProbCut
- Static Exchange Evaluation (SEE)
- Extensions
- Check extensions (extend depth for checks).
- Singular extensions (extend depth for unique critical moves).
- Lazy SMP
- make transposition table thread safe (best way is probably with a RwLock)
- make nodes access thread safe
- Parallel calculation from the root node
Set foreseeing to use qsearch, use static evaluation for stable move and search forward only for unstable. Fix razoring that is currently pruning good moves. Investigate on why it returns a None lv when tree size is bigger than max size BEFORE generation Check how to fix cyclic references with transposition table.