Author: Miguel A. Ballicora
Date: 16:49:01 02/10/02
Go up one level in this thread
On February 10, 2002 at 19:28:33, Scott Gasch wrote: >You know reading this again I realize I misspoke and probably did more to >confuse you than to clarify. Let me try this again. > >When your search finds a mate it returns a score that is based upon that mate's >distance from the root of the search. So if you find a mate somewhere in your >search you will build the mate score based upon the distance from the root. > >When hashing such a score you can get yourself into trouble. Instead of hashing >the mate score as distance from root you want to hash it as distance from the >node you are hashing. For example, if you are at ply 5 and the recursive search >has returned a +mate in 12 ply score. > >If you simply store "mate in 12 ply" for this node's value you have trouble if >you come across the same position later at a different distance from the root. >Like you see it at ply 3, for example. Well then you lookup the hash table >value and its wrong -- it says this is a mate in 12 ply but its not anymore. >This time it's a mate in 10 ply from the root because you're 2 ply closer to the >root when you saw it. > >So hash the distance from the current position to the mate instead of the >distance from the root to the mate. To do this simple subtract ply from the >mate score. In our example we have mate in 12 ply and we first see it at ply 5. > Store as mate in 12 - 5 ply (mate in 7 ply) in the hash table. > >Then when you hit it later at ply 3, get the real score of the mate from the >root by adding in ply. So you lookup mate in 7 ply and add current distance >from root (3) to get "mate in 10 ply from the root". > >I hope I've been more clear this time. Good luck > >Scott I never understood what the people is doing with the mate values, I always get confused. I am glad that I came up with my own approach before I asked or saw any post about it. :-) What I do in pseudo code in Gaviota is search (alpha, beta) { adjust_in (&alpha, &beta); /* increments alpha += 1 and beta += 1 if they are positive mate values, do the opposite if it is a negative mate value */ probe_hashtables_normally() loop { /* normal alpha beta stuff */ makemove(); value = search_moves_for_best_value(-beta, -alpha); unmakemove(); best = keep the best value; } store_in_hashtables_normally(); adjust_out(&best); /* decrement best -= 1 if it is a +mate value increment +=1 if it is a -mate value */ return best; } And basically, I do not do anything else. I store in the hashtables without any change. adjust_out() it is used too when I return early. Regards, Miguel
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.