mirror of
https://github.com/sockspls/badfish
synced 2025-05-01 09:13:08 +00:00
Remove skipEarlyPruning argument to search()
Remove nine boolean arguments and the corresponding skipEarlyPruning variable. Instead, skip early pruning only when there is an excluded move, and try null move pruning only if the previous move was not itself a null move. passed STC: LLR: 2.95 (-2.94,2.94) [-3.00,1.00] Total: 33623 W: 6853 L: 6755 D: 20015 http://tests.stockfishchess.org/tests/view/5aef462a0ebc5902a409a10e passed LTC: LLR: 2.95 (-2.94,2.94) [-3.00,1.00] Total: 39474 W: 5882 L: 5789 D: 27803 http://tests.stockfishchess.org/tests/view/5aefd4b80ebc5902a409a164 Closes https://github.com/official-stockfish/Stockfish/pull/1585 Bench: 4953556
This commit is contained in:
parent
155d5417d9
commit
8d1625d6df
1 changed files with 13 additions and 14 deletions
|
@ -107,7 +107,7 @@ namespace {
|
||||||
};
|
};
|
||||||
|
|
||||||
template <NodeType NT>
|
template <NodeType NT>
|
||||||
Value search(Position& pos, Stack* ss, Value alpha, Value beta, Depth depth, bool cutNode, bool skipEarlyPruning);
|
Value search(Position& pos, Stack* ss, Value alpha, Value beta, Depth depth, bool cutNode);
|
||||||
|
|
||||||
template <NodeType NT>
|
template <NodeType NT>
|
||||||
Value qsearch(Position& pos, Stack* ss, Value alpha, Value beta, Depth depth = DEPTH_ZERO);
|
Value qsearch(Position& pos, Stack* ss, Value alpha, Value beta, Depth depth = DEPTH_ZERO);
|
||||||
|
@ -390,7 +390,7 @@ void Thread::search() {
|
||||||
// high/low anymore.
|
// high/low anymore.
|
||||||
while (true)
|
while (true)
|
||||||
{
|
{
|
||||||
bestValue = ::search<PV>(rootPos, ss, alpha, beta, rootDepth, false, false);
|
bestValue = ::search<PV>(rootPos, ss, alpha, beta, rootDepth, false);
|
||||||
|
|
||||||
// Bring the best move to the front. It is critical that sorting
|
// Bring the best move to the front. It is critical that sorting
|
||||||
// is done with a stable algorithm because all the values but the
|
// is done with a stable algorithm because all the values but the
|
||||||
|
@ -517,7 +517,7 @@ namespace {
|
||||||
// search<>() is the main search function for both PV and non-PV nodes
|
// search<>() is the main search function for both PV and non-PV nodes
|
||||||
|
|
||||||
template <NodeType NT>
|
template <NodeType NT>
|
||||||
Value search(Position& pos, Stack* ss, Value alpha, Value beta, Depth depth, bool cutNode, bool skipEarlyPruning) {
|
Value search(Position& pos, Stack* ss, Value alpha, Value beta, Depth depth, bool cutNode) {
|
||||||
|
|
||||||
// Use quiescence search when needed
|
// Use quiescence search when needed
|
||||||
if (depth < ONE_PLY)
|
if (depth < ONE_PLY)
|
||||||
|
@ -713,7 +713,7 @@ namespace {
|
||||||
improving = ss->staticEval >= (ss-2)->staticEval
|
improving = ss->staticEval >= (ss-2)->staticEval
|
||||||
||(ss-2)->staticEval == VALUE_NONE;
|
||(ss-2)->staticEval == VALUE_NONE;
|
||||||
|
|
||||||
if (skipEarlyPruning || !pos.non_pawn_material(pos.side_to_move()))
|
if (ss->excludedMove || !pos.non_pawn_material(pos.side_to_move()))
|
||||||
goto moves_loop;
|
goto moves_loop;
|
||||||
|
|
||||||
// Step 7. Razoring (skipped when in check, ~2 Elo)
|
// Step 7. Razoring (skipped when in check, ~2 Elo)
|
||||||
|
@ -736,6 +736,7 @@ namespace {
|
||||||
|
|
||||||
// Step 9. Null move search with verification search (~40 Elo)
|
// Step 9. Null move search with verification search (~40 Elo)
|
||||||
if ( !PvNode
|
if ( !PvNode
|
||||||
|
&& (ss-1)->currentMove != MOVE_NULL
|
||||||
&& eval >= beta
|
&& 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->nmp_odd))
|
&& (ss->ply >= thisThread->nmp_ply || ss->ply % 2 != thisThread->nmp_odd))
|
||||||
|
@ -750,7 +751,7 @@ namespace {
|
||||||
|
|
||||||
pos.do_null_move(st);
|
pos.do_null_move(st);
|
||||||
|
|
||||||
Value nullValue = -search<NonPV>(pos, ss+1, -beta, -beta+1, depth-R, !cutNode, true);
|
Value nullValue = -search<NonPV>(pos, ss+1, -beta, -beta+1, depth-R, !cutNode);
|
||||||
|
|
||||||
pos.undo_null_move();
|
pos.undo_null_move();
|
||||||
|
|
||||||
|
@ -768,7 +769,7 @@ namespace {
|
||||||
thisThread->nmp_ply = ss->ply + 3 * (depth-R) / 4;
|
thisThread->nmp_ply = ss->ply + 3 * (depth-R) / 4;
|
||||||
thisThread->nmp_odd = ss->ply % 2;
|
thisThread->nmp_odd = ss->ply % 2;
|
||||||
|
|
||||||
Value v = search<NonPV>(pos, ss, beta-1, beta, depth-R, false, true);
|
Value v = search<NonPV>(pos, ss, beta-1, beta, depth-R, false);
|
||||||
|
|
||||||
thisThread->nmp_odd = thisThread->nmp_ply = 0;
|
thisThread->nmp_odd = thisThread->nmp_ply = 0;
|
||||||
|
|
||||||
|
@ -784,8 +785,6 @@ namespace {
|
||||||
&& depth >= 5 * ONE_PLY
|
&& depth >= 5 * ONE_PLY
|
||||||
&& abs(beta) < VALUE_MATE_IN_MAX_PLY)
|
&& abs(beta) < VALUE_MATE_IN_MAX_PLY)
|
||||||
{
|
{
|
||||||
assert(is_ok((ss-1)->currentMove));
|
|
||||||
|
|
||||||
Value rbeta = std::min(beta + 216 - 48 * improving, VALUE_INFINITE);
|
Value rbeta = std::min(beta + 216 - 48 * improving, VALUE_INFINITE);
|
||||||
MovePicker mp(pos, ttMove, rbeta - ss->staticEval, &thisThread->captureHistory);
|
MovePicker mp(pos, ttMove, rbeta - ss->staticEval, &thisThread->captureHistory);
|
||||||
int probCutCount = 0;
|
int probCutCount = 0;
|
||||||
|
@ -808,7 +807,7 @@ namespace {
|
||||||
|
|
||||||
// If the qsearch held perform the regular search
|
// If the qsearch held perform the regular search
|
||||||
if (value >= rbeta)
|
if (value >= rbeta)
|
||||||
value = -search<NonPV>(pos, ss+1, -rbeta, -rbeta+1, depth - 4 * ONE_PLY, !cutNode, false);
|
value = -search<NonPV>(pos, ss+1, -rbeta, -rbeta+1, depth - 4 * ONE_PLY, !cutNode);
|
||||||
|
|
||||||
pos.undo_move(move);
|
pos.undo_move(move);
|
||||||
|
|
||||||
|
@ -822,7 +821,7 @@ namespace {
|
||||||
&& !ttMove)
|
&& !ttMove)
|
||||||
{
|
{
|
||||||
Depth d = 3 * depth / 4 - 2 * ONE_PLY;
|
Depth d = 3 * depth / 4 - 2 * ONE_PLY;
|
||||||
search<NT>(pos, ss, alpha, beta, d, cutNode, true);
|
search<NT>(pos, ss, alpha, beta, d, cutNode);
|
||||||
|
|
||||||
tte = TT.probe(posKey, ttHit);
|
tte = TT.probe(posKey, ttHit);
|
||||||
ttValue = ttHit ? value_from_tt(tte->value(), ss->ply) : VALUE_NONE;
|
ttValue = ttHit ? value_from_tt(tte->value(), ss->ply) : VALUE_NONE;
|
||||||
|
@ -897,7 +896,7 @@ moves_loop: // When in check, search starts from here
|
||||||
{
|
{
|
||||||
Value rBeta = std::max(ttValue - 2 * depth / ONE_PLY, -VALUE_MATE);
|
Value rBeta = std::max(ttValue - 2 * depth / ONE_PLY, -VALUE_MATE);
|
||||||
ss->excludedMove = move;
|
ss->excludedMove = move;
|
||||||
value = search<NonPV>(pos, ss, rBeta - 1, rBeta, depth / 2, cutNode, true);
|
value = search<NonPV>(pos, ss, rBeta - 1, rBeta, depth / 2, cutNode);
|
||||||
ss->excludedMove = MOVE_NONE;
|
ss->excludedMove = MOVE_NONE;
|
||||||
|
|
||||||
if (value < rBeta)
|
if (value < rBeta)
|
||||||
|
@ -1027,7 +1026,7 @@ moves_loop: // When in check, search starts from here
|
||||||
|
|
||||||
Depth d = std::max(newDepth - r, ONE_PLY);
|
Depth d = std::max(newDepth - r, ONE_PLY);
|
||||||
|
|
||||||
value = -search<NonPV>(pos, ss+1, -(alpha+1), -alpha, d, true, false);
|
value = -search<NonPV>(pos, ss+1, -(alpha+1), -alpha, d, true);
|
||||||
|
|
||||||
doFullDepthSearch = (value > alpha && d != newDepth);
|
doFullDepthSearch = (value > alpha && d != newDepth);
|
||||||
}
|
}
|
||||||
|
@ -1036,7 +1035,7 @@ moves_loop: // When in check, search starts from here
|
||||||
|
|
||||||
// Step 17. Full depth search when LMR is skipped or fails high
|
// Step 17. Full depth search when LMR is skipped or fails high
|
||||||
if (doFullDepthSearch)
|
if (doFullDepthSearch)
|
||||||
value = -search<NonPV>(pos, ss+1, -(alpha+1), -alpha, newDepth, !cutNode, false);
|
value = -search<NonPV>(pos, ss+1, -(alpha+1), -alpha, newDepth, !cutNode);
|
||||||
|
|
||||||
// For PV nodes only, do a full PV search on the first move or after a fail
|
// For PV nodes only, do a full PV search on the first move or after a fail
|
||||||
// high (in the latter case search only if value < beta), otherwise let the
|
// high (in the latter case search only if value < beta), otherwise let the
|
||||||
|
@ -1046,7 +1045,7 @@ moves_loop: // When in check, search starts from here
|
||||||
(ss+1)->pv = pv;
|
(ss+1)->pv = pv;
|
||||||
(ss+1)->pv[0] = MOVE_NONE;
|
(ss+1)->pv[0] = MOVE_NONE;
|
||||||
|
|
||||||
value = -search<PV>(pos, ss+1, -beta, -alpha, newDepth, false, false);
|
value = -search<PV>(pos, ss+1, -beta, -alpha, newDepth, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Step 18. Undo move
|
// Step 18. Undo move
|
||||||
|
|
Loading…
Add table
Reference in a new issue