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.