Computer Chess Club Archives




Subject: Re: MTD(F) results

Author: Anthony Cozzie

Date: 07:27:08 12/17/03

Go up one level in this thread

On December 17, 2003 at 05:38:52, Tord Romstad wrote:

>On December 16, 2003 at 21:22:56, Anthony Cozzie wrote:
>>Recently I experimented with adding MTD(F) into Zappa.  It has been an
>>interesting experiment, but I am going back to PVS().
>>I thought that since Zappa has a [UL,LL] paired transposition table and an
>>evaluation granularity of only 1/100 of a pawn,
>I use 1/64 of a pawn in Gothmog.  In the new engine I am writing, the
>granularity will be configurable by the user, with possible values between
>1/8 and 1/512 of a pawn.
>>MTD(f) would work quite well,
>>but that does not seem to be the case.  The MTD(f) version of Zappa does
>>slightly better on test suites (113/183 @ecmgcp v 106 @ 10s/move) but in the
>>positional test suites it averaged about 3/4 of a ply less than the PVS()
>>version.  My guess is that because MTD(F) tries all moves, some of the
>>"ridiculously losing captures" ordered near the end by PVS() are tried earlier,
>>which accounts for the increased test suite performance.
>I don't understand this, I'm afraid.  What does MTD(f) vs PVS have to do
>with move ordering?
>>If anyone has any suggestions, I'm keeping the MTD(F) code in Zappa (just turned
>>off) and I'm willing to try anything.
>Some suggestions:
>1. As Dan Andersson has pointed out, enhanced transposition cutoffs are very
>   effective when combined with MTD(f).  If you don't use them already, give
>   them a try.
>2. Do you hash the qsearch?  You'll probably find that it helps you reduce
>   the tree size quite a lot, even if it doesn't give you much in PVS.
>3. Do you use the plain MTD(f) algorithm (as described in Plaat's paper),
>   or do you use some kind of convergence accelerator?  Plain MTD(f) never
>   worked well for me.  I now increase the step size when the search fails
>   in the same direction more than once.

the exact code looks like this:

  const static int exp[] = { 8, 16, 64, 128, 512, 1024, 10000, 10000 };

    if(ll == BLACK_MATES)   alpha  = ((ul < WHITE_MATES) ? ul : prev_val) -
    else if(ul == WHITE_MATES) { alpha  = ll + exp[ul_exp++];  if(alpha > 9950
&& ll < 9950) alpha = 9950; }
    else                         alpha = (ul + ll) / 2;

    alpha = int_max(int_min(alpha, WHITE_MATES-1), BLACK_MATES);   //bound stuff
    beta  = alpha + 1;                     //zero window search

This page took 0.03 seconds to execute

Last modified: Thu, 07 Jul 11 08:48:38 -0700

Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.