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:
parent
0719470e50
commit
ec0f0eba6b
1 changed files with 24 additions and 3 deletions
|
@ -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
|
||||||
|
|
Loading…
Add table
Reference in a new issue