1
0
Fork 0
mirror of https://github.com/sockspls/badfish synced 2025-04-30 16:53:09 +00:00

qsearch(): remove inCheck as a template parameter

Simplifies a bit, and avoids bugs as in #1478

Passed STC:
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 104862 W: 21302 L: 21337 D: 62223
http://tests.stockfishchess.org/tests/view/5aa6de1b0ebc590297810097

Closes https://github.com/official-stockfish/Stockfish/pull/1484

No functional change
This commit is contained in:
Joost VandeVondele 2018-03-13 08:10:59 +01:00 committed by Stéphane Nicolet
parent 840605c14e
commit efe702e9f5
2 changed files with 12 additions and 17 deletions

View file

@ -77,16 +77,17 @@ Lucas Braesch (lucasart)
Lyudmil Antonov (lantonov) Lyudmil Antonov (lantonov)
Matthew Lai (matthewlai) Matthew Lai (matthewlai)
Matthew Sullivan Matthew Sullivan
mbootsector
Michael Byrne (MichaelB7) Michael Byrne (MichaelB7)
Michael Stembera (mstembera) Michael Stembera (mstembera)
Michel Van den Bergh (vdbergh) Michel Van den Bergh (vdbergh)
Mikael Bäckman (mbootsector)
Mike Whiteley (protonspring) Mike Whiteley (protonspring)
Miroslav Fontán (Hexik) Miroslav Fontán (Hexik)
Mohammed Li (tthsqe12) Mohammed Li (tthsqe12)
Nathan Rugg (nmrugg) Nathan Rugg (nmrugg)
Nicklas Persson (NicklasPersson) Nicklas Persson (NicklasPersson)
Niklas Fiekas (niklasf) Niklas Fiekas (niklasf)
noobpwnftw
Oskar Werkelin Ahlin Oskar Werkelin Ahlin
Pablo Vazquez Pablo Vazquez
Pascal Romaret Pascal Romaret

View file

@ -101,7 +101,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, bool skipEarlyPruning);
template <NodeType NT, bool InCheck> 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);
Value value_to_tt(Value v, int ply); Value value_to_tt(Value v, int ply);
@ -690,12 +690,12 @@ namespace {
{ {
if ( depth == ONE_PLY if ( depth == ONE_PLY
&& eval + RazorMargin1 <= alpha) && eval + RazorMargin1 <= alpha)
return qsearch<NonPV, false>(pos, ss, alpha, alpha+1); return qsearch<NonPV>(pos, ss, alpha, alpha+1);
else if (eval + RazorMargin2 <= alpha) else if (eval + RazorMargin2 <= alpha)
{ {
Value ralpha = alpha - RazorMargin2; Value ralpha = alpha - RazorMargin2;
Value v = qsearch<NonPV, false>(pos, ss, ralpha, ralpha+1); Value v = qsearch<NonPV>(pos, ss, ralpha, ralpha+1);
if (v <= ralpha) if (v <= ralpha)
return v; return v;
@ -724,7 +724,7 @@ namespace {
ss->contHistory = thisThread->contHistory[NO_PIECE][0].get(); ss->contHistory = thisThread->contHistory[NO_PIECE][0].get();
pos.do_null_move(st); pos.do_null_move(st);
Value nullValue = depth-R < ONE_PLY ? -qsearch<NonPV, false>(pos, ss+1, -beta, -beta+1) Value nullValue = depth-R < ONE_PLY ? -qsearch<NonPV>(pos, ss+1, -beta, -beta+1)
: - search<NonPV>(pos, ss+1, -beta, -beta+1, depth-R, !cutNode, true); : - search<NonPV>(pos, ss+1, -beta, -beta+1, depth-R, !cutNode, true);
pos.undo_null_move(); pos.undo_null_move();
@ -742,7 +742,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 = depth-R < ONE_PLY ? qsearch<NonPV, false>(pos, ss, beta-1, beta) Value v = depth-R < ONE_PLY ? qsearch<NonPV>(pos, ss, beta-1, beta)
: search<NonPV>(pos, ss, beta-1, beta, depth-R, false, true); : search<NonPV>(pos, ss, beta-1, beta, depth-R, false, true);
thisThread->nmp_odd = thisThread->nmp_ply = 0; thisThread->nmp_odd = thisThread->nmp_ply = 0;
@ -1013,9 +1013,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 = newDepth < ONE_PLY ? value = newDepth < ONE_PLY ? -qsearch<NonPV>(pos, ss+1, -(alpha+1), -alpha)
givesCheck ? -qsearch<NonPV, true>(pos, ss+1, -(alpha+1), -alpha)
: -qsearch<NonPV, false>(pos, ss+1, -(alpha+1), -alpha)
: - search<NonPV>(pos, ss+1, -(alpha+1), -alpha, newDepth, !cutNode, false); : - search<NonPV>(pos, ss+1, -(alpha+1), -alpha, newDepth, !cutNode, false);
// 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
@ -1026,9 +1024,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 = newDepth < ONE_PLY ? value = newDepth < ONE_PLY ? -qsearch<PV>(pos, ss+1, -beta, -alpha)
givesCheck ? -qsearch<PV, true>(pos, ss+1, -beta, -alpha)
: -qsearch<PV, false>(pos, ss+1, -beta, -alpha)
: - search<PV>(pos, ss+1, -beta, -alpha, newDepth, false, false); : - search<PV>(pos, ss+1, -beta, -alpha, newDepth, false, false);
} }
@ -1158,17 +1154,16 @@ moves_loop: // When in check, search starts from here
// qsearch() is the quiescence search function, which is called by the main // qsearch() is the quiescence search function, which is called by the main
// search function with depth zero, or recursively with depth less than ONE_PLY. // search function with depth zero, or recursively with depth less than ONE_PLY.
template <NodeType NT>
template <NodeType NT, bool InCheck>
Value qsearch(Position& pos, Stack* ss, Value alpha, Value beta, Depth depth) { Value qsearch(Position& pos, Stack* ss, Value alpha, Value beta, Depth depth) {
const bool PvNode = NT == PV; const bool PvNode = NT == PV;
const bool InCheck = bool(pos.checkers());
assert(alpha >= -VALUE_INFINITE && alpha < beta && beta <= VALUE_INFINITE); assert(alpha >= -VALUE_INFINITE && alpha < beta && beta <= VALUE_INFINITE);
assert(PvNode || (alpha == beta - 1)); assert(PvNode || (alpha == beta - 1));
assert(depth <= DEPTH_ZERO); assert(depth <= DEPTH_ZERO);
assert(depth / ONE_PLY * ONE_PLY == depth); assert(depth / ONE_PLY * ONE_PLY == depth);
assert(InCheck == bool(pos.checkers()));
Move pv[MAX_PLY+1]; Move pv[MAX_PLY+1];
StateInfo st; StateInfo st;
@ -1320,8 +1315,7 @@ moves_loop: // When in check, search starts from here
// Make and search the move // Make and search the move
pos.do_move(move, st, givesCheck); pos.do_move(move, st, givesCheck);
value = givesCheck ? -qsearch<NT, true>(pos, ss+1, -beta, -alpha, depth - ONE_PLY) value = -qsearch<NT>(pos, ss+1, -beta, -alpha, depth - ONE_PLY);
: -qsearch<NT, false>(pos, ss+1, -beta, -alpha, depth - ONE_PLY);
pos.undo_move(move); pos.undo_move(move);
assert(value > -VALUE_INFINITE && value < VALUE_INFINITE); assert(value > -VALUE_INFINITE && value < VALUE_INFINITE);