I improved MadChess 3.0 Beta’s detection of drawn endgames. The IsPawnlessDraw
method scores the following positions as drawn. Though it continues to search moves for a swindle (opponent mistake that makes a drawn game winnable).
- 2N vrs <= 1 Minor
- Q vrs 2B
- Q vrs 2N
- Q vrs Q
- Q vrs R + Minor
- R vrs R + <= 1 Minor
- Q vrs 2R
- 2R vrs R + Minor
- 2R vrs 2R
Testing revealed considering R vrs <= 2 Minors a draw increased evaluation error and caused the engine to play weaker. I left that endgame in the IsPawnlessDraw
function as commented out code (explaining the regression) to thwart any temptation to add it later.
In addition, I added a DetermineEndgameScale
method that scales down the score of difficult to win endgames.
- Winning side has no pawns and is up by a bishop or less.
- Winning side has a rook or more.
- Winning side has less than a rook.
- Sides have opposite colored bishops and no other pieces.
- All other endgames are scaled by
winningPawnCount
.
Also, I added a GetTotalScore
method that scales down the score as games approach a draw by 50 moves (100 ply) without a capture or pawn move.
Finally The GetStaticScore
method brings together the entire evaluation calculation. See the Evaluation.cs source code file for full details. Here’s the code in simplified form.
These code changes increased the playing strength of MadChess 3.0 Beta by 12 Elo. MadChess has crossed the 2600 Elo threshold, at least at bullet chess (2 min / game + 1 sec / move). To date, I have tested MadChess 3.0 Beta exclusively at bullet time control. I was curious how MadChess would perform given more time per game. Of course I’d give its opponents equal additional time. Wouldn’t this benefit both engines equally? Well, chess engines do not scale equally with time. Would MadChess 3.0 Beta or its opponents benefit more from the additional time? Or would it be a wash? That is, they’d scale equally and MadChess 3.0 Beta would achieve the same blitz rating as bullet rating?
MadChess has crossed the 2600 Elo threshold at bullet time control.
It turns out, similar to previous versions, MadChess scales better per time than its opponents. Its blitz chess rating is 2638 Elo. I have started a tournament with rapid time controls (14 min / game + 7 sec / move), however, I won’t know the results for a month or so. Unlike bullet and blitz, I do not have a database of chess engine games at rapid time control. Therefore I cannot run a gauntlet tournament pitting MadChess 3.0 Beta against ten other engines with established ratings. I must run an all-play-all round robin tournament of 48 engines, including MadChess 3.0 Beta, to establish ratings.
MadChess scales better per time than its opponents. Its blitz chess rating is 2638 Elo.
My priority now is to ensure MadChess 3.0 Beta has feature parity (UCI_LimitStrength, MultiPV, etc) with the last release of MadChess, 2.2. Once that’s complete, I’ll release MadChess 3.0.
Feature | Category | Date | Commit1 | WAC2 | Elo Rating3 | Improvement |
---|---|---|---|---|---|---|
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