Author: Dann Corbit
Date: 12:32:48 04/14/04
Go up one level in this thread
On April 14, 2004 at 15:06:57, Dieter Buerssner wrote:
>On April 14, 2004 at 14:00:47, Dann Corbit wrote:
>
>>Are there any PVS style programs that store both an upper and lower bounds (and
>>I imagine they will also need two depths as well.)?
>>
>>I am curious to find out if there is value so that I can write a very general
>>program where I can switch algorithms at will.
>
>I recently tried it. But I did not get it to work well. I had hoped, that
>especially in fail high/low situtions it might help. Also, I thought a depth
>preferred hash replacement scheme would work well with 2 bounds (and depth).
>Indeed, in some situations it seemed to give a bit smaller trees (perhaps even
>in general). But in other situations, trees got larger (I really cannot explain
>it). I suspected some bugs, reviewed the code many times, even investigated some
>really huge search tree dumps (with all the hash info inside). Didn't find
>anything. Just did not work as I expected.
>
>It was not easy to test. Some subtle things seem to be important. Like the
>problem we already have with repetitions (that are not handled correctly by HT
>in principle). With two scores, that problem seemed to be worse (I saw it
>naturally only in late endgames). I used one entry for upper bound values, and
>one entry sharing exact/lower bound.
>
>With only one entry, I also store moves in case of upper bound values (I guess
>most engines don't). It seems to help my program. With 2 scores, I still only
>left one slot for the move. I mainly tried only to store moves from lower
>bound/exact values. But also experimented a bit with storing moves from upper
>bounds, when the depth was bigger than the lower bound. Many variations -
>nothing really successful.
Too bad. I can see that it will clearly complicate things a lot.
I had a notion to store something like this:
typedef struct tag_HashItem {
MOVE move;
OtherBits KeyRemainder;
unsigned char depth_lower;
unsigned char depth_upper;
short int score_lower[4];
short int score_upper[4];
unsigned char lower_score_tags:4;
unsigned char upper_score_tags:4;
char flags;
} HashItem;
The reason I was thinking about storing several scores by depth is because of
positional moves. One thing I notice about a good positional move is that there
is a steady march towards favor with additional depths. So if I see that in a
hash move, I could investigate deeper if I wanted to.
If I had a 12 ply search on the upper side and also a ten ply search and a 8 ply
search, then the tag bits will tell me which are occupied. Search results more
shallow than deepest -3 are thrown out.
I think the extra hash table work might negate any possible benefit, but I like
to try crazy things.
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.