Releases: d-sparks/exacto
Releases · d-sparks/exacto
exacto 0.e
Basic program setup:
- Rewrote Exacto from scratch using the bitboard game representation
- "Magic bitboard" move generation for sliding pieces
- I generated my own magics, but quite poorly: 14 bits for rooks, 11 bits for bishops
- Legal (as opposed to pseudolegal + check detection) move generation
Search algorithms, pruning and heuristics:
- The main search algorithms are PVS/alpha-beta with alpha-beta quiescence searches at the leaves
- Selective reductions of the search tree:
- Adaptive null move forward pruning
- Late move reductions
- Pruning via transposition table
- Futility pruning (frontier and pre-frontier nodes)
- Razoring (pre-pre-frontier nodes)
- Delta pruning (in the quiescence search)
- Selective extensions of the search tree:
- Check extensions
- Recapture extensions
- Passed pawn extensions
- Move ordering:
- Hash table suggestions
- Internal iterative deepening
- Static exchange evaluation and MVV/LVA
- Piece value tables for positional gain estimation
- Killer move heuristic
- All moves are insertion sorted (no lazy move generation, yet)
Positional evaluation (tapered, lazy):
- Dedicated hash table for pawn structure evaluation. Knowledge of:
- Pawn chains
- Isolated pawns
- Backward pawns
- Doubled pawns
- Passed pawns
- Elementary detection of good/bad bishops, and preference for bishop pairs
- Bishop/knight differentiation.
- Rook placement:
- Preference for open files
- Preference for being on open files aiming at weak squares
- Preference for 7th rank
- Preference to develop, castle, etc.
- King safety:
- Attackers/defenders detection
- Enemy attacks on squares near king (preprocessor option, off by default)
- "Two move" attacks (preprocessor option, off by default)
- Pawn fortress / castling destination
- File strength around king
- Attacker to defender ratio (preprocessor option, off by default)
- Pieces desire to be "aimed at the enemy king"
- Undefended minor piece penalty
Gameplay:
- Opening book (hand made, overview)
- Dynamic time management (conservative, but much less conservative than 0.d)
- Iterative deepening