I have released version 2 of my chess engine. I’ve rewritten the engine from scratch in a more procedural style code- as opposed to the sub-optimal (for chess engines at least) object-oriented style I used in MadChess 1.x.
The engine is about 115 – 160 Elo stronger than its predecessor, depending on time control. I estimate it is about 2350 Elo.
Source code and EXEs available on the Downloads page.
I have added parameters to limit the playing strength of MadChess 2.0 Beta.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
The simplest way to limit the playing strength of MadChess 2.0 Beta is to set the LimitStrength and Elo parameters. The engine will automatically configure material scores and positional knowledge.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
In addition, the engine will configure search speed (Nodes Per Second), move error, blunder error, and blunder percent based on the Elo value.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
I added rook and queen on 7th rank evaluation to MadChess 2.0 Beta. The code awards a bonus for a rook or queen on the 7th rank if the enemy king is on the 8th rank (its 1st rank).
Also, I removed late move pruning. (When I implemented late move pruning in build 44 it added 39 Elo to the playing strength of MadChess 2.0 Beta.) I replaced it with more aggressive null and late move reductions, and more aggressive futility pruning, but found it decreased the playing strength. Next, I restored late move pruning and left in the aggressive reductions. I found the strength increased, but not quite back to where it had been. I discovered a non-linear relationship between these search techniques. The combined strength of null move reductions, LMR, LMP, and futility pruning is not additive. I experimented with various parameter configurations before deciding to abandon LMP. It took 300 hours of testing to confirm the revised search was equivalently strong to the search with LMP.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Win At Chess position test, 3 seconds per position
Bullet chess, 2 min / game + 1 sec / move
About the Blogger : Erik Madsen
I work as a Software Architect at an insurance company. We're building a modern tech stack in the cloud using C#, Azure, ASP.NET Core, Angular, TypeScript, etc.
I've always been interested in chess (a game of complete information) and poker (a game of incomplete information). This is my attempt to write chess-playing software. I'll get to poker later.
You may be interested to explore my general programming blog, ErikTheCoder.