// History and stats update bonus, based on depth
int stat_bonus(Depth d) {
- return d > 14 ? 73 : 6 * d * d + 229 * d - 215;
+ return std::min((6 * d + 229) * d - 215 , 2000);
}
// Add a small random component to draw evaluations to avoid 3-fold blindness
else
{
// In case of null move search use previous static eval with a different sign
- // and addition of two tempos
if ((ss-1)->currentMove != MOVE_NULL)
ss->staticEval = eval = evaluate(pos);
else
{
Depth r = reduction(improving, depth, moveCount, rangeReduction > 2);
+ // Decrease reduction if on the PV (~1 Elo)
if (PvNode)
r--;
}
else
// In case of null move search use previous static eval with a different sign
- // and addition of two tempos
ss->staticEval = bestValue =
(ss-1)->currentMove != MOVE_NULL ? evaluate(pos)
: -(ss-1)->staticEval;
PieceType captured = type_of(pos.piece_on(to_sq(bestMove)));
bonus1 = stat_bonus(depth + 1);
- bonus2 = bestValue > beta + PawnValueMg ? bonus1 // larger bonus
- : std::min(bonus1, stat_bonus(depth)); // smaller bonus
+ bonus2 = bestValue > beta + PawnValueMg ? bonus1 // larger bonus
+ : stat_bonus(depth); // smaller bonus
if (!pos.capture_or_promotion(bestMove))
{