summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
04407e3)
define Color us and use this instead of pos.side_to_move() and nmp_odd. The latter allows to clarify the nmp verification criterion.
Tested for no regression:
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 76713 W: 15303 L: 15284 D: 46126
http://tests.stockfishchess.org/tests/view/
5b046a0d0ebc5914abc12971
No functional change.
// Step 1. Initialize node
Thread* thisThread = pos.this_thread();
inCheck = pos.checkers();
// Step 1. Initialize node
Thread* thisThread = pos.this_thread();
inCheck = pos.checkers();
+ Color us = pos.side_to_move();
moveCount = captureCount = quietCount = ss->moveCount = 0;
bestValue = -VALUE_INFINITE;
maxValue = VALUE_INFINITE;
moveCount = captureCount = quietCount = ss->moveCount = 0;
bestValue = -VALUE_INFINITE;
maxValue = VALUE_INFINITE;
else if (!pos.capture_or_promotion(ttMove))
{
int penalty = -stat_bonus(depth);
else if (!pos.capture_or_promotion(ttMove))
{
int penalty = -stat_bonus(depth);
- thisThread->mainHistory[pos.side_to_move()][from_to(ttMove)] << penalty;
+ thisThread->mainHistory[us][from_to(ttMove)] << penalty;
update_continuation_histories(ss, pos.moved_piece(ttMove), to_sq(ttMove), penalty);
}
}
update_continuation_histories(ss, pos.moved_piece(ttMove), to_sq(ttMove), penalty);
}
}
&& eval >= beta
&& ss->staticEval >= beta - 36 * depth / ONE_PLY + 225
&& !excludedMove
&& eval >= beta
&& ss->staticEval >= beta - 36 * depth / ONE_PLY + 225
&& !excludedMove
- && pos.non_pawn_material(pos.side_to_move())
- && (ss->ply >= thisThread->nmp_ply || ss->ply % 2 != thisThread->nmp_odd))
+ && pos.non_pawn_material(us)
+ && (ss->ply > thisThread->nmp_min_ply || us != thisThread->nmp_color))
{
assert(eval - beta >= 0);
{
assert(eval - beta >= 0);
if (nullValue >= VALUE_MATE_IN_MAX_PLY)
nullValue = beta;
if (nullValue >= VALUE_MATE_IN_MAX_PLY)
nullValue = beta;
- if (abs(beta) < VALUE_KNOWN_WIN && (depth < 12 * ONE_PLY || thisThread->nmp_ply))
+ if (abs(beta) < VALUE_KNOWN_WIN && (depth < 12 * ONE_PLY || thisThread->nmp_min_ply))
return nullValue;
// Do verification search at high depths. Disable null move pruning
// for side to move for the first part of the remaining search tree.
return nullValue;
// Do verification search at high depths. Disable null move pruning
// for side to move for the first part of the remaining search tree.
- thisThread->nmp_ply = ss->ply + 3 * (depth-R) / 4;
- thisThread->nmp_odd = ss->ply % 2;
+ thisThread->nmp_min_ply = ss->ply + 3 * (depth-R) / 4 - 1;
+ thisThread->nmp_color = us;
Value v = search<NonPV>(pos, ss, beta-1, beta, depth-R, false);
Value v = search<NonPV>(pos, ss, beta-1, beta, depth-R, false);
- thisThread->nmp_odd = thisThread->nmp_ply = 0;
+ thisThread->nmp_min_ply = 0;
if (v >= beta)
return nullValue;
if (v >= beta)
return nullValue;
// Step 14. Pruning at shallow depth (~170 Elo)
if ( !rootNode
// Step 14. Pruning at shallow depth (~170 Elo)
if ( !rootNode
- && pos.non_pawn_material(pos.side_to_move())
+ && pos.non_pawn_material(us)
&& bestValue > VALUE_MATED_IN_MAX_PLY)
{
if ( !captureOrPromotion
&& bestValue > VALUE_MATED_IN_MAX_PLY)
{
if ( !captureOrPromotion
&& !pos.see_ge(make_move(to_sq(move), from_sq(move))))
r -= 2 * ONE_PLY;
&& !pos.see_ge(make_move(to_sq(move), from_sq(move))))
r -= 2 * ONE_PLY;
- ss->statScore = thisThread->mainHistory[~pos.side_to_move()][from_to(move)]
+ ss->statScore = thisThread->mainHistory[us][from_to(move)]
+ (*contHist[0])[movedPiece][to_sq(move)]
+ (*contHist[1])[movedPiece][to_sq(move)]
+ (*contHist[3])[movedPiece][to_sq(move)]
+ (*contHist[0])[movedPiece][to_sq(move)]
+ (*contHist[1])[movedPiece][to_sq(move)]
+ (*contHist[3])[movedPiece][to_sq(move)]
for (Thread* th : *this)
{
for (Thread* th : *this)
{
- th->nodes = th->tbHits = th->nmp_ply = th->nmp_odd = 0;
+ th->nodes = th->tbHits = th->nmp_min_ply = 0;
th->rootDepth = th->completedDepth = DEPTH_ZERO;
th->rootMoves = rootMoves;
th->rootPos.set(pos.fen(), pos.is_chess960(), &setupStates->back(), th);
th->rootDepth = th->completedDepth = DEPTH_ZERO;
th->rootMoves = rootMoves;
th->rootPos.set(pos.fen(), pos.is_chess960(), &setupStates->back(), th);
Material::Table materialTable;
Endgames endgames;
size_t PVIdx, PVLast;
Material::Table materialTable;
Endgames endgames;
size_t PVIdx, PVLast;
- int selDepth, nmp_ply, nmp_odd;
+ int selDepth, nmp_min_ply;
+ Color nmp_color;
std::atomic<uint64_t> nodes, tbHits;
Position rootPos;
std::atomic<uint64_t> nodes, tbHits;
Position rootPos;