|
Main
Date: 16 Jan 2007 01:39:52
From:
Subject: Generate and store EGTB's as a data tree
|
In order to be able to look-up a chess position in an EG table base, the indexing scheme must ensure that each position is translated into a unique number. The indexing scheme largely determines the size of the EGTB files, so the number of illegal positions that an indexing scheme allows should therefore be kept to a minimum. I can think of an indexing scheme that allows absolutely NO illegal positions, so the size of the EGTB will be the theoretical minimal. Here's the idea: ================ Before the index is calculated, each position is transposed by making maximum use of all possible symmetries. If there are pawns on the board, the stmK is constrained to the a-d files. If there are no pawns on the board, the stmK is contrained to the a1-d1-d4 triangle. Nothing new till here! A 'data tree' is built by placing men in the following order: depth = 0: stmK-sntmK pair, this forms 1806 (with Pawns) or 462 (no Pawns) BRANCHES AT THE ROOT. depth = 1: stm Pawns (placed as a group to minimize the index range), and the possible squares depend on the location of the sntmK (preventing unblockable checks). depth = 2: sntm Pawns, again: placed as a group and only considering remaining free pawn squares. depth = 3-6: stm Q-R-B-N depth = 7-10: sntm Q-R-B-N stm = side to move sntm = side not to move Ground rule is that, during the creation of all subtrees, the only possible squares for placement of men are those that result in legal chess positions (to prevent 'broken positions' in the data structure). The maximal depth of such an EGTB tree is 10, depending on the type of endgame. The index of a position is simply the location of the position at the leaves, counting from left to right. To calculate the index of a position, the lookup routine has to traverse the tree from left to right and add all the leaves that were visited to locate the position (only branches 'to the left' of the position need to be visited). But this might actually be a pretty fast calculation. Anyway, the endresult will be that EGTB index range is minimal, resulting in small data files and fast lookups. My questions: - does this make sense? - did anyone try it before? - if the answer is yes: what were the results? Stef
|
|
|
Date: 03 Feb 2007 00:03:04
From:
Subject: Re: Generate and store EGTB's as a data tree
|
Vincent, I am not using 1806 * 24 * 23 ... and never said that I did (and by the way, I think it should be 1806 * 48 * 47 ... , because you already have mirrored, or else you wouldn't end up with 1806 KK positions). The whole idea of my scheme is that there are *no* broken positions, by definition. Of course I do account for the placement of previous men. If a King is placed on a 'pawn square', then that square is not available for pawns. Even more so: the sntmK cannot be in check, which excludes even more squares for stm pawns, depending on the sntmK position. Stef > <snip> > Actually i might store pawns in less than what you describe. > > you would use > > 1806 * 24 * 23 ... > > Where i'm using less than that in fact. > I'm 100% avoiding positions with a 2 figures on the same square. > <snip>
|
| |
Date: 14 Feb 2007 17:48:59
From: Vincent Diepeveen
Subject: Re: Generate and store EGTB's as a data tree
|
hi, if you do 1806 * 48 * 47 then you will get positions with a pawn on a square where a king is located already. In diep's egtb scheme i'm avoiding that. Vincent <[email protected] > wrote in message news:[email protected]... > Vincent, > > I am not using 1806 * 24 * 23 ... and never said that I did (and by > the way, I think it should be 1806 * 48 * 47 ... , because you already > have mirrored, or else you wouldn't end up with 1806 KK positions). > > The whole idea of my scheme is that there are *no* broken positions, > by definition. Of course I do account for the placement of previous > men. If a King is placed on a 'pawn square', then that square is not > available for pawns. Even more so: the sntmK cannot be in check, which > excludes even more squares for stm pawns, depending on the sntmK > position. > > Stef > >> <snip> >> Actually i might store pawns in less than what you describe. >> >> you would use >> >> 1806 * 24 * 23 ... >> >> Where i'm using less than that in fact. >> I'm 100% avoiding positions with a 2 figures on the same square. >> <snip> > >
|
|
Date: 29 Jan 2007 16:06:44
From: Vincent Diepeveen
Subject: Re: Generate and store EGTB's as a data tree
|
<[email protected] > wrote in message news:[email protected]... > In order to be able to look-up a chess position in an EG table base, > the indexing scheme must ensure that each position is translated into a > unique number. The indexing scheme largely determines the size of the > EGTB files, so the number of illegal positions that an indexing scheme > allows should therefore be kept to a minimum. > > I can think of an indexing scheme that allows absolutely NO illegal > positions, so the size of the EGTB will be the theoretical minimal. > > Here's the idea: > ================ > > Before the index is calculated, each position is transposed by making > maximum use of all possible symmetries. If there are pawns on the > board, the stmK is constrained to the a-d files. If there are no pawns > on the board, the stmK is contrained to the a1-d1-d4 triangle. Nothing > new till here! > > A 'data tree' is built by placing men in the following order: > > depth = 0: stmK-sntmK pair, this forms 1806 (with Pawns) or 462 (no > Pawns) BRANCHES AT THE ROOT. You need to get a member of ICGA www.icga.org There is several articles on EGTBs there in different journals. In diep i do not keep remove all illegal positions, but i do take care that each piece is at an empty square. Actually i might store pawns in less than what you describe. you would use 1806 * 24 * 23 ... Where i'm using less than that in fact. I'm 100% avoiding positions with a 2 figures on the same square. What i do not remove is when for example white is the side to move, has a pawn on a2 for example with a black king on b3. That situation could happen, whereas the black king is illegal on b3. I tend to recall nalimov removes a few of those illegals, but not all. > depth = 1: stm Pawns (placed as a group to minimize the index range), > and the possible squares > depend on the location of the sntmK (preventing unblockable > checks). > depth = 2: sntm Pawns, again: placed as a group and only considering > remaining free pawn squares. > depth = 3-6: stm Q-R-B-N > depth = 7-10: sntm Q-R-B-N > > stm = side to move > sntm = side not to move > > Ground rule is that, during the creation of all subtrees, the only > possible squares for placement of men are those that > result in legal chess positions (to prevent 'broken positions' in the > data structure). The maximal depth of such > an EGTB tree is 10, depending on the type of endgame. > > The index of a position is simply the location of the position at the > leaves, counting from left to right. To calculate the index of a > position, the lookup routine has to traverse the tree from left to > right and add all the leaves that were visited to locate the position > (only branches 'to the left' of the position need to be visited). But > this might actually be a pretty fast calculation. Anyway, the endresult > will be that EGTB index range is minimal, resulting in small data files > and fast lookups. > > My questions: > - does this make sense? > - did anyone try it before? > - if the answer is yes: what were the results? > > Stef >
|
|
Date: 16 Jan 2007 23:41:29
From:
Subject: Re: Generate and store EGTB's as a data tree
|
As this is an incremental indexing scheme (you can only calculate the index of a position starting from another position's index), I think the calculations could be made much faster by adding a small number of 'anchor' positions: positions together with their indices, to give the position tree search a good starting point. For example: let's assume we have an EGTB file with a size of 1,800 MB, using 7 bits per position; it will contain approximately 2E9 positions. Due to the compactness of the index scheme we could allow, say, 4% additional storage for anchor positions (these could be stored as the header to the EGTB). The file size would increase slightly, from 1800 MB to1872 MB. If each anchor position + index requires 288 bits (my first guess), then there would be room for 2E6 achor positions. So each set of 1000 consecutive positions can have one anchor, and the search only needs to traverse 1000 positions (max) instead of 2E9 positions (max): a speed-up factor of 2 million at the cost of a 4% larger EGTB file. [email protected] wrote: > In order to be able to look-up a chess position in an EG table base, > the indexing scheme must ensure that each position is translated into a > unique number. The indexing scheme largely determines the size of the > EGTB files, so the number of illegal positions that an indexing scheme > allows should therefore be kept to a minimum. > > I can think of an indexing scheme that allows absolutely NO illegal > positions, so the size of the EGTB will be the theoretical minimal. > > Here's the idea: > ================ > > Before the index is calculated, each position is transposed by making > maximum use of all possible symmetries. If there are pawns on the > board, the stmK is constrained to the a-d files. If there are no pawns > on the board, the stmK is contrained to the a1-d1-d4 triangle. Nothing > new till here! > > A 'data tree' is built by placing men in the following order: > > depth = 0: stmK-sntmK pair, this forms 1806 (with Pawns) or 462 (no > Pawns) BRANCHES AT THE ROOT. > depth = 1: stm Pawns (placed as a group to minimize the index range), > and the possible squares > depend on the location of the sntmK (preventing unblockable > checks). > depth = 2: sntm Pawns, again: placed as a group and only considering > remaining free pawn squares. > depth = 3-6: stm Q-R-B-N > depth = 7-10: sntm Q-R-B-N > > stm = side to move > sntm = side not to move > > Ground rule is that, during the creation of all subtrees, the only > possible squares for placement of men are those that > result in legal chess positions (to prevent 'broken positions' in the > data structure). The maximal depth of such > an EGTB tree is 10, depending on the type of endgame. > > The index of a position is simply the location of the position at the > leaves, counting from left to right. To calculate the index of a > position, the lookup routine has to traverse the tree from left to > right and add all the leaves that were visited to locate the position > (only branches 'to the left' of the position need to be visited). But > this might actually be a pretty fast calculation. Anyway, the endresult > will be that EGTB index range is minimal, resulting in small data files > and fast lookups. > > My questions: > - does this make sense? > - did anyone try it before? > - if the answer is yes: what were the results? > > Stef
|
|