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.