Improved search and stability
General
- Updated CMakeLists.txt
- Additional validation on promotions when decompressing and checking for legality
- e.p. moves are now treated as captures
- Configured alignment for structures which are not shared between threads
- XOR trick used to improve the performance of the transposition table with many threads
hashfull
now determined with a sample of the first 4000 entriesMAX_PLY
increased to 255- UCI code now rejects
setoption
commands while a search is running - Removed "Move from Hash" due to regression against weaker engines
- Transposition table is now locked when aging to prevent crashes between games
- Topple's move generator now generates promotions separately to other pawns moves and captures
- Reduced the memory overhead of move generation
- Fixed compilation error for ToppleTune
- Added unit tests for move compression and for the new hash entry structure.
- Fixed a bunch of compilation warnings
Search
- Promotions are now generated with captures to be sorted first
- Removed separate generation stages for killer moves (now treated as quiets)
- Losing captures are now sorted after quiet moves
- Captures sorted by MVV instead of SEE.
- Move generator can now skip quiet moves without generating them
- History heuristic now scales the previous score to prevent high values being reached
- Lower reduction used in LMR if the evaluation is improving
- Added static null move pruning
- History leaf pruning now only allowed at depth 1
- Added late move pruning
- Futility pruning and LMR are now enabled for killer moves
Evaluation
- No change
Based on self play testing, 0.7.1 seems to be around 50 elo stronger than 0.7.0 on a single thread and around 100 elo stronger on 4 threads, though actual increases are likely to be much less.
I'd also like to thank @vshcherbyna for his help with debugging a particular infuriating crash.