Author: Robert Hyatt
Date: 12:01:13 11/08/99
Go up one level in this thread
On November 07, 1999 at 22:50:26, Nicolas Carrasco wrote: >Hi guys, > >I guess how is the Crafty book position format,Is there any Documentation? > >Thanks This is not really hard. two pieces of data: (1) the 'book hash signature' is unusual. If you take the hash signature before you make a book move, and the hash signature after you make a book move, you have the stuff you need. I take the upper 16 bits of the hash signature _before_ making the move, and combind with the lower 48 bits of the hash signature _after_ the book move is made. I do this so that all book moves from the same 'parent' position have the same upper 16 bits. (actually, other book moves from different parent positions may have the same 16 bits, but that is unimportant. The main point is that from a position P, all the successor positions will be different in the right-most 48 bits, but identical in the leftmost 16 bits. (2) I sort these hash signatures in simple ascending order after I parse the entire (huge) PGN input file. This collects all moves from the same parent together. The first 32K words in the book file are indices to groups of moves with the same upper 15 bits (I don't use all 16 at present, simply to reduce the size of this 'index' by a factor of two). Each of these indices points further into the book file to a 'cluster'. A cluster has (a) a count (number of moves in the cluster, which is the number of moves which have the same upper 16 bits) and then one entry for each book position. To find known book positions, I do this: 1. take the upper 15 bits of current (before book moves tried) hash signature and read that specific index from the front of the file (15 bits means 0 <= N < 32768). That index points into the book file to the 'cluster'. Seek to that byte and read the int there, which is the number of moves in that 'cluster'. 2. for each move in the move list, make one, and compare the rightmost 48 bits of the resulting hash signature with the rightmost 48 bits of the hash signature in the book file. If you get an exact match, the move you just tried is a valid book move. After you do that, pick from the moves you found, based on whatever you want to use for selection rules. Look at chess.h, "BOOK_POSITION" to see what is in the book entry besides the hash signature... I wrote the book like this as it lets me do one I/O to read in the entire 'cluster' and get all the possible book moves for the current position. I don't have to do N seek/reads to find if a move is a book move or not..
This page took 0 seconds to execute
Last modified: Thu, 15 Apr 21 08:11:13 -0700
Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.