This is an archived page. Back to the blog.

Chess computer programming

Keep in mind: Chess computer programming is not the art of programming, it is the art of debugging.

Rainman chess

Rainman chess is the name of a chess computer I wrote as a spare time project. The name is due to the social nature of the chess computer. The software is written in C++ and the source code will be available when I am no longer embarrased about its appearance. The graphical interface is Winboard. Rainman is also up and running at FICS (free internet chess server) under the name of RainmanC (written Aug 2003). My user name there is joppe.

Rainman discussing chess with his brother

Downloads (win32)

  • Rainman v0.7.5 (25 July, 2003) Minor update, added support for .ini-files and configuration of e.g. hash tables sizes.
  • Rainman v0.7.3 (22 July, 2003) Added transposition tables, MTD(f) search, new alpha-beta, support for Nalimov end game tables (EGTB), enhanced transposition cutoff, refined killer move strategy, edit mode, FICS rating: about 1975.
  • Rainman v0.6.0 (28 January, 2003) Added king's safety, development, rudimentary quiescence search and a number of minor fixes for stability, FICS rating: about 1875.
  • Rainman v0.5.4 (27 December, 2002) Added pawn structure assessment to the evaluation, FICS rating: about 1800.
  • Rainman v0.5.3 (5 December, 2002) New and improved. Added incremental mobility assessment, rudimentary move ordering and experimental quiescence evaluation estimator. Implemented chess clock. Acceptable playing quality with some exceptions, ~100 knodes/s, FICS rating: about 1650.
  • Rainman v0.4.2 (19 november, 2002) First version. Naive implementation of data structures, alpha-beta pruning with iterative deepening, small opening book. Poor playing quality, ~30 knodes/s, FICS rating: about 1400.
Put all files in the same directory (preferably c:\program files\rainman_v075). Run the attached file winboard.bat (or fics.bat to play at FICS).

Work in progress

Below is the current status on the work in progress (Rainman v0.7.x). Test runs suggest that v0.7 will lose only one game in ten to v0.6 (there are some draws in there too).
  • Transposition tables (completed)
  • Alpha-beta pruning rewrite, with hash (completed)
  • Endgame table databases, Nalimov egtb (completed)
  • MTD(f) search implementation (completed)
  • MTD(f) experiments using binary search and/or step increment (implemented but not in use)
  • Reuse of the alpha-beta bounds returned by MTD(f) when depth was not finished (implemented but not in use)
  • Ponder (thinking on the opponent's time)
  • Aspiration window at MTD(f) first iteration
  • History heuristic, null move heuristic and other move ordering
  • More intelligent quiescence search than checks only: recapture, threats on major pieces
  • Search extentions (sex search) and variable cost per move in a tree path: 1/n smaller cost for principal variation => n + 1 depth for main principal variation
  • Internal iterative deepening (unseen nodes)
  • Futility pruning

Web resources

Tim Manns web pages for Winboard/XBoard
Algorithms for chess computer programming