1
0
Fork 0
mirror of https://github.com/sockspls/badfish synced 2025-04-29 16:23:09 +00:00

If LMR search fails high research at intemediate depth

Do not search immediately at full depth, but try a second
chance at lower depth. This is a feature that should scale
well because become important at high depths where we have
big reductions and also big savings in avoiding a costly
full depth search.

After 942 games at 1+0
Mod vs Orig +158 =645 -139  +7 ELO

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
This commit is contained in:
Marco Costalba 2010-05-28 23:31:05 +01:00
parent 0719470e50
commit ec0f0eba6b

View file

@ -1309,8 +1309,8 @@ namespace {
value = -search<PV>(pos, ss, -beta, -alpha, newDepth, ply+1, false, threadID); value = -search<PV>(pos, ss, -beta, -alpha, newDepth, ply+1, false, threadID);
else else
{ {
// Step 14. Reduced search // Step 14. Reduced depth search
// if the move fails high will be re-searched at full depth. // If the move fails high will be re-searched at full depth.
bool doFullDepthSearch = true; bool doFullDepthSearch = true;
if ( depth >= 3 * OnePly if ( depth >= 3 * OnePly
@ -1325,6 +1325,16 @@ namespace {
value = -search<NonPV>(pos, ss, -(alpha+1), -alpha, newDepth-ss[ply].reduction, ply+1, true, threadID); value = -search<NonPV>(pos, ss, -(alpha+1), -alpha, newDepth-ss[ply].reduction, ply+1, true, threadID);
doFullDepthSearch = (value > alpha); doFullDepthSearch = (value > alpha);
} }
// The move failed high, but if reduction is very big we could
// face a false positive, retry with a less aggressive reduction,
// if the move fails high again then go with full depth search.
if (doFullDepthSearch && ss[ply].reduction > 2 * OnePly)
{
ss[ply].reduction = OnePly;
value = -search<NonPV>(pos, ss, -(alpha+1), -alpha, newDepth-ss[ply].reduction, ply+1, true, threadID);
doFullDepthSearch = (value > alpha);
}
} }
// Step 15. Full depth search // Step 15. Full depth search
@ -1687,7 +1697,7 @@ namespace {
pos.do_move(move, st, ci, moveIsCheck); pos.do_move(move, st, ci, moveIsCheck);
// Step 14. Reduced search // Step 14. Reduced search
// if the move fails high will be re-searched at full depth. // If the move fails high will be re-searched at full depth.
bool doFullDepthSearch = true; bool doFullDepthSearch = true;
if ( !dangerous if ( !dangerous
@ -1702,6 +1712,17 @@ namespace {
value = -search<NonPV>(pos, ss, -(localAlpha+1), -localAlpha, newDepth-ss[sp->ply].reduction, sp->ply+1, true, threadID); value = -search<NonPV>(pos, ss, -(localAlpha+1), -localAlpha, newDepth-ss[sp->ply].reduction, sp->ply+1, true, threadID);
doFullDepthSearch = (value > localAlpha); doFullDepthSearch = (value > localAlpha);
} }
// The move failed high, but if reduction is very big we could
// face a false positive, retry with a less aggressive reduction,
// if the move fails high again then go with full depth search.
if (doFullDepthSearch && ss[sp->ply].reduction > 2 * OnePly)
{
ss[sp->ply].reduction = OnePly;
Value localAlpha = sp->alpha;
value = -search<NonPV>(pos, ss, -(localAlpha+1), -localAlpha, newDepth-ss[sp->ply].reduction, sp->ply+1, true, threadID);
doFullDepthSearch = (value > localAlpha);
}
} }
// Step 15. Full depth search // Step 15. Full depth search