Skip to content

Commit

Permalink
Adjust stand pat in qsearch on pv nodes
Browse files Browse the repository at this point in the history
Instead of immediately returning a fail high do this only at non-pv nodes, for
pv nodes adjust bestValue to value between alpha and beta and continue
searching. Idea is to do it the same way as it's done in search where we don't
return positive beta cutoffs after ttHits / zero window search at PvNodes and
instead fully search lines.

Passed STC:
https://tests.stockfishchess.org/tests/view/65739b0af09ce1261f122f33
LLR: 2.94 (-2.94,2.94) <0.00,2.00>
Total: 189216 W: 48142 L: 47598 D: 93476
Ptnml(0-2): 584, 22463, 48051, 22845, 665

Passed LTC:
https://tests.stockfishchess.org/tests/view/657701214d789acf40aac194
LLR: 2.94 (-2.94,2.94) <0.50,2.50>
Total: 82506 W: 20689 L: 20269 D: 41548
Ptnml(0-2): 56, 9236, 22268, 9618, 75

Two issues had to be resolved:
    - in rare cases it set alpha to the same value as beta and thus broke some asserts;
    - messed up with returning tb win values.

      Fix passed non-regression LTC vs this patch:
      https://tests.stockfishchess.org/tests/view/6578113b4d789acf40aad544
      LLR: 2.96 (-2.94,2.94) <-1.75,0.25>
      Total: 277308 W: 68839 L: 68880 D: 139589
      Ptnml(0-2): 167, 31580, 75212, 31517, 178

closes official-stockfish#4922

Bench: 1069503

Co-Authored-By: Muzhen Gaming <[email protected]>
Co-Authored-By: Shahin M. Shahin <[email protected]>
Co-Authored-By: fffelix-huang <[email protected]>
  • Loading branch information
4 people authored and rn5f107s2 committed Jan 14, 2024
1 parent e5b0502 commit 767c940
Showing 1 changed file with 10 additions and 5 deletions.
15 changes: 10 additions & 5 deletions src/search.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1468,14 +1468,19 @@ Value qsearch(Position& pos, Stack* ss, Value alpha, Value beta, Depth depth) {
ss->staticEval = bestValue =
(ss - 1)->currentMove != MOVE_NULL ? evaluate(pos) : -(ss - 1)->staticEval;

// Stand pat. Return immediately if static value is at least beta
// Stand pat. Return immediately if bestValue is at least beta at non-Pv nodes.
// At PvNodes set bestValue between alpha and beta instead
if (bestValue >= beta)
{
if (!ss->ttHit)
tte->save(posKey, value_to_tt(bestValue, ss->ply), false, BOUND_LOWER, DEPTH_NONE,
MOVE_NONE, ss->staticEval);
if (!PvNode || abs(bestValue) >= VALUE_TB_WIN_IN_MAX_PLY)
{
if (!ss->ttHit)
tte->save(posKey, value_to_tt(bestValue, ss->ply), false, BOUND_LOWER,
DEPTH_NONE, MOVE_NONE, ss->staticEval);

return bestValue;
return bestValue;
}
bestValue = std::min((alpha + beta) / 2, beta - 1);
}

if (bestValue > alpha)
Expand Down

0 comments on commit 767c940

Please sign in to comment.