Jump to Main Content

What makes Monarch tick?

Monarch is a standard chess engine in the sense that it uses well know algorithms to search for the best moves. The long term aim is to produce an engine that plays interesting and absurdly aggressive chess. The target is to reach 2500 ELO by January 2007.

All of Monarch's code is written in 'C' and is 100% original - it's not based on any other program. The basic design elements consist of:

  • Board is internally represented as an array (version 1.0 used bitboards and a pre-generated move table)
  • Piece square tables for the evaluation function
  • PVS search
  • Quiescent search with checks searched at the first ply (occasionally at deeper plies)
  • Hash tables with a depth replacement and always replace scheme
  • Move ordering based on hash table, Static Exchange Evaluation, killers and history statistics
  • Null move (R=3)
  • Enhanced Transposition Cutoff (ETC)
  • Internal Iterative Deepening (IID)

To Do...

The next stage of development will include:

  • Better evaluation function (Monarch evaluation shouldn't be difficult to improve upon)
  • Static evaluation hash table
  • Pawn hash table

Change Log

Version 1.7 - August 2006 (Estimated Strength 2100 ELO on SSDF scale)

  • Added basic understanding of bishop and rook mobility
  • Change to hash tables to allow previous search results to cutoff at none PV nodes

Version 1.6 - June 2006 (Estimated Strength 2080 ELO on SSDF scale)

  • Corrected bug that caused Monarch to crash when playing a tournament in Arena
  • Added Futility Pruning - can be enabled or disabled as a UCI option

Version 1.5 - June 2006 (Estimated Strength 2040 ELO on SSDF scale)

  • Re-write of 80% of the code
  • Changed from a bitboard and static move table representation to an array format
  • Greatly simplified the code - replaced all of the color specific elements
  • Removed most global variable in preparation for implementing a parallel version at some stage
  • Created test routines for all procedures
  • Roughly halved the nodes per second compared to version 1.0 but bugs are also greatly reduced
  • Fixed a nasty UCI interface bug that sometimes caused the engine to freeze up - version 1.5 seems to be 100% rock solid
  • Improved the stability of the search - there are now far fewer false fail highs
  • Add knowledge to mate with KQ v K, KR v K, KBB v K and KBN v K
  • Improved the time management heuristics
  • Added hashing at first ply of quiescent search

VERSION 1.0 - April 2004 (Estimated Strength ELO 1990 on SSDF scale)

  • Complete rewrite in 'C' (was Delphi)
  • Improved stability
  • Added UCI 2 support (Current Line and Refutation)
  • Enhancements to basic program structure
  • Changed the method of draw detection from a small hash table to a move stack
  • Added incremental static piece evaluation (was computed at the leaf)
  • Speed up of ~80% compared to the Delphi version. I'd estimate that only 10%-15% is due to the better compiler and the remaining speed increase is due to a better structure and incremental evaluation
  • Solves 283 of the 300 WAC problems in 5 seconds on a 2 GHz Pentium 4M.