Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: draw recognition and hash interactions

Author: Ulrich Tuerke

Date: 08:54:52 07/18/01

Go up one level in this thread


On July 18, 2001 at 08:29:03, Rafael Andrist wrote:

>On July 18, 2001 at 07:36:41, Ulrich Tuerke wrote:
>
>>On July 18, 2001 at 06:00:32, Rafael Andrist wrote:
>>
>>>My program missed to avoid a draw in a game (see below) due to some strange
>>>interactions between search and hash. I investigated it and recognized the
>>>following problem:
>>>
>>>- at move 33 my program recognizes a 2x and a 3x rep. during the search. The 2x
>>>rep. is allowed and the 3x is avoided. But in the hash, the move leading to a 3x
>>>rep. is stored.
>>>- I get PV completly from hash, so the displayed PV is incorrect (shows 3x rep.)
>>>but the real PV (inside the search) is correct
>>>- at move 35 my porgram gets the PV leading to a 3x rep. from hash. The PV has a
>>>length of 8 ply
>>>
>>>---> my program cannot search to 9 ply because it has not enough time (fixed
>>>time per move), so it takes the move recommended from hash and draws.
>>
>>If I got you ríght, this should not happen.
>>Prior to probing the hash table, you should generally check whether the move
>>under consideration leads to an immediate draw. If so, the search can
>>immediately return from this candidate move with zero score.
>>The search over the remaining move then decides if it's favorable to select this
>>candidate.
>>
>>Regards, Uli
>
>The problem happens at the root of the search. I get a hash-cutoff, so no move
>is investigated and the hash move is returned. This is the code I use:
>
>//there's a appropriate hash entry, read the bounds/value:
>if (iHashPtr->SearchDepth >= RemainingDepth)
>{
>	if (iHashPtr->Flag == HashFlagExakt)
>		return iHashPtr->HashValue; //the returned move is the hash-move
>	else if (iHashPtr->Flag == HashFlagAlpha && iHashPtr->HashValue > Alpha)
>		Alpha = iHashPtr->HashValue; //adjust Alpha-Bound
>	else if (iHashPtr->Flag == HashFlagBeta && iHashPtr->HashValue < Beta)
>		Beta = iHashPtr->HashValue; //adjust Beta-Bound
>
>	if (Alpha >= Beta)
>		return iHashPtr->HashValue; //the returned move is the hash-move
>}
>
>Please, tell me what is wrong in this code.
>
>Rafael B. Andrist

I don't hash at the root because I can't see much reason for it.

I guess, you are doing this in order to get a best move which you try first in
mover ordering and perhaps you do this to get a reasonable start-window for the
score.
This should be no problem. But in any case you should then start your search
(with iteration nr.1), ignoring depth and score retrieved by the hash probe.

Uli



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.