MadChess 2.1 Released

I have released version 2.1 of my chess engine. I built this version of MadChess using .NET Core, Microsoft’s new cross-OS development platform. I have provided source code and binaries for Windows on the Downloads page.

I do not have access to a Linux or Mac machine. If you are feeling adventurous and would like to build Linux or Mac binaries, please refer to Getting Started with .NET Core on Windows / Linux / MacOS for instructions on how to build .NET Core applications.

I have configured the MadChess project to build a self-contained application. All binaries required to run MadChess are included in the ZIP file. Unlike previous versions of MadChess, no prerequisite .NET framework must be installed prior to running the engine.

MadChess 2.1 is about 60 or 70 Elo stronger than version 2.0. It includes the following improvements, some impacting playing strength, some more focused on code quality.

  • Converted cached position from a class to a ulong primitive with bitwise operations.
  • Tuned evaluation using the technique described by Peter Österlund.
  • Include static exchange score when determining move futility.
  • Update history heuristic value of previously played quiet moves that failed to produce a cutoff.
  • Extract principal variation from a triangular array (rather than from hash table).
  • Simplified time management.
Bookmark the permalink.


  1. Hi,
    first, congratulations for this amazing work.
    I would have a couple of questions about MadChess:
    – I guess the main goal of the IA is to checkmate the opponent king. Nevertheless, is it possible to assign alternative goals to the AI ? For example, goals could be hunting specific chess pieces other than the king, or gaining control of a certain zone, etc. Alternative goals could be relevant for training exercices.
    – Some chess training exercice require no king at all on the board. Would MadChess be running without any king to checkmate ?
    – Is it possible to set up initial positions on the board that are not really compatible with chess? For instance an initial position where the king would be under direct attack , or another one where more than 10 knights would wander around ?
    – Would it be possible to easily extend the rules of the chess engine ? For instance by adding new pieces with specific moves and attacks ?
    – How flexible is the engine ?
    Thanks in advance

  2. Hi David,

    Sorry for my delayed response. Yes, the goal of the AI is to checkmate the opponent’s king. This is accomplished by 1) a “mailbox” board representation (not bitboards), 2) a search function that examines potential moves (some more deeply than others), and 3) an evaluation function that scores a position.

    The evaluation function returns a score based on material and positional factors (more mobility, safer king, etc) or simply returns a “mate in x” score- mate in 1 move being the best possible score. If you wish for the engine to search for alternate goals, you could rewrite the evaluation function to score alternate positional features (perhaps even disregarding checkmate as the best possible score).

    No, it’s not possible to easily extend the rules of my chess engine. It’s programmed for chess, not other games. If you’re interested in engines that support chess variants, I suggest Sjaak by Evert Glebbeek.

Leave a Reply

Your email address will not be published. Required fields are marked *