summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
83e829c)
by disabling null-move-pruning for the side to move for first part of
the remaining search tree. This helps to better recognize zugzwang.
STC:
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 18220 W: 3379 L: 3253 D: 11588
http://tests.stockfishchess.org/tests/view/
5a2fa6460ebc590ccbb8bc2f
LTC:
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 41899 W: 5359 L: 5265 D: 31275
http://tests.stockfishchess.org/tests/view/
5a2fcf440ebc590ccbb8bc47
For further detail see commit notes and discussion at
https://github.com/pb00068/Stockfish/commit/
6401a80ab91df5c54390ac357409fef2e51ff5bb
bench:
5776193
// Step 8. Null move search with verification search (is omitted in PV nodes)
if ( !PvNode
&& eval >= beta
// Step 8. Null move search with verification search (is omitted in PV nodes)
if ( !PvNode
&& eval >= beta
- && ss->staticEval >= beta - 36 * depth / ONE_PLY + 225)
+ && ss->staticEval >= beta - 36 * depth / ONE_PLY + 225
+ && (ss->ply >= thisThread->nmp_ply || ss->ply % 2 == thisThread->pair))
{
assert(eval - beta >= 0);
{
assert(eval - beta >= 0);
return nullValue;
// Do verification search at high depths
return nullValue;
// Do verification search at high depths
+ R += ONE_PLY;
+ // disable null move pruning for side to move for the first part of the remaining search tree
+ int nmp_ply = thisThread->nmp_ply;
+ int pair = thisThread->pair;
+ thisThread->nmp_ply = ss->ply + 3 * (depth-R) / 4;
+ thisThread->pair = (ss->ply % 2) == 0;
+
Value v = depth-R < ONE_PLY ? qsearch<NonPV, false>(pos, ss, beta-1, beta)
: search<NonPV>(pos, ss, beta-1, beta, depth-R, false, true);
Value v = depth-R < ONE_PLY ? qsearch<NonPV, false>(pos, ss, beta-1, beta)
: search<NonPV>(pos, ss, beta-1, beta, depth-R, false, true);
+ thisThread->pair = pair;
+ thisThread->nmp_ply = nmp_ply;
if (v >= beta)
return nullValue;
if (v >= beta)
return nullValue;
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);
+ th->nmp_ply = 0;
+ th->pair = -1;
}
setupStates->back() = tmp;
}
setupStates->back() = tmp;
Material::Table materialTable;
Endgames endgames;
size_t PVIdx;
Material::Table materialTable;
Endgames endgames;
size_t PVIdx;
+ int selDepth, nmp_ply, pair;
std::atomic<uint64_t> nodes, tbHits;
Position rootPos;
std::atomic<uint64_t> nodes, tbHits;
Position rootPos;