// Step 1. Initialize node
Thread* thisThread = pos.this_thread();
- ss->inCheck = pos.checkers();
- priorCapture = pos.captured_piece();
- Color us = pos.side_to_move();
- moveCount = captureCount = quietCount = ss->moveCount = 0;
- bestValue = -VALUE_INFINITE;
- maxValue = VALUE_INFINITE;
+ ss->inCheck = pos.checkers();
+ priorCapture = pos.captured_piece();
+ Color us = pos.side_to_move();
+ moveCount = captureCount = quietCount = ss->moveCount = 0;
+ bestValue = -VALUE_INFINITE;
+ maxValue = VALUE_INFINITE;
ss->distanceFromPv = (PvNode ? 0 : ss->distanceFromPv);
// Check for the available remaining time
return probCutBeta;
assert(probCutBeta < VALUE_INFINITE);
+
MovePicker mp(pos, ttMove, probCutBeta - ss->staticEval, &captureHistory);
int probCutCount = 0;
bool ttPv = ss->ttPv;
{
Value singularBeta = ttValue - ((formerPv + 4) * depth) / 2;
Depth singularDepth = (depth - 1 + 3 * formerPv) / 2;
+
ss->excludedMove = move;
value = search<NonPV>(pos, ss, singularBeta - 1, singularBeta, singularDepth, cutNode);
ss->excludedMove = MOVE_NONE;
// Decrease reduction if position is or has been on the PV
// and node is not likely to fail low. (~10 Elo)
- if (ss->ttPv && !likelyFailLow)
+ if ( ss->ttPv
+ && !likelyFailLow)
r -= 2;
// Increase reduction at root and non-PV nodes when the best move does not change frequently
- if ((rootNode || !PvNode) && thisThread->rootDepth > 10 && thisThread->bestMoveChanges <= 2)
+ if ( (rootNode || !PvNode)
+ && thisThread->rootDepth > 10
+ && thisThread->bestMoveChanges <= 2)
r++;
// More reductions for late moves if position was not in previous PV
- if (moveCountPruning && !formerPv)
+ if ( moveCountPruning
+ && !formerPv)
r++;
// Decrease reduction if opponent's move count is high (~5 Elo)
if (captureOrPromotion)
{
- // Unless giving check, this capture is likely bad
+ // Increase reduction for non-checking captures likely to be bad
if ( !givesCheck
&& ss->staticEval + PieceValue[EG][pos.captured_piece()] + 210 * depth <= alpha)
r++;
// Decrease reduction for moves that escape a capture. Filter out
// castling moves, because they are coded as "king captures rook" and
- // hence break make_move(). (~2 Elo)
+ // 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);
assert(moveCount || !ss->inCheck || excludedMove || !MoveList<LEGAL>(pos).size());
if (!moveCount)
- bestValue = excludedMove ? alpha
- : ss->inCheck ? mated_in(ss->ply) : VALUE_DRAW;
+ bestValue = excludedMove ? alpha :
+ ss->inCheck ? mated_in(ss->ply)
+ : VALUE_DRAW;
// If there is a move which produces search value greater than alpha we update stats of searched moves
else if (bestMove)