Be notified of new releases
Create your free GitHub account today to subscribe to this repository for new releases and build software alongside 36 million developers.Sign up
- Added interior node recognisers for material draws
- King position is now included in the pawn hash table
- Added additional parameters for detached, paired and backwards pawns.
- Added linear king-pawn tropism parameters
- Adjusted king safety and blocked pawn evaluation
- Retuned all evaluation parameters
This is same version as the one playing in TCEC S16.
Estimated improvements are around 30 elo over 0.7.1 based on self play testing. Actual gains likely to be less.
- 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
hashfullnow determined with a sample of the first 4000 entries
MAX_PLYincreased to 255
- UCI code now rejects
setoptioncommands 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
- 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
- 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.
- Optimised threefold repetition checking
- Error messages are now printed to STDERR for easier logging
- Significantly reduced memory overhead in general
- Each thread now gets a thread local pawn hash (1MiB/thread)
- The Move From Hash feature can no longer return empty moves (this was likely the cause of illegal moves in 5-piece Syzygy positions)
- The Move From Hash feature will no longer be used if the hash move leads to threefold repetition
- Updated GCC to 9.1.0 (MSYS2)
- Added a znver2 compile for the upcoming Ryzen 3000 series.
- Quiescence root nodes are no longer counted twice
- Moved pawn structure evaluation to a separate file
- Retuned all parameters
- Added a parameter for candidate passed pawns
- Pawn structure evaluation is now performed setwise with bitboards
- Entries in the pawn hash table have been reduced in size
- King safety evaluation function now allows for attacks up to size 128
This should finally fix the illegal move issue.
Elo gains over 0.6.1 are reasonable, measured to be around +30 against a small gauntlet of 9 engines.
- ToppleTune will now compile on linux:
cmake . && make ToppleTune
- Default compilation settings for
- Fixed issues relating to illegal moves and converting won positions with 5-piece Syzygy tablebases enabled.
- Lower LMR reduction in PV nodes.
- Simplified king piece-square table. The table is now fully symmetric in the middlegame.
- Simplified isolated pawn evaluation: 24 terms to 4 terms.
The elo gain appears to be very small, given that most changes are just bugfixes and simplifications, but they may be larger for tests which use 5-piece tablebases or which don't use tablebase adjudication.
- Topple will now compile and run successfully on linux:
cmake . && make Topple
- Compilation now takes place with cmake's default options for release builds
- The 'x86-64' build has been replaced with a 'legacy' build which just uses GCC's default -march and -mtune settings.
- Removed YBWC, replaced it with Lazy SMP
- Slightly improved time management
- Uses hash table to find a ponder move even if there is only one legal move
- Implemented "move from hash" which allows Topple to move instantly if there is already an entry of a suitable depth in the hash table.
- No changes
On a single thread, there is a gain of around +5 elo compared to Topple 0.5.0 in self play.
On 4 threads, the improvement seems to be around +120 elo in self play (vs Topple 0.5.0 on 4 threads), though the actual improvement is likely to be less.
- The UCI "stop" command now waits for the search to finish before attempting to accept a new command.
- Added "mirror" command to mirror the board.
- Fixed a move compression issue which could lead to illegal promotion moves in the PV.
- Optimised repetition detection.
- Removed redundant array initialisation in SEE.
- Square array representation is now packed with bitfields.
- Removed buckets from pawn hash table.
- Added prefetching for pawn hash table.
- Pawn hash table is now thread safe.
- Pawn hash table is now cleared on ucinewgame.
- Hash table now avoids overwriting PV entries or entries which have a significantly greater depth.
- Removed several type constraints to allow the compiler to optimise more freely.
- Fixed a rare crash with Syzygy tablebases enabled.
- Completely rewritten search in PV nodes.
- Lazy SMP replaced with YBWC and PV splitting.
- Separate PV and zero window search.
- Removed unsound futility and history pruning.
- Added SEE pruning.
- Fixed a bug with incorrect mate scores being stored in the transposition table.
- Endgame Tablebases are now probed in quiescence.
- Improved move ordering based on the threat move from null move pruning.
- Added check to prevent duplicate killers from being stored.
- More conservative time management for non-repeating time controls.
- Faster move generation due to a smaller capture buffer size.
- Added a linear mobility evaluation term.
- Removed some evaluation terms which appear to be redundant in the middlegame.
- Blocked pawn evaluation no longer depends on whether or not the file is open.
- Retuned all values with Texel tuning.
- Fixed a symmetry issue with king safety evaluation
- Fixed a symmetry issue with blocked pawn evaluation
- Optimisations by removing some redundant popcounts.
Rank Name Elo +/- Games Score Draws 0 v0.4.0 -28 35 270 45.9% 27.4% 1 Counter-v3.2-windows-64 207 115 30 76.7% 33.3% 2 zurichess-neuchatel 83 110 30 61.7% 30.0% 3 Monolith_1_x64_popcnt 83 110 30 61.7% 30.0% 4 Fridolin310 83 110 30 61.7% 30.0% 5 ruy-1.1.9-windows_sse42 47 116 30 56.7% 20.0% 6 wyldchess1.51_bmi -12 128 30 48.3% 3.3% 7 pawny_1.2.x64.SSE4.2 -23 105 30 46.7% 33.3% 8 cheese-20-win-64-pop -35 96 30 45.0% 43.3% 9 ECE-X3.5 -161 124 30 28.3% 23.3% 270 of 270 games finished.
Rank Name Elo +/- Games Score Draws 0 v0.5.0 80 36 270 61.3% 27.8% 1 zurichess-neuchatel 207 126 30 76.7% 26.7% 2 Monolith_1_x64_popcnt 23 110 30 53.3% 26.7% 3 Counter-v3.2-windows-64 23 110 30 53.3% 26.7% 4 wyldchess1.51_bmi -108 111 30 35.0% 30.0% 5 pawny_1.2.x64.SSE4.2 -120 116 30 33.3% 26.7% 6 ECE-X3.5 -176 139 30 26.7% 13.3% 7 cheese-20-win-64-pop -176 122 30 26.7% 26.7% 8 Fridolin310 -207 103 30 23.3% 40.0% 9 ruy-1.1.9-windows_sse42 -241 116 30 20.0% 33.3% 270 of 270 games finished.
Hence a very rough estimated gain in strength of around 100 elo.
I've also got a website now: https://topple.dev/about in which I plan to document the development process in the future.
The main new feature in this release is support for syzygy tablebases, which can be enabled by setting the UCI SyzygyPath option.
Upon finding a line into a tablebase position, Topple will use the DTZ tables to produce an upper bound on the mate score, along with a possible mating line. This can be disabled by setting SyzygyResolve to 1.
This version also significantly improves SMP performance, thanks help from TCEC and the twitch chat during division 4 testing.
Topple v0.3.6 contains several improvements to search.
- Less aggressive null move pruning
- Revised singular extensions
- Fixed various bugs causing some moves to be searched twice
- Fixed race condition when evaluating pawn structures on multiple threads
- Reverted incorrect clamping of draw scores
- Info outputs now properly comply with the UCI protocol
- Modernised C++ to prevent memory leaks and potential crashes
- Implemented multithreaded Texel tuning for future use
- Reduced memory overhead of multiple threads
Overall strength improvements over v0.3.5 seem to amount to around 40 elo (self play) on a single thread. Gains on multiple threads are likely to be greater due to the bugfixes relating to SMP.
This version has identical strength to the version playing in TCEC S15.
Topple v0.3.5 contains several bugfixes and improvements to search and eval.
- Faster move sorting
- Prefetch before hash table lookups
- Internal iterative deepening now correctly sets the hash move
- Mate distance pruning no longer prunes the last move of the reported PV
- "Emergency" time heuristic when eval is going down
- Topple now moves instantly if there is only one legal move
- Topple uses more time if the position seems more complicated
- Understanding of endgames with bishops of opposite colours
- Topple now supports UCI Pondering.
- Searches only the move suggested by the GUI, and then start the timer when
- Elo gain of pondering not measured :(
Self-play testing shows an improvement of around 50 elo in self play with pondering disabled and a 40/2 time control, though the actual gains are likely to be less.
I've provided a much greater variety of builds this time, which are now named by their version and architecture.
Architecture names are based on: https://gcc.gnu.org/onlinedocs/gcc/x86-Options.html
Please pick the build which most closely matches your CPU architecture.