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.
>
>Tord
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) -
exp[ll_exp++];
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
on range [BLACK_MATES, WHITE_MATES]
beta = alpha + 1; //zero window search
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.