Aart's Computer Checkers Page

Ongoing thoughts related to chess, checkers, or reversi programming can be found at Aart's blog. Discussions related to checkers can be found at the World Draughts Forum. Aart also wrote the UCI chess engine BikJump.

Checkers Engine: BikMove

Aart implemented an 8x8 straight checkers engine called BikMove that can be plugged into Martin Fierz' excellent CheckerBoard application. To install BikMove v1.0, download the following package, unzip it in the checkboard engines directory, and then import the engine through the Engine=>Select menu. All C++ source code of the checkers engine BikMove has been written by Aart Bik (except the endgame databases probing code, which is used with kind permission of Martin Fierz). The main features of BikMove are listed below.

Perft for Checkers

The perft method originated in the chess programming community as a way to verify the move generator of an engine. The method traverses the game tree up to various, increasing depths to count all leaf nodes at each given depth. These results are compared with pre-computed values to isolate bugs and timings can be used to analyze the performance of the move generator. The perft method can be applied to other game engines as well, such as perft for reversi or, as done on this page, perft for checkers. Below, perft numbers from the start position are given using the move generator of BikMove on a 2.2 GHz Core 2 Duo (optimized with "bulk counting"). [ANDROID]
perft(1)  =               7  in         0 ms.
perft(2)  =              49  in         0 ms.
perft(3)  =             302  in         0 ms.
perft(4)  =            1469  in         0 ms.
perft(5)  =            7361  in         0 ms.
perft(6)  =           36768  in         1 ms.     36,768.0 KN/s
perft(7)  =          179740  in         5 ms.     35,948.0 KN/s
perft(8)  =          845931  in        23 ms.     36,779.6 KN/s
perft(9)  =         3963680  in        86 ms.     46,089.3 KN/s
perft(10) =        18391564  in       398 ms.     46,210.0 KN/s
perft(11) =        85242128  in      1821 ms.     46,810.6 KN/s
perft(12) =       388623673  in      8395 ms.     46,292.3 KN/s
perft(13) =      1766623630  in     37182 ms.     47,512.9 KN/s
perft(14) =      7978439499  in    174947 ms.     45,604.9 KN/s
perft(15) =     36263167175  in    808155 ms.     44,871.5 KN/s
perft(16) =    165629569428  in   3767118 ms.     43,967.2 KN/s
perft(17) =    758818810990  in  17317695 ms.     43,817.5 KN/s
perft(18) =   3493881706141
perft(19) =  16114043592799
perft(20) =  74545030871553
Aart implemented a distributed version to compute perft(18) through perft(20) on a cluster of machines. The breakdown per move (a must-have feature for debugging a move generator) for these depths is shown below.
       move      divide(18)    divide(19)     divide(20)
------------------------------------------------------------
  0  : 12-16 :   550829166472  2517202147314  11531470109861
  1  : 11-16 :   566149929068  2564849953998  11736729175821
  2  : 11-15 :   435063007630  2041959240377   9515983205474
  3  : 10-15 :   472279451484  2180656975018  10055597639275
  4  : 10-14 :   402570639569  1859042884028   8600202424158
  5  :  9-14 :   441590753001  2068865301476   9698986164172
  6  :  9-13 :   625398758917  2881467090588  13406062152792
------------------------------------------------------------
                3493881706141 16114043592799  74545030871553
Thanks to Martin Fierz, Ed Gilbert, and Ed Trice for verifying various perft numbers with their own move generators.

Checkers for Android

[Icon] Checkers for Android is a simple standalone 8x8 straight checkers application for the Android phone. The application is available for free at the Android Market and consists of a checkers engine (a Java version that evolved into BikMove) together with a GUI that accepts moves through the touch screen or trackball. More information can be found at Aart's Android page.

Please note that this page is privately maintained by Aart Bik. LinkedIn