enum NodeType { Root, PV, NonPV };
// Razoring and futility margin based on depth
- Value razor_margin(Depth d) { return Value(512 + 32 * d); }
+ int razor_margin[4] = {483, 570, 603, 554};
Value futility_margin(Depth d) { return Value(200 * d); }
// Futility and reductions lookup tables, initialized at startup
void Search::init() {
- const double K[][2] = {{ 0.83, 2.25 }, { 0.50, 3.00 }};
+ const double K[][2] = {{ 0.799, 2.281 }, { 0.484, 3.023 }};
for (int pv = 0; pv <= 1; ++pv)
for (int imp = 0; imp <= 1; ++imp)
// Reset aspiration window starting size
if (depth >= 5 * ONE_PLY)
{
- delta = Value(16);
+ delta = Value(18);
alpha = std::max(rootMoves[PVIdx].previousScore - delta,-VALUE_INFINITE);
beta = std::min(rootMoves[PVIdx].previousScore + delta, VALUE_INFINITE);
}
else
break;
- delta += delta / 2;
+ delta += delta / 4 + 5;
assert(alpha >= -VALUE_INFINITE && beta <= VALUE_INFINITE);
}
// Step 6. Razoring (skipped when in check)
if ( !PvNode
&& depth < 4 * ONE_PLY
- && eval + razor_margin(depth) <= alpha
+ && eval + razor_margin[depth] <= alpha
&& ttMove == MOVE_NONE)
{
if ( depth <= ONE_PLY
- && eval + razor_margin(3 * ONE_PLY) <= alpha)
+ && eval + razor_margin[3 * ONE_PLY] <= alpha)
return qsearch<NonPV, false>(pos, ss, alpha, beta, DEPTH_ZERO);
- Value ralpha = alpha - razor_margin(depth);
+ Value ralpha = alpha - razor_margin[depth];
Value v = qsearch<NonPV, false>(pos, ss, ralpha, ralpha+1, DEPTH_ZERO);
if (v <= ralpha)
return v;