Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: draw recognition and hash interactions

Author: Rafael Andrist

Date: 05:29:03 07/18/01

Go up one level in this thread


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



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.