Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: Repetitions: is this code correct?

Author: Richard Pijl

Date: 05:32:18 07/12/02

Go up one level in this thread


On July 12, 2002 at 08:08:20, Vladimir Medvedev wrote:

>How to handle position repetitions during search?
>
>I use the following method:
>
>(pseudo-code)
>
>int CountSearchRepetitions[MAXSIZE];
>int CountHistoryRepetitions[MAXSIZE];
>
>int AlphaBeta(Position pos, int alpha, int beta)
>{
>    if( current_ply > 0 && CountHistoryRepetitions[ pos.GetHash() % MAXSIZE ]>0
>)
>    {
>       return min( 0, beta );
>    }
>
>    if( CountSearchRepetitions[ pos.GetHash() % MAXSIZE ] > 1 )
>    {
>       return min( 0, beta );
>    }
>
>    while( get_next_move() )
>    {
>        pos.MakeMove();
>        SearchRepetition[ pos.GetHash() % MAXSIZE ] ++;
>        int eval = - AlphaBeta( pos, -beta, -alpha );
>        SearchRepetition[ pos.GetHash() % MAXSIZE ] --;
>        pos.UnmakeMove();
>
>        ........
>
>    }
>}
>
>Is this correct? Shouldn't I return 0 instead min(0, beta)?
>Is it good to add repetitions in game history to repetitions on the current
>branch?

- You will get many false repetitions as you are mapping many hashkeys on a
single value ( by % MAXSIZE)
- Do you take side-to-move, castling rights and the en-passant indicator in your
hashkey? If not, that's another source of error
- returning min (0,beta) looks fine although in practice it probably doesn't
matter much.
- Game history should be counted, but make sure you do not evaluate repetitions
in the rootnode as you need a move to be played ...

Richard



This page took 0.01 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.