Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: And now for the PVS experts -- two bounds?

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.