// History and stats update bonus, based on depth
int stat_bonus(Depth d) {
- return d > 13 ? 29 : 17 * d * d + 134 * d - 134;
+ return d > 14 ? 29 : 8 * d * d + 224 * d - 215;
}
// Add a small random component to draw evaluations to avoid 3fold-blindness
// Step 8. Futility pruning: child node (~50 Elo)
if ( !PvNode
- && depth < 8
+ && depth < 9
&& eval - futility_margin(depth, improving) >= beta
&& eval < VALUE_KNOWN_WIN) // Do not return unproven wins
return eval;
}
}
- probCutBeta = beta + 183 - 49 * improving;
+ probCutBeta = beta + 194 - 49 * improving;
// Step 10. ProbCut (~10 Elo)
// If we have a good enough capture and a reduced search returns a value
// Futility pruning: parent node (~5 Elo)
if ( lmrDepth < 7
&& !ss->inCheck
- && ss->staticEval + 266 + 170 * lmrDepth <= alpha
+ && ss->staticEval + 254 + 159 * lmrDepth <= alpha
&& (*contHist[0])[movedPiece][to_sq(move)]
+ (*contHist[1])[movedPiece][to_sq(move)]
+ (*contHist[3])[movedPiece][to_sq(move)]
- + (*contHist[5])[movedPiece][to_sq(move)] / 2 < 27376)
+ + (*contHist[5])[movedPiece][to_sq(move)] / 2 < 26394)
continue;
// Prune moves with negative SEE (~20 Elo)
continue;
// SEE based pruning
- if (!pos.see_ge(move, Value(-213) * depth)) // (~25 Elo)
+ if (!pos.see_ge(move, Value(-218) * depth)) // (~25 Elo)
continue;
}
}
&& pos.non_pawn_material() <= 2 * RookValueMg)
extension = 1;
- // Late irreversible move extension
- if ( move == ttMove
- && pos.rule50_count() > 80
- && (captureOrPromotion || type_of(movedPiece) == PAWN))
- extension = 2;
-
// Add extension to new depth
newDepth += extension;
|| moveCountPruning
|| ss->staticEval + PieceValue[EG][pos.captured_piece()] <= alpha
|| cutNode
+ || (!PvNode && !formerPv && thisThread->captureHistory[movedPiece][to_sq(move)][type_of(pos.captured_piece())] < 4506)
|| thisThread->ttHitAverage < 432 * TtHitAverageResolution * TtHitAverageWindow / 1024))
{
Depth r = reduction(improving, depth, moveCount);