value = bestValue;
singularQuietLMR = moveCountPruning = false;
+ // Indicate PvNodes that will probably fail low if the node was searched
+ // at a depth equal or greater than the current depth, and the result of this search was a fail low.
+ bool likelyFailLow = PvNode
+ && ttMove
+ && (tte->bound() & BOUND_UPPER)
+ && tte->depth() >= depth;
+
// Mark this node as being searched
ThreadHolding th(thisThread, posKey, ss->ply);
movedPiece = pos.moved_piece(move);
givesCheck = pos.gives_check(move);
- // Indicate PvNodes that will probably fail low if node was searched with non-PV search
- // at depth equal or greater to current depth and result of this search was far below alpha
- bool likelyFailLow = PvNode
- && ttMove
- && (tte->bound() & BOUND_UPPER)
- && ttValue < alpha + 200 + 100 * depth
- && tte->depth() >= depth;
-
// Calculate new depth for this move
newDepth = depth - 1;
{
extension = 1;
singularQuietLMR = !ttCapture;
+ if (!PvNode && value < singularBeta - 140)
+ extension = 2;
}
// Multi-cut pruning
}
}
- // Check extension (~2 Elo)
- else if ( givesCheck
- && (pos.is_discovered_check_on_king(~us, move) || pos.see_ge(move)))
- extension = 1;
-
// Add extension to new depth
newDepth += extension;
&& thisThread->bestMoveChanges <= 2)
r++;
- // More reductions for late moves if position was not in previous PV
- if ( moveCountPruning
- && !formerPv)
- r++;
-
// Decrease reduction if opponent's move count is high (~5 Elo)
if ((ss-1)->moveCount > 13)
r--;
- // Decrease reduction if ttMove has been singularly extended (~3 Elo)
+ // Decrease reduction if ttMove has been singularly extended (~1 Elo)
if (singularQuietLMR)
r--;
}
else
{
- // Increase reduction if ttMove is a capture (~5 Elo)
+ // Increase reduction if ttMove is a capture (~3 Elo)
if (ttCapture)
r++;
if (cutNode)
r += 2;
- // Decrease reduction for moves that escape a capture. Filter out
- // castling moves, because they are coded as "king captures rook" and
- // hence break reverse_move() (~2 Elo)
- else if ( type_of(move) == NORMAL
- && !pos.see_ge(reverse_move(move)))
- r -= 2 + ss->ttPv - (type_of(movedPiece) == PAWN);
-
ss->statScore = thisThread->mainHistory[us][from_to(move)]
+ (*contHist[0])[movedPiece][to_sq(move)]
+ (*contHist[1])[movedPiece][to_sq(move)]