Author: Sune Fischer
Date: 01:11:43 09/19/04
Go up one level in this thread
On September 18, 2004 at 19:43:55, Andrew Platt wrote: >then you are always starting a new ply and you aren't losing any information. In >fact, if you don't do this you have a problem because you have information >relating to a *previous* move in the PV. Resetting the PV at this ply won't >cause the information already backed up from the previously tried moves. Yes my logic is a bit different, the child PV is not copied until the end. >My routine looks something like this > >AlphaBeta () >{ > // Try to get a cutoff with a null move > if (TryNullMove ()) > { > return Score; > } > > // Try to get a hash table cutoff > if (HashTableCutoff ()) > { > return Score; > } > > // We're going to search moves. Reset this ply in the triangular array > PV [Ply] [Ply] = Ply; > > while (GetMove ()) > { > MakeMove (); > Score = -AlphaBeta (..., Ply + 1); > UnmakeMove (); > > if (Score > Alpha) > { > if (Score >= Beta) > { > return Score; > } > > // Update the Principal variation now we have a better move //UpdatePV (); <- not yet... > } > } > // finished searching, now clean up before returning if (best_score > original_alpha) { p->pv.Merge(&(p+1)->pv); // note the pv at the next ply is needed! // do other stuff as well like record to the hash table... } > return Score; >} > > >Make sure you reset the PV if you cutoff, etc. too. -S. >Andy.
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.