I've computed many endgame databases before: for chess, my 10x8 chess variant Gothic Chess (see http://www.gothicchess.com/javascript_endings.html) and checkers. I recently switched my checkers database builder to a very fast 64-bit version, with buffering, no subdivisions, and code able to handle up to 12 pieces total.
Examine this report for a simple slice of king vs. king
Code: Select all
***********************************************************************************
* 2-piece database, 1 white king 0 white checkers vs. 1 red king 0 red checkers *
***********************************************************************************
TOTAL POSITIONS: 992
TOTAL BYTES: 992
TOTAL WINS (white to move)........... 230
TOTAL DRAWS (white to move)........... 654
TOTAL LOSSES (white to move)........... 108
Wins resolved as jumps................. 72
Draws resolved as jumps................ 0
Losses resolved as jumps............... 0
Wins resolved from moving.............. 158
Draws resolved from moving............. 0
Losses resolved from moving............ 108
Wins with NO JUMPS for EITHER SIDE..... 140
Draws with NO JUMPS for EITHER SIDE.... 650
Losses with NO JUMPS for EITHER SIDE... 108
Draws resolved from unknowns........... 654
Cumulative win length improvements..... 0
Cumulative loss length changes......... 0
Database resolved after 11 iterations (includes the JUMP pass).
The longest win requires 11 ply to complete.
There are 32 wins of the same length in this database slice.
One of the longest white to move and win positions: (white pieces start at top of board)
***************************************************************************************************************
*----------*----------*----------*----------*----------*----------*----------*----------*----------*----------*
*----------*----------*----------*----------*----------*----------*----------*----------*----------*----------*
*----------*----------*----------*----------*----------*----------*----------*----------*----------*----------*
*----------*----------*----------*----------*----------*----------*----------*----------*----------*----------*
*----------*----------*----------*----------*----------*----------*----------*----------*----------*----------*
***************************************************************************************************************
*----------*##########* *##########* *##########* *##########* *----------*
*----------*##########* *##########* *##########* *##########* *----------*
*----------*### 32 ###* *### 31 ###* *### 30 ###* *### 29 ###* *----------*
*----------*##########* *##########* *##########* *##########* *----------*
*----------*##########* *##########* *##########* *##########* *----------*
***************************************************************************************************************
*----------* *##########* *##########* *##########* *##########*----------*
*----------* *##########* *##########* *##########* *##########*----------*
*----------* *### 28 ###* *### 27 ###* *### 26 ###* *### 25 ###*----------*
*----------* *##########* *##########* *##########* *##########*----------*
*----------* *##########* *##########* *##########* *##########*----------*
***************************************************************************************************************
*----------*##########* *##########* *##########* *##########* *----------*
*----------*##########* *##########* *##########* *##########* *----------*
*----------*### 24 ###* *### 23 ###* *### 22 ###* *### 21 ###* *----------*
*----------*##########* *##########* *##########* *##########* *----------*
*----------*##########* *##########* *##########* *##########* *----------*
***************************************************************************************************************
*----------* *##########* *##########* *##########* *##########*----------*
*----------* *##########* *##########* *##########* *##########*----------*
*----------* *### 20 ###* *### 19 ###* *### 18 ###* *### 17 ###*----------*
*----------* *##########* *##########* *##########* *##########*----------*
*----------* *##########* *##########* *##########* *##########*----------*
***************************************************************************************************************
*----------*##########* *##########* *##########* *##########* -------- *----------*
*----------*##########* *##########* *##########* *##########* |RRRRRR| *----------*
*----------*### 16 ###* *### 15 ###* *### 14 ###* *### 13 ###* -------- *----------*
*----------*##########* *##########* *##########* *##########* |RRRRRR| *----------*
*----------*##########* *##########* *##########* *##########* -------- *----------*
***************************************************************************************************************
*----------* *##########* *##########* *##########* *##########*----------*
*----------* *##########* *##########* *##########* *##########*----------*
*----------* *### 12 ###* *### 11 ###* *### 10 ###* *### 09 ###*----------*
*----------* *##########* *##########* *##########* *##########*----------*
*----------* *##########* *##########* *##########* *##########*----------*
***************************************************************************************************************
*----------*##########* *##########* *##########* *##########* *----------*
*----------*##########* *##########* *##########* *##########* *----------*
*----------*### 08 ###* *### 07 ###* *### 06 ###* *### 05 ###* *----------*
*----------*##########* *##########* *##########* *##########* *----------*
*----------*##########* *##########* *##########* *##########* *----------*
***************************************************************************************************************
*----------* *##########* *##########* *##########* -------- *##########*----------*
*----------* *##########* *##########* *##########* |WWWWWW| *##########*----------*
*----------* *### 04 ###* *### 03 ###* *### 02 ###* -------- *### 01 ###*----------*
*----------* *##########* *##########* *##########* |WWWWWW| *##########*----------*
*----------* *##########* *##########* *##########* -------- *##########*----------*
***************************************************************************************************************
*----------*----------*----------*----------*----------*----------*----------*----------*----------*----------*
*----------*----------*----------*----------*----------*----------*----------*----------*----------*----------*
*----------*----------*----------*----------*----------*----------*----------*----------*----------*----------*
*----------*----------*----------*----------*----------*----------*----------*----------*----------*----------*
*----------*----------*----------*----------*----------*----------*----------*----------*----------*----------*
Code: Select all
***********************************************************************************
* 2-piece database, 1 white king 0 white checkers vs. 1 red king 0 red checkers *
***********************************************************************************
TOTAL POSITIONS: 992
TOTAL BYTES: 992
TOTAL WINS (white to move)........... 230
TOTAL DRAWS (white to move)........... 654
TOTAL LOSSES (white to move)........... 108
Wins resolved as jumps................. 72
Draws resolved as jumps................ 0
Losses resolved as jumps............... 0
Wins resolved from moving.............. 158
Draws resolved from moving............. 0
Losses resolved from moving............ 108
Wins with NO JUMPS for EITHER SIDE..... 140
Draws with NO JUMPS for EITHER SIDE.... 650
Losses with NO JUMPS for EITHER SIDE... 108
Draws resolved from unknowns........... 654
Cumulative win length improvements..... 0
Cumulative loss length changes......... 0
Database resolved after 11 iterations (includes the JUMP pass).
The longest win requires 11 ply to complete.
There are 34 wins of the same length in this database slice.
One of the longest white to move and win positions: (white pieces start at top of board)
***************************************************************************************************************
*----------*----------*----------*----------*----------*----------*----------*----------*----------*----------*
*----------*----------*----------*----------*----------*----------*----------*----------*----------*----------*
*----------*----------*----------*----------*----------*----------*----------*----------*----------*----------*
*----------*----------*----------*----------*----------*----------*----------*----------*----------*----------*
*----------*----------*----------*----------*----------*----------*----------*----------*----------*----------*
***************************************************************************************************************
*----------*##########* *##########* *##########* *##########* *----------*
*----------*##########* *##########* *##########* *##########* *----------*
*----------*### 32 ###* *### 31 ###* *### 30 ###* *### 29 ###* *----------*
*----------*##########* *##########* *##########* *##########* *----------*
*----------*##########* *##########* *##########* *##########* *----------*
***************************************************************************************************************
*----------* *##########* *##########* *##########* *##########*----------*
*----------* *##########* *##########* *##########* *##########*----------*
*----------* *### 28 ###* *### 27 ###* *### 26 ###* *### 25 ###*----------*
*----------* *##########* *##########* *##########* *##########*----------*
*----------* *##########* *##########* *##########* *##########*----------*
***************************************************************************************************************
*----------*##########* *##########* *##########* *##########* *----------*
*----------*##########* *##########* *##########* *##########* *----------*
*----------*### 24 ###* *### 23 ###* *### 22 ###* *### 21 ###* *----------*
*----------*##########* *##########* *##########* *##########* *----------*
*----------*##########* *##########* *##########* *##########* *----------*
***************************************************************************************************************
*----------* *##########* *##########* *##########* *##########*----------*
*----------* *##########* *##########* *##########* *##########*----------*
*----------* *### 20 ###* *### 19 ###* *### 18 ###* *### 17 ###*----------*
*----------* *##########* *##########* *##########* *##########*----------*
*----------* *##########* *##########* *##########* *##########*----------*
***************************************************************************************************************
*----------*##########* *##########* *##########* *##########* -------- *----------*
*----------*##########* *##########* *##########* *##########* |RRRRRR| *----------*
*----------*### 16 ###* *### 15 ###* *### 14 ###* *### 13 ###* -------- *----------*
*----------*##########* *##########* *##########* *##########* |RRRRRR| *----------*
*----------*##########* *##########* *##########* *##########* -------- *----------*
***************************************************************************************************************
*----------* *##########* *##########* *##########* *##########*----------*
*----------* *##########* *##########* *##########* *##########*----------*
*----------* *### 12 ###* *### 11 ###* *### 10 ###* *### 09 ###*----------*
*----------* *##########* *##########* *##########* *##########*----------*
*----------* *##########* *##########* *##########* *##########*----------*
***************************************************************************************************************
*----------*##########* *##########* *##########* *##########* *----------*
*----------*##########* *##########* *##########* *##########* *----------*
*----------*### 08 ###* *### 07 ###* *### 06 ###* *### 05 ###* *----------*
*----------*##########* *##########* *##########* *##########* *----------*
*----------*##########* *##########* *##########* *##########* *----------*
***************************************************************************************************************
*----------* *##########* *##########* *##########* -------- *##########*----------*
*----------* *##########* *##########* *##########* |WWWWWW| *##########*----------*
*----------* *### 04 ###* *### 03 ###* *### 02 ###* -------- *### 01 ###*----------*
*----------* *##########* *##########* *##########* |WWWWWW| *##########*----------*
*----------* *##########* *##########* *##########* -------- *##########*----------*
***************************************************************************************************************
*----------*----------*----------*----------*----------*----------*----------*----------*----------*----------*
*----------*----------*----------*----------*----------*----------*----------*----------*----------*----------*
*----------*----------*----------*----------*----------*----------*----------*----------*----------*----------*
*----------*----------*----------*----------*----------*----------*----------*----------*----------*----------*
*----------*----------*----------*----------*----------*----------*----------*----------*----------*----------*
Right now, most programmers only compare counts of win-loss-draw with jumps removed. If the numbers match, the assumption is the databases match.
In this case, I have MANY MORE data points that match, yet I still have different databases, apparently!
I went back to the logs of the generation process, to confirm my fears.
LOG OF MOST RECENT BUILD
Code: Select all
Jul 28 2009 @ 12:45:00
DB 2, slice 1, (global slice 1): iteration 1 completed.
*******************************************************
wins resolved this pass = 22, losses resolved this pass = 16, draws resolved this pass = 0.
win lengths improved this pass = 0, loss lengths that changed this pass = 0.
total move pass wins = 22, total move pass losses = 16, total move pass draws = 0.
cumulative win lengths improved = 0, cumulative loss lengths that changed = 0.
unknown positions remaining to be resolved = 882.
Jul 28 2009 @ 12:45:00
DB 2, slice 1, (global slice 1): iteration 2 completed.
*******************************************************
wins resolved this pass = 27, losses resolved this pass = 9, draws resolved this pass = 0.
win lengths improved this pass = 0, loss lengths that changed this pass = 0.
total move pass wins = 49, total move pass losses = 25, total move pass draws = 0.
cumulative win lengths improved = 0, cumulative loss lengths that changed = 0.
unknown positions remaining to be resolved = 846.
Jul 28 2009 @ 12:45:00
DB 2, slice 1, (global slice 1): iteration 3 completed.
*******************************************************
wins resolved this pass = 24, losses resolved this pass = 27, draws resolved this pass = 0.
win lengths improved this pass = 0, loss lengths that changed this pass = 0.
total move pass wins = 73, total move pass losses = 52, total move pass draws = 0.
cumulative win lengths improved = 0, cumulative loss lengths that changed = 0.
unknown positions remaining to be resolved = 795.
Jul 28 2009 @ 12:45:00
DB 2, slice 1, (global slice 1): iteration 4 completed.
*******************************************************
wins resolved this pass = 33, losses resolved this pass = 16, draws resolved this pass = 0.
win lengths improved this pass = 0, loss lengths that changed this pass = 0.
total move pass wins = 106, total move pass losses = 68, total move pass draws = 0.
cumulative win lengths improved = 0, cumulative loss lengths that changed = 0.
unknown positions remaining to be resolved = 746.
Jul 28 2009 @ 12:45:00
DB 2, slice 1, (global slice 1): iteration 5 completed.
*******************************************************
wins resolved this pass = 21, losses resolved this pass = 22, draws resolved this pass = 0.
win lengths improved this pass = 0, loss lengths that changed this pass = 0.
total move pass wins = 127, total move pass losses = 90, total move pass draws = 0.
cumulative win lengths improved = 0, cumulative loss lengths that changed = 0.
unknown positions remaining to be resolved = 703.
Jul 28 2009 @ 12:45:00
DB 2, slice 1, (global slice 1): iteration 6 completed.
*******************************************************
wins resolved this pass = 23, losses resolved this pass = 13, draws resolved this pass = 0.
win lengths improved this pass = 0, loss lengths that changed this pass = 0.
total move pass wins = 150, total move pass losses = 103, total move pass draws = 0.
cumulative win lengths improved = 0, cumulative loss lengths that changed = 0.
unknown positions remaining to be resolved = 667.
Jul 28 2009 @ 12:45:00
DB 2, slice 1, (global slice 1): iteration 7 completed.
*******************************************************
wins resolved this pass = 4, losses resolved this pass = 4, draws resolved this pass = 0.
win lengths improved this pass = 0, loss lengths that changed this pass = 0.
total move pass wins = 154, total move pass losses = 107, total move pass draws = 0.
cumulative win lengths improved = 0, cumulative loss lengths that changed = 0.
unknown positions remaining to be resolved = 659.
Jul 28 2009 @ 12:45:00
DB 2, slice 1, (global slice 1): iteration 8 completed.
*******************************************************
wins resolved this pass = 4, losses resolved this pass = 1, draws resolved this pass = 0.
win lengths improved this pass = 0, loss lengths that changed this pass = 0.
total move pass wins = 158, total move pass losses = 108, total move pass draws = 0.
cumulative win lengths improved = 0, cumulative loss lengths that changed = 0.
unknown positions remaining to be resolved = 654.
Jul 28 2009 @ 12:45:00
DB 2, slice 1, (global slice 1): iteration 9 completed.
*******************************************************
wins resolved this pass = 0, losses resolved this pass = 0, draws resolved this pass = 0.
win lengths improved this pass = 0, loss lengths that changed this pass = 0.
total move pass wins = 158, total move pass losses = 108, total move pass draws = 0.
cumulative win lengths improved = 0, cumulative loss lengths that changed = 0.
unknown positions remaining to be resolved = 654.
unknowns set to draw = 654
Code: Select all
Thursday, March 12, 2009 @ 2:59:33 AM
***********************************************************************************
* 2-piece database, 1 white king 0 white checkers vs. 1 red king 0 red checkers *
***********************************************************************************
slice 1 of 2-piece database jump pass complete (global slice # 1).
jump pass wins = 72, jump pass losses = 0, jump pass draws = 0.
unknown positions remaining to be resolved = 920.
Thursday, March 12, 2009 @ 2:59:33 AM
DB 2, slice 1, (global slice 1): iteration 1 completed.
*******************************************************
wins resolved this pass = 20, losses resolved this pass = 14, draws resolved this pass = 0.
win lengths improved this pass = 0, loss lengths that changed this pass = 0.
total move pass wins = 20, total move pass losses = 14, total move pass draws = 0.
cumulative win lengths improved = 0, cumulative loss lengths that changed = 0.
unknown positions remaining to be resolved = 886.
Thursday, March 12, 2009 @ 2:59:33 AM
DB 2, slice 1, (global slice 1): iteration 2 completed.
*******************************************************
wins resolved this pass = 28, losses resolved this pass = 9, draws resolved this pass = 0.
win lengths improved this pass = 0, loss lengths that changed this pass = 0.
total move pass wins = 48, total move pass losses = 23, total move pass draws = 0.
cumulative win lengths improved = 0, cumulative loss lengths that changed = 0.
unknown positions remaining to be resolved = 849.
Thursday, March 12, 2009 @ 2:59:33 AM
DB 2, slice 1, (global slice 1): iteration 3 completed.
*******************************************************
wins resolved this pass = 24, losses resolved this pass = 29, draws resolved this pass = 0.
win lengths improved this pass = 0, loss lengths that changed this pass = 0.
total move pass wins = 72, total move pass losses = 52, total move pass draws = 0.
cumulative win lengths improved = 0, cumulative loss lengths that changed = 0.
unknown positions remaining to be resolved = 796.
Thursday, March 12, 2009 @ 2:59:33 AM
DB 2, slice 1, (global slice 1): iteration 4 completed.
*******************************************************
wins resolved this pass = 33, losses resolved this pass = 16, draws resolved this pass = 0.
win lengths improved this pass = 0, loss lengths that changed this pass = 0.
total move pass wins = 105, total move pass losses = 68, total move pass draws = 0.
cumulative win lengths improved = 0, cumulative loss lengths that changed = 0.
unknown positions remaining to be resolved = 747.
Thursday, March 12, 2009 @ 2:59:33 AM
DB 2, slice 1, (global slice 1): iteration 5 completed.
*******************************************************
wins resolved this pass = 22, losses resolved this pass = 24, draws resolved this pass = 0.
win lengths improved this pass = 0, loss lengths that changed this pass = 0.
total move pass wins = 127, total move pass losses = 92, total move pass draws = 0.
cumulative win lengths improved = 0, cumulative loss lengths that changed = 0.
unknown positions remaining to be resolved = 701.
Thursday, March 12, 2009 @ 2:59:33 AM
DB 2, slice 1, (global slice 1): iteration 6 completed.
*******************************************************
wins resolved this pass = 23, losses resolved this pass = 11, draws resolved this pass = 0.
win lengths improved this pass = 0, loss lengths that changed this pass = 0.
total move pass wins = 150, total move pass losses = 103, total move pass draws = 0.
cumulative win lengths improved = 0, cumulative loss lengths that changed = 0.
unknown positions remaining to be resolved = 667.
Thursday, March 12, 2009 @ 2:59:33 AM
DB 2, slice 1, (global slice 1): iteration 7 completed.
*******************************************************
wins resolved this pass = 4, losses resolved this pass = 4, draws resolved this pass = 0.
win lengths improved this pass = 0, loss lengths that changed this pass = 0.
total move pass wins = 154, total move pass losses = 107, total move pass draws = 0.
cumulative win lengths improved = 0, cumulative loss lengths that changed = 0.
unknown positions remaining to be resolved = 659.
Thursday, March 12, 2009 @ 2:59:33 AM
DB 2, slice 1, (global slice 1): iteration 8 completed.
*******************************************************
wins resolved this pass = 4, losses resolved this pass = 1, draws resolved this pass = 0.
win lengths improved this pass = 0, loss lengths that changed this pass = 0.
total move pass wins = 158, total move pass losses = 108, total move pass draws = 0.
cumulative win lengths improved = 0, cumulative loss lengths that changed = 0.
unknown positions remaining to be resolved = 654.
Thursday, March 12, 2009 @ 2:59:33 AM
DB 2, slice 1, (global slice 1): iteration 9 completed.
*******************************************************
wins resolved this pass = 0, losses resolved this pass = 0, draws resolved this pass = 0.
win lengths improved this pass = 0, loss lengths that changed this pass = 0.
total move pass wins = 158, total move pass losses = 108, total move pass draws = 0.
cumulative win lengths improved = 0, cumulative loss lengths that changed = 0.
unknown positions remaining to be resolved = 654.
unknowns set to draw = 654
This means a more granular comparison MUST be made by two teams trying to verify data!