Releases: znxftw/rudim
Rudim v1.4 - Draw Checks & Transposition Tables
Tournament Results @ 5+0, 1000 games (v1.4 vs v1.3) - Appx. 10 - 30 ELO gain
--------------------------------------------------
Elo: 11.82 +/- 15.79, nElo: 16.14 +/- 21.53
LOS: 92.91 %, DrawRatio: 36.80 %, PairsRatio: 1.16
Games: 1000, Wins: 301, Losses: 267, Draws: 432, Points: 517.0 (51.70 %)
Ptnml(0-2): [32, 114, 184, 128, 42], WL/DD Ratio: 0.94
--------------------------------------------------
Major Changes
- Threefold Check to avoid drawing in winning positions
- Fifty Move Rule Check to avoid drawing in winning positions
- History heuristic added for alpha-update nodes
- Transposition Table added (Current Fixed Size : 65536)
Minor Changes & Non-Solution Changes
- Perft moved to program instead of test, allowing the binary to Perft
- Minor optimizations to calculations, object allocation, array sizes etc.
- Coverage Check added to pipeline, tests added for multiple scenarios to bring up coverage to ~85%
- Pipeline runs 5+0.1 for 200 games tournament instead now. Better approximation of rating change with more games
- Cleanup methods are now combined into
Global.Reset()
for easier resetting of state
What's Changed
- optz: don't store moves by @znxftw in #30
- optz: default to 32 move list size for less resizing by @znxftw in #31
- feat: avoid threefold if eval > 0 by @znxftw in #32
- add step for coverage reports by @znxftw in #39
- Move perft to program by @Sanjanarajbk in #41
- build(deps): bump xunit.runner.visualstudio from 2.8.2 to 3.0.0 by @dependabot in #42
- add history heuristic by @znxftw in #43
- feat: add transposition tables by @znxftw in #44
- fix: cleanup after RandomTest by @znxftw in #45
Thanks to @rwbc for helping point out improvements
Windows build compiled by @rwbc
Full Changelog: v1.3...v1.4
Rudim v1.3 - Iterative Deepening & .NET 9
Major changes
- Moved to .NET 9
- Iterative Deepening Implemented
- Time management improved - does not flag as frequently
Minor changes
- Refactor for performance improvements
- uci "stop"
- uci "ucinewgame"
- uci "go" is now non-blocking and can be interrupted by other uci commands ("stop" or another "go")
- zobrist hashing implementation in place (not integrated to any transposition tables)
- fix uci illegal output move - knight was abbreviated as "k" instead of "n" when promoting
- update dependencies
Non-build changes:
- pipeline now does a benchmark for memory allocated & time taken
- pipeline now runs a tournament for current commit vs last stable release
- publish workflow to generate binaries for releases
What's Changed
- feat: zobrist hashing & benchmarking by @znxftw in #7
- upgrade: Migrated from .NET6 to .NET8 by @Sanjanarajbk in #10
- fix: dotnet version in pipeline by @Sanjanarajbk in #11
- Bump xunit.runner.visualstudio from 2.4.3 to 2.8.2 by @dependabot in #14
- Bump coverlet.collector from 3.0.2 to 6.0.2 by @dependabot in #15
- fix: warnings for assertNull and serializable obsolete for .NET8 or h… by @Sanjanarajbk in #18
- Bump xunit from 2.4.1 to 2.9.2 by @dependabot in #17
- Bump Microsoft.NET.Test.Sdk from 16.9.4 to 17.12.0 by @dependabot in #16
- Migrating to .NET9 by @Sanjanarajbk in #19
- add memory diagnoser & go to depth 8 by @znxftw in #26
- feat: add tournament to pipeline (fastchess) by @znxftw in #29
New Contributors
- @Sanjanarajbk made their first contribution in #10
- @dependabot made their first contribution in #14
Full Changelog: v1.2...v1.3
Rudim v1.2 - Killer Heuristic & Performance
Changelog
- Killer heuristic implemented
- Moved to .NET 6
- Refactored some implementations for performance and extensibility
- Used struct for Bitboard
- Used records for MoveType
Ideally with these improvements, Rudim should flag a lot less in games (even though it's very likely it will still take a bit of time in closed positions without any good captures / killer moves.
Other contributors : @prashantchoudhary
Rudim v1.1 - Performance & Hotfixes
Performance improvements and hotfixes to Rudim
- Rudim was failing at evaluating some promotion positions with UCI. This has been fixed, and perft has been extended to advanced positions to catch any problems with move generation at that level
- Performance improvements
- Moved from saving/restoring entire BoardState to restoring only the irreversible portions of BoardState (Copy-Make) and calculate the reversible portions using UnmakeMove()
- Added PieceMappings for faster lookup of GetPieceOn() used by the Move Ordering functions.
- Moved tests to run in release mode for realistic feedback
For a comparison, v1.0 took on average (in debug mode) ~11 seconds for perft(5,startpos) whereas v1.1 takes 4-5 seconds.
Most of the major improvements according to the profiler have been tackled - further performance improvements would require multiple smaller changes in implementations, which will be addressed later.
Rudim v1.0 - Minimum Viable Product
v1.0 can play chess above average.
Might flag with depths >7 in long games. For instantaneous moves, depth 5-6 works well.