Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: draw by repetition when using best move from transposition table ent

Author: Robert Hyatt

Date: 08:38:57 01/17/06

Go up one level in this thread


On January 16, 2006 at 23:59:38, Branislav Bezak wrote:

>On January 15, 2006 at 11:44:09, Robert Hyatt wrote:
>
>>On January 14, 2006 at 22:15:10, Branislav Bezak wrote:
>>
>>>I'm doing something like this:
>>>
>>>if(entry.Depth < depth)
>>>{
>>>	// found entry but depth is less then required
>>>}
>>>else
>>>{
>>>	if(entry.EvalType == EvalTypeExact ||
>>>	  (entry.EvalType == EvalTypeBetaCutoff && entry.Score >= beta) ||
>>>	  (entry.EvalType == EvalTypeAlphaCutoff && entry.Score <= alpha)
>>>	)
>>>	{
>>>// what do I need to do here to detect immediate or future draw by repetition?
>>>		bestMove.m = entry.BestMove;
>>>		return entry.Score;
>>>	}
>>>}
>>>
>>>Thanks, Branislav
>>
>>Nothing.  The question to ask is "OK, when I _stogred_ this position, assuming
>>draft > 0, why didn't I find the repetition when I searched below this node,
>>before I stored the result?  Answer that and your problem will go away.
>>
>>If you say "but wait, I stored it with draft = 0, so I didn't do repetition
>>checks in the q-search" I'd respond, fine, but we are on the next iteration, so
>>we are going one ply deeper, your old draft is no good.  If we are on the same
>>iteration, there is no way to find the draw anyway since we are not going deep
>>enough...
>>
>>Note also the "bestMove.m" above won't work for all three cases.  In the case of
>>a fail high (you store a "LOWER" indication) or an exact score (you store an
>>"EXACT" indication) you have a best move.  But not on a fail low.  Storing a
>>best move there will make your search tree bigger because the best move is
>>always searched first, and in that case it is not the best move but a random
>>move, since it is impossible to find a best move when you search all moves and
>>each one fails low.
>
>I think that in my case this is happening: let's say that in move 60 I did depth
>6 search and found an exact score on a position and stored the best move. Ten
>moves later I got to the same position, estimated that in my time per move I can
>do depth 6 search, looked into TT and found exact score with best move. I did
>not search, did not do anything to detect draw, just made the stored best move.
>So at least two positions already repeated twice which gives my opponent
>opportunity to draw if he is able to repeat one of them.
>
>Do I need to erase the position from TT ones I make it ? Can I make move stored
>in TT or I always have to search at least depth 1 ?
>
>Thanks for your input; it's very helpful to get feedback from someone who
>understands the problem well.
>
>Branislav


Now you are stumbling into a big problem.  Yes, the old hash position will have
a score, but no, it won't know about the repetition since that is now "history"
and the hash table doesn't store a path.  One thing you can do is check for
repetitions first, then probe the hash table, so you at least won't stumble into
a repetition at the root without knowing it and finding a non-repetition move
that is favorable for you (if possible).

Since it is so cheap, the repetition (and draw by other means like 50 moves)
test ought to be the first thing you do.  Much of this will then disappear.  But
not all.



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.