Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: MTD(f)

Author: Vasik Rajlich

Date: 15:33:11 06/16/05

Go up one level in this thread


On June 16, 2005 at 13:38:55, Vincent Diepeveen wrote:

>On June 15, 2005 at 22:40:22, Tor Alexander Lattimore wrote:
>
>I wonder why there is still people using MTD in chessprograms above PVS.
>
>In PVS you can of course easily determine the maximum number of nodes you had to
>search extra on top of nullwindows. In DIEP it's just a couple of thousands at
>in total millions of moves.
>
>So the theoretic gain MTD CAN give, when you start measuring it, it is really
>negative.
>

I agree now after some bad experiments that MTD (f) isn't worth the trouble, but
the refutation isn't quite this simple.

Imagine white has two moves, x and y. x is weak, but you search it first with a
big window. The first response to x gives a score of -2.0, and now you search
all the other responses to x (with null-windows around -2.0), and after a big
search x is able to maintain the -2.0. Note that the vast majority of this
search is null-window.

Now finally you search y, and it gives you 0.0.

You could have skipped all (almost all) of those zero-window searches of x, if
only you had switched to y more quickly. That's what MTD (f) tries to do. You're
not committing to a move. Basically a wide window commits you to the first move
you happen to try - you're going to search it anywhere inside that window.

Anyway it's way too late at night to list all the problems with MTD (f) :)

Vas

>For material only searches or evaluation functions which have little fluctuation
>and a small range it's pretty fast though to use MTD, provided you don't mind to
>lose sometimes games when you hit its worse case.
>
>The worst case you can see in the program ParSOS very well at world champs,
>when it starts to doubt then it has a search depth of plies less to the others.
>
>Nevertheless here my answers:
>
>>Hi
>>Is it possible to use a single variable in the MTD(f) search? Something like
>>this:
>>
>>int MTD(int depth, int guess)
>>{
>> if (depth<1) return Evaluate();
>
>Using hashtable in qsearch of course is a necessity for MTD because of the many
>researches you're doing.
>
>So for very fast searching software MTD is pretty expensive to use, as the
>hashtable more and more gets a big overhead. Crafty (correct me if i'm wrong for
>latest version) isn't hashing in qsearch for example.
>
>> MOVE move_to_search;
>> int best=-INFINITY;
>> GenMoves();
>> while (GetNextMove(&move_to_search))
>> {
>>  PlayMove(move_to_search);
>>  val = -MTD(depth - 1, -guess + 1);
>
>If you just search with 1 bound, then it's obvious to do:
>  val = -MTD(depth - 1, -guess);
>
>>  UnPlayMove(move_to_search);
>>  if (val>best)
>>  {
>>   best=val;
>>   if (val>=guess)
>      break;
>>  }
>> }
>> return (best);
>>}
>>
>>perhaps there is something very wrong with this? or perhaps it's used already, I
>>just noticed that on Aske Plaat's site he always uses an Alpha-Beta search with
>>0 width windowed searches, but doesn't this do the same thing? Is using
>>fail-soft type algorithms used in MTD(f) since it could well help zoom into the
>>correct score sooner?
>>
>>Cheers
>>Tor



This page took 0.02 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.