Author: Robert Hyatt
Date: 21:23:15 09/10/99
Go up one level in this thread
On September 10, 1999 at 18:44:33, Steffen Jakob wrote: >Hi Bob! > >On September 10, 1999 at 00:19:37, Robert Hyatt wrote: > >[...] > >>left them alone. Wrong answer. To fix this mate in 4 problem, I decided to >>adjust the bounds as well, but I now set any bound value that is larger than >>MATE-300, by reducing it to exactly MATE-300, but still using the "LOWER" >>flag to say that this is the lowest value this position could have. For bound >>values < -MATE+300, I set them to exactly -MATE+300 and leave the flag as is. > >[...] > >I had a look at your new hash.c from the 16.18 source code. You are >doing this: > >-------------------------------------------------------------- >if (type == EXACT) { > if (value > MATE-300) value=value+ply-1; > else if (value < -MATE+300) value=value-ply+1; > if ((int) tree->pv[ply].pathl >= ply) > word1l|=tree->pv[ply].path[ply]; >} >else if (type == LOWER) { > word1l|=tree->current_move[ply]; > value=Min(value,MATE-300); >} >else { > value=Max(value,-MATE+300); >} >-------------------------------------------------------------- > >For lower scores you compute the minimum of "value" and >"MATE-300". But what if "value" is a negative mate score which can >also be a lower bound? > >You have the same problem with the upper bound. I ignore those cases. IE of what use is a bound that is greater than -MATE+300, or a bound that says lower than MATE-300? So for those cases, I just totally ignore them as they aren't going to affect the tree in any way that I can see. But for scores >= MATE-300, that is important, ditto for scores <= -MATE+300. > >Therefore I think the following is correct: > >-------------------------------------------------------------- >if(abs(value > MATE-300)) >{ > if(value > 0) > { > switch(mode) > { > case EXACT: > value = value + (ply-1); > break; > case LOWER: > case UPPER: > value = MATE-300; > break; > } > } > else > { > switch(mode) > { > case EXACT: > value = value - (ply-1); > break; > case LOWER: > case UPPER: > value = -(MATE-300); > break; > } > } >} >-------------------------------------------------------------- > >Greetings, >Steffen. You can do that. I even tried it. It made no difference in any mate situation I tested, and I ran about 500 positions from 1001 brilliant ways to checkmate, just to test... I removed that type of test because it made a difference in speed, but didn't change a single mate announcement in the test I ran.. Bob
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.