Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: A proposed WAC replacement for testing

Author: Tim Foden

Date: 10:03:38 09/20/01

Go up one level in this thread


On September 20, 2001 at 07:21:57, Dieter Buerssner wrote:

>On September 19, 2001 at 10:58:11, Tim Foden wrote:
>
>>On September 19, 2001 at 10:32:25, Dieter Buerssner wrote:
>>
>>>From you posts, I have seen, that GLC is really good at solving mates (I mean
>>>especially the Leonid positions, where Yace is often chanceless.) Do you have
>>>any special trick, that you want to share? :-)
>
>Thanks for your answer.
>
>>I guess it is a combination of these things:
>>
>>1.  Search extensions.  I don't restrict them in special way.  They are just
>>restricted to a maximum of 1 ply in each node.
>
>I am doing this a bit different. I restrict some extensions, when already too
>deep in the line. On the other side, in rare cases, I allow more than one ply.
>
>>2.  Qsearch depth is restricted.  Otherwise some of Leonid's positions simply
>>explode.
>>
>>	if( -depth >= max(4 * PLY, m_currentDepth * PLY) )
>>	{
>>#ifdef	DEBUG_SEARCH
>>		WriteDebug( ply, _T("q %d / qdepth %d\n"), ply, currentEval );
>>#endif	// DEBUG_SEARCH
>>		return currentEval;
>>	}
>
>I am not doing this. Perhaps, this can help very much in Leonid type positions.
>Did you just guess, where to make the cut here, or did you do some tests?

I did some ad-hoc tests.  I just fiddled with it until it seemed to make no
difference to normal positions.  However, it helps a lot on some of Leonids
positions.

>I do not toatally understand your if (). In the third recursive call to qsearch,
>depth will be -3*PLY? What is m_currentDepth?

"depth" is the same depth that is used thoughtout the search to say how far it
is to the leaves of the search.  So the normal search is called when depth is >
0, else the qsearch is called.  The first call to qsearch will have 0 >= depth >
-PLY.  The next will be -PLY >= depth > -2*PLY.  And so on.

The m_currentDepth contains the current iterative deepening count.  This goes 1,
2, 3... and so on.

The idea here is to cut the q-search at small search depths.  As the iterative
deepening search depth gets bigger, more q-search depth is allowed.

>I would think, that for "normal" positions this is not needed.

True.  It was added so that we could get to normal search depths without lots of
quiescence searching.

>>3.  (this one may be new?) Cuts in the search if alpha or beta are in the mate
>>range, and the current ply is too deep.
>>
>>e.g.:
>>
>>	// can't find better checkmates in more plies!
>>	if( alpha >= evalCheckmate - ply )
>>	{
>>#ifdef	DEBUG_SEARCH
>>		WriteDebug( ply, _T("s %d / deep %d\n"), ply, alpha );
>>#endif
>>		return alpha;
>>	}
>>	else if( beta <= -evalCheckmate + ply )
>>	{
>>#ifdef	DEBUG_SEARCH
>>		WriteDebug( ply, _T("s %d / deep %d\n"), ply, beta );
>>#endif
>>		return beta;
>>	}
>
>I am using one of the two.
>
>  /* lowest possible score is -INFSCORE+ply */
>  if (beta <= -INFSCORE+ply)
>    return -INFSCORE+ply; /* cannot be worse than this */
>  /* TODO: Use alpha cutoff in the same way? */

Interesting.  I initially only did it with alpha, and then realised that it may
be possible with beta too.

>However, I think, this should only help when already a mate is found, and the
>task is to find a shorter mater.

Also true.  But it is such a simple test that it makes negligible slow down in
normal searches.  When there is a mate near, it can help a lot.

>Still, when I see your answer and your results, it seems, that I am doing
>something wrong :-(

Ah... the irony :)  On the contrary, I would say that when I see the normal
results of YACE, it seems that *I* am doing something wrong :)

Cheers, Tim.



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.