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.