Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: Hashing "draft"

Author: Tony Werten

Date: 04:49:49 12/07/00

Go up one level in this thread


On December 06, 2000 at 14:25:19, Scott Gasch wrote:

>Hi all,
>
>My hashing code is working very well since I've been looking at it carefully and
>finding bugs.  Thanks for your help and comments.
>
>I am still unclear on one issue, though.  Many people have said "store the
>remaining depth in the draft of a hash entry."  What happens if I make a move,
>say "aha, this was a threatoning pawn push, extend by 1 ply!" then call search
>recursively.  This returns a fail high (beta cutoff).
>
>Now I am about to store a lower bound in my hash... this position is worth at
>least X, maybe more.  Do I store this with a draft of depth or depth + extend?
>I think depth + extend -- after all I got the score from a depth + extend call
>to search... the remaining depth for this position was depth + extend?  Some
>people have said "make sure you don't store extend values in your hash table or
>you will have bugs" and I don't understand this.

Depending on your code it might give a problem. ( As I understood from Bob, in
Crafty this is solved a different way )
In my engine, I come in "analyze", I decide on extensions, I call "hashtable"
and if draft is sufficient I quit. If not, I call "nullmove" and here is where
the problems can start. If "nullmove" gives me a checkmatish score I extend 1
ply ( threat extension ).
Problem: I search 8 ply, no normal extension, no hashcuttoff then a
nullmoveextension.
I continue search to 9 ply, decide extensions (none), hashtable lookup, draft is
good. Why ? Because it got an extension last iteration, but at this point I
don't know I will get a nullmove extension because I haven't tried it yet.

I solve this by simple setting a boolean in the hashtable ( ie got a threat
extension last time ) and in this case reduce draft by one.

Tony

>
>If I was about to store an exact or upper bound in the hash table after
>searching all N moves in this position I would store with a draft of depth
>_unless_ every move was searched with an extend of 1 ply.  This is the case in
>my code when the side on move is in check... so in this case I would store depth
>+ extend again.
>
>Maybe I'm loony or don't fully understand this stuff.  But the way I see it is
>that I have a score X from an expensive recursive call(s) to search... and I
>want to save this score for later.  If I every one of my 1..N calls to search
>used to generate X was made with a depth of depth + extend I store this as the
>draft.
>
>Later if someone comes in and says I need a score of the same position to depth
>+ 1 it should be OK to give them the same score computed above... because of the
>extend above I did end up computing score X to depth + 1 already...
>
>Do I misunderstand some negative aspect of this plan?
>
>As always, much appreciate the help.
>Scott



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.