New Computer Chess Programming Blog

It’s been six years since I’ve done any serious chess development. During that time family life has been full-on, with two high energy daughters and one demanding wife. The pace of work has also picked up the pace. While I haven’t had time for chess computer coding I certainly haven’t been far from the computer chess scene (it’s so addictive!). There have been few days when I haven’t checked CCC.

During those seven years I’ve also observed many changes in the world of computer chess, some of which have piqued my desire to code another engine. From my perspective here are the notable developments:

  • Magic Bitboards: These provide the ability to quickly generate attack tables for sliding pieces. The tables can be used for move generation or to create sophisticated evaluation functions. Back in 2006 the jury was still as to whether or not bitboards are any better than other board structures; Magic Bitboards seem to tip scales heavily in favor of a bitboard architecture. I’d really like to develop a magic bitboard engine.
  • Ubiquitous 64 Operating Systems: 64 bit is now the norm. This wasn’t the case back in 2006. This makes bitboard engines even more attractive.
  • Late Move Reduction: This seems to be one of the main developments in computer chess over the last few years. It was starting to be discussed back in 2006 but now it seems to be the norm. I think there are many possibilities for enhancing the basic LMR techniques and making a highly selective engine.
  • New Testing Tools & Methods: Fabian Letouzey managed to improve Fruit at an amazing pace. One of his secrets was his obsession with testing. It would seem that playing thousand of super fast games (e.g. 1 second per game) is the best way to prove, or disprove, potential improvements. I find this interesting. One of my other passions is marketing. I suspect computer chess testing methods may provide a philosophical framework for improving businesses in general. Anyway I’d like to set up such a rapid-fire testing environment.

As a result of all of this I’ve downloaded Visual Studio Express, set up this website and rummaged around to find my old Monarch code. I thought about carrying on with Monarch chess but it doesn’t seem quite right. The new project will be a new code base (apart from basic i/o code), so I think it’s right I start a new engine. This new engine will be called “Maverick“, which conveys, in one word, my overall design philosophy and aims.

If you want to follow along you can access my live code base here. I’ve also set out what I’m striving to achieve on the development philosophy page.

I’d be interested to hear your comments and suggestions!

  • Joao Marco

    This is an excellent idea! Since the release of Houdini 3 and all the buzz around it I was somewhat driven to the computer chess world and since then I had the goal of writting my own chess engine.
    There is a lot to learn to get into it and start, and this blog could be of great help to start and evolve step by step.
    My language of choice is also C because I don’t know C++ well.
    Hope you will keep this up and running!

  • Thanks Steve for setting up this site. I find your articles really interesting.

    After a gap of almost 10 years, I am also restarting my efforts to develop a chess engine.

    My last attempt was a standalone program that played some sort of chess without even handling all special moves – I gave up before completing it and never released it. That time (due to lack of internet access) I had almost zero knowledge about how chess engines normally work. I didn’t even know that there are freely available chess interfaces and standards (UCI/xboard) to communicate with them so I also spent time developing some sort of UI for my engine. My old engine used a 2D array representation of board, very simple incremental evaluation function (based on material score and some very simple positional scores), and did plain min-max search with alpha-beta pruning.

    This time I plan to try out more advanced search and evaluation function. I am planning to use a simple move generation techniques like 0x88 at least initially as I find bitboard a bit too complex (maybe I will try it in next attempt – or modify my program later to add bitboard support). Even 0x88 move generation looks like a great improvement over what I did last time 🙂

    • Steve Maughan

      Thanks for the compliment!