I’ve made many changes to MadChess, detailed below. I tested at my usual bullet time control (2 min + 1 sec / move) and found only a 30 ELO gain, a bit disappointing for so many changes. However, informal testing at 40 moves in 4 min shows a much larger gain- potentially 60 ELO. This makes sense because my engine is a relatively slow searcher. Perhaps the CCRL testers can verify?
I removed 174 lines of code and gained 30 ELO. At this rate, if I remove all the code my engine will play with super Grandmaster strength, ha ha!
Source code and EXEs available on the Downloads page.
- Added tapered evaluation.
- Calculate static score for middlegame and endgame.
- Determine game phase from material on board.
- Calculate weighted average of middlegame and endgame static scores.
- This eliminates the discontinuity of a sudden jump from middlegame to endgame static scores.
- Static score slowly tapers from middlegame to endgame.
- Moved piece location values (aka piece square tables) to text files and made configurable via a UCI option.
- Separated passed pawn static score into middlegame score and endgame score.
- Added knight mobility static score.
- Separated piece mobility static scores into middlegame mobility and endgame mobility.
- Improved evaluation of king safety, especially evaluation of coordination of attacking pieces.
- Eliminated Reduce Pawn Push, Reduce Capture, Reduce Killer Move, Reduce In Check, and Reduce Check UCI options. (All reductions disallowed.)
- Eliminated all reductions and lazy evaluation in principal variation.
- Simplified late move reductions.
- Added Reduce Root UCI option (default = false).
- Improved performance of Score Inaccuracy code. Renamed UCI option from Score Inaccuracy to Score Error.
- Added a UCI option, Max Nodes Per Second, to throttle search speed. Eliminated Evaluation Delay UCI option.
- Consult best move cache in main search and quiet search instead of only in main search.
- Age values in history cache when receiving new position (reduce 90%) and during search (reduce 50% if value exceeds maximum).
- Eliminated Middlegame Time Factor UCI option. (All moves given equal time.)
- Improved time management, especially for traditional time controls (such as 40 moves in 4 minutes). Interrupt if ply takes four times longer than expected to search.
- Refactored code.
- Removed 174 lines of code.
- Rewrote to comply with Microsoft managed recommended rules.
- Rewrote to comply with JetBrains ReSharper default rules.