My propriety database format to hold a record of every move.
Field | Bits | Range | Comment |
---|---|---|---|
Move From | 6 | A1=0, H1=7, A8=56, H8=63 | File=<file>-'A', rank=<rank>-'1'. Castle and Enpassant moves are assumed to be valid moves. |
Move To | 6 | A1=0, H1=7, A8=56, H8=63 | File=<file>-'A', rank=<rank>-'1'. Castle and Enpassant moves are assumed to be valid moves. |
Promotion Type | 3 | 000-111 | 000=unused, 001=Knight, 010=Bishop, 011=Rook, 100=Queen. |
White Elo | 11 | 0-2047 | Actual elo of white – 1000. |
Elo Diff | 8 | 0-255 | 0-255=w, 256-511=b. |
Elo Diff Neg | 1 | 0-1 | 0=positive, 1=negative. |
%WDL | 9 | 0-511 | 0-99=Percentage Win, 100-199=Percentage Draw, 200-299=Percentage Loss. From White Perspective. Unused Values 300-511. |
Count | 12 | 0-4095 | Rolling. |
Weight | 8 | 0-255 | A measure for the likelihood of a win after that particular move has been made. 0-127=w, 128-255=b. Default is to use ELO changes to calculate this. |
NOTE: A total of 64-bits.
Moves are stored in format:
Assumed that the associated moves are for a pawn and this promotion is valid.
The average of the ELO rating for the White player - 1000.
Used to calculate the ELO rating of the Black Player.
Either add, or subtract this figure from the White Elo.
The percentage of Wins, Draws and Losses for the White Player.
Values | Description |
---|---|
0-99 | Percent of Wins. |
100-199 | Percent of Draws. |
200-299 | Percent of Losses. |
300-511 | Unused Values. |
The number of games having played this move.
A maximum of 4096 games is recorded.
The other fields using this figure for their calculations, such as %WDL, should be recalculated / updated even though this maximum number of 4096 is reached.
A measure for the likelihood of a win after that particular move has been made.
Range is 0-255.
Default is to use ELO changes per this formula:
white_probability = (1.0 / (1.0 + std::pow(10.0, ((rating1 - rating2) / 400.0)) ) ); black_probability = 1 - white_probability; if (rating1 > rating2) { result=-black_probability/20; } else if (rating1 < rating2) { res=white_probability/20; }
NOTE: A bespoke formula could be used to update this weighting.