Author: Robert Hyatt
Date: 03:45:33 08/03/98
Go up one level in this thread
On August 03, 1998 at 02:21:12, Amir Ban wrote:
>On August 02, 1998 at 23:55:02, Ed Schröder wrote:
>
>>>I've always done this. The problem is that on some occasions, the null-
>>>move search can cause a "false-fail-high". The re-search produces a score
>>>that was worse than the old search, or, more commonly, actually fails low.
>>
>>>I reject such fail highs if the re-search is worse than the old best (I
>>>catch this by searching with (old-best, +infinity), so that if I fail low,
>>>I know it is worse than the old best move and it gets rejected outright.
>>
>>>I've had versions where this was "broken" for various reasons, and they
>>>always produced an occasional bizarre-looking move that could be an outright
>>>blunder, or just a slightly weaker move...
>>
>>Hi Bob,
>>
>>Glad to hear a "false-fail-high" is common practise -:)
>>
>>Like to add that I often have noticed such a "false-fail-high" is rewarded
>>in the next iteration after all. It has puzzled me for years. A few years
>>ago I made a test-version that always took a "fail-high" as best move,
>>false or not. Results were not better but also not worse.
>>
>>Similar experiences?
>>
>>- Ed -
>
>
>I always accept the fail-high move immediately.
>
>There are parameters that you are important that you don't mention: What size
>window is used during normal search ? If it's zero-width, or very small, then
>fail-high doesn't mean it's much better than the previous best, and you can take
>the new move or leave it. If you use a 0.3-0.5 window, as I do, fail-high means
>it's clearly better than the previous, even it later fails low.
>
>Also, what window do you use on the re-search that fails low ? If you use
>new-alpha+1 to infinity, then maybe the fail-low happened because the value is
>exactly new-alpha. If you use a window of old-alpha to infinity, then a fail-low
>indeed makes the move suspicious.
>
>Amir
\
Good point. Lets talk about two kinds of fail highs. As here:
alpha=old-.3;
beta-old+.3;
old=Search(etc);
if (old > alpha && old < beta) { we have a normal search result }
else if (old < alpha) {we have a fail low at the root}
else if (old > beta) {we have a fail high at the root}
In the above case, I *always* take the fail high, unless the re-search comes
back with a score that is somehow *less* than the previous best move.
Another kind:
at the root search level (ply=1):
if (first move) {
value=-Search(-beta,-alpha,etc...);
}
else {
value=-Search(-alpha-1,-alpha,etc...)
if (value>alpha && value<beta) value=-Search(-beta,-alpha,etc.)
}
The above code is traditional PVS, and the else clause uses a null-window
search after the first move has produces a good alpha bound. If this fails
high, I research. If it fails low, I ignore everything and stick with the
old best move.
SO, to summarize, in Crafty a hard fail high at the root is accepted, but a
null-window fail high at the root is only accepted if it doesn't immediately
fail low on the research. And I make sure that if I get such a fail high, that
I search until I get the score or fail-low result, to convince myself that the
move is a lemon or a winner...
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.