Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: MTD(f)

Author: José Carlos

Date: 06:39:59 07/28/04

Go up one level in this thread


On July 28, 2004 at 08:23:17, Tord Romstad wrote:

>On July 28, 2004 at 07:06:22, Uri Blass wrote:
>
>>How much rating do you earn from dividing the evaluation by 4.
>
>I no longer remember exactly, but I think it was quite a significant
>improvement.  However, it is possible that the improvement is mostly explained
>by a horrible futility pruning bug I introduced while doing the change.  For
>some reason, this bug seems to make the engine much stronger, and all attempts
>to fix it have had catastrophic results.
>
>The bug is the following:
>
>In the qsearch, I prune futile captures with code that looks roughly like
>this:
>
>if(approximate_eval_after_move(move) < alpha-margin)
>   prune move
>
>The approximate_eval_after_move() function takes the static eval of the
>current position and adds the change in material and piece square table
>scores when the move is made.  When I changed from pawn=64 to pawn=32,
>I forgot to modify the approximate_eval_after_move() function.  This
>function still divides by 2 rather than 4, and returns scores with
>unit pawn=64.
>
>This, of course, makes no sense at all.  I have verified that my futility
>pruning makes an enormous amount of incorrect pruning decisions (like you
>would expect), and that fixing the bug greatly improves this.  But still,
>for some reason, the engine plays much better when I leave the bug there.
>
>>I use pawn=100 and I do not divide my evaluation by 4 before returning them.
>>Maybe it is a bad idea but I am not sure.
>
>I don't think you would gain much by reducing the resolution in Movei.  It's
>mainly an MTD thing.

  I use PVS in Averno. I found a nice improvement by changing granularity
according to the eval. Near 0 I use a bigger granularity and with big (positive
or negative) evals, I reduce it.
  My code at the end of Eval():

	if (abs(s32Eval) >= 30)
	{
		if (abs(s32Eval) >= 150)
			s32Eval -= (s32Eval % 5);
		else
			s32Eval -= (s32Eval % 3);
	}
	return(s32Eval);

  In Anubis I do a more complex job (considering also other elements of
evaluation, like tactical stability, king safety, material difference, etc.) but
this simple idea in Averno seems to work fine.
  Can any of you give it a try and see if it helps?

  José C.


>>Note that I am not sure if tactical tests will help to find it and I guess that
>>the only way to know is games because it is possible that you pay the price not
>>in tactical positions but in positions when you choose slightly inferior
>>positional moves.
>
>If you reduce the resolution too much, this is obviously true.  It depends
>on how much you trust the accuracy of your evaluation function.  I personally
>don't trust my eval to be accurate on the level of +- 3 centipawns.
>
>Tord



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.