Author: Vasik Rajlich
Date: 02:39:52 06/19/05
Go up one level in this thread
On June 19, 2005 at 05:00:09, Dieter Buerssner wrote:
>On June 18, 2005 at 16:54:12, rasjid chan wrote:
>
>>
>>I think you meant :-
>>
>> if (value of captured piece + margin < alpha){
>> best = alpha;//this is the line missing, rasjid
>> continue; /* Futile to try this move */
>> }
>
>Yes, that would fix the problem (when material balance is also added in), but it
>would be fail hard. Without this, the search could return to low upper bounds
>(my original). Vasik's fix could still return too low upperbounds. Your fix
>above cannot.
>
>What I intended (as pointed out by Antonio) was something like:
>
>int qsearch(int alpha, int beta)
>{
> /* Fail soft version - extremly simplified */
> int best, score, optimistic_score;
> best = eval();
> if (best > alpha)
> {
> if (best >= beta)
> return best;
> alpha = best;
> }
> for (all captures)
> {
> optimistic_score = material balance
> + value of captured piece
> + material gain by promotion
> + safety margin;
> /* More precautions might be wanted */
> if (optimistic_score < alpha)
> {
> if (optimistic_score > best)
> best = optimistic_score;
> continue; /* Futile to try this move */
> }
> makemove();
> score = -qsearch(-beta, -alpha);
> unmakemove();
> if (score > best)
> {
> best = score;
> if (best > alpha)
> {
> if (best >= beta)
> return best;
> alpha = best;
> }
> }
> }
> return best;
>}
>
>One might also note, that skipping those futile moves will not save much. You'd
>call qsearch once, which would call eval() where lazy eval for example would
>return a value > beta. In the eval, you'd probably have the chance to do more
>sophisticated things. Perhaps this capture is capturing the last pawn of the
>opponent, and KNNK position is on the board no. While the estimated optimistic
>score might give -400, the real score is zero. With alpha =-10, you'd skip the
>move. eval() will probably detect this, but using all such things inside search
>is not so easy. But all this is of course not fail soft specific.
>
>>You open and examine contents of two drawers at a time. I do it one at a time.
>>I seperate exceptional issues like forward prunning, lazy eval,etc when the
>>only UB for fail-low is alpha.
>
>I only wanted to show, that with fail soft easily things could go wrong, that
>would not happen with fail hard. The szenario could have been - you had the fail
>hard version already, and just add a new variable best and keep track of the
>best score (the "5 lines" mentioned by Vasik). In real world that qsearch
>function will be much longer - and you might forget about adjusting best when
>skipping those futile moves.
>
>Regards,
>Dieter
Yes, actually, it was a good illustration of what you wanted to say.
Still, I think it would be crazy to fail hard just to avoid some potential bugs.
I am _very_ sure I don't have any fail-soft bugs in Rybka .. :)
Vas
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.