I strengthened MadChess by extending the search horizon of singular moves. I gleaned the idea from the Stockfish chess engine.
Quoting from my Pull Request #17:
- In the
GetSearchHorizon
method, added call to a new method,IsBestMoveSingular
, that determines if best move that had failed high in recent searches is best by a significant margin. - If so, extend the search by one ply. A code comment explains why:
- The best move (from the cache) is singular. That is, it’s the only good move in the position.
- Evaluation of the current position relies on the accuracy of the singular move’s score.
- If the engine misjudges the singular move, the position could deteriorate because no alternative strong moves exist.
- To increase confidence in the singular move’s score, search it one ply deeper.
In addition, in Pull Request #16 I implemented asymptotic history scores. This simplifies keeping history scores within defined bounds. Also I fixed a bug in the Standard Algebraic Notation (SAN) parser for positions where the moving piece is disambiguated by square (not merely by rank or file). These changes improved code quality but did not increase playing strength.
Singular move increased the playing strength of MadChess 3.1 Beta by 13 Elo.
Feature | Category | Date | Commit1 | WAC2 | Elo Rating3 | Improvement |
---|---|---|---|---|---|---|
Singular Move | Search | 2021 Jun 14 | 0c601ea | 290 | 2617 | +13 |
Endgame Eval Scaling | Evaluation | 2021 Apr 08 | 4d22dec | 286 | 2604 | +12 |
Bishop Pair | Evaluation | 2021 Mar 14 | 2960ec9 | 285 | 2592 | +22 |
Position Cache Optimization | Search | 2021 Feb 23 | 42d7702 | 286 | 2570 | +8 |
Move Generation Optimization | Search | 2021 Feb 17 | 22002dc | 287 | 2562 | +12 |
PVS and Null Move | Search | 2021 Feb 09 | f231dac | 285 | 2550 | +20 |
Remove Aspiration Windows | Search | 2020 Dec 20 | 4b7963b | 290 | 2530 | +9 |
Time Management | Search | 2020 Dec 19 | d143bb5 | 286 | 2521 | +8 |
Crash Bug | Search | 2020 Aug 29 | 2d855ec | 288 | 2513 | +0 |
King Safety | Evaluation | 2020 Aug 16 | 6794c89 | 288 | 2513 | +63 |
Eval Param Tuning | Evaluation | 2020 Jul 23 | bef88d5 | 283 | 2450 | +30 |
Late Move Pruning | Search | 2020 Feb 08 | 6f3d17a | 288 | 2420 | +29 |
Piece Mobility | Evaluation | 2020 Feb 01 | 5c5d4fc | 282 | 2391 | +62 |
Passed Pawns | Evaluation | 2018 Dec 27 | 103 | 279 | 2329 | +119 |
Staged Move Generation | Search | 2018 Dec 15 | 93 | 275 | 2210 | +39 |
History Heuristics | Search | 2018 Dec 03 | 84 | 275 | 2171 | +28 |
Eval Param Tuning | Evaluation | 2018 Nov 24 | 75 | 272 | 2143 | +47 |
Sophisticated Search Material and Piece Location |
Baseline | 2018 Nov 08 | 58 | 269 | 2096 | 0 |
- GitHub commit (hash) or Subversion source code revision (integer)
- Win At Chess position test, 3 seconds per position
- Bullet chess, 2 min / game + 1 sec / move