Skip to content

Commit

Permalink
Remove moveCountPruning in search.cpp
Browse files Browse the repository at this point in the history
The definition of moveCountPruning may cause confusion by implying that
the variable is unconstrained. However, once it is set to true, it
should not be reset to false, otherwise it would break the internal
logic of MovePicker.

Several patches have overlooked this constraint. For example:
https://tests.stockfishchess.org/tests/view/671e7c0486d5ee47d953d226
https://tests.stockfishchess.org/tests/view/66a1de7b4ff211be9d4eccea

The implementation approach was suggested by Disservin.

Passed non-regression STC:
LLR: 3.02 (-2.94,2.94) <-1.75,0.25>
Total: 180672 W: 47072 L: 47006 D: 86594
Ptnml(0-2): 536, 19482, 50247, 19522, 549
https://tests.stockfishchess.org/tests/view/6720df6f86d5ee47d953d542

closes official-stockfish#5661

No functional change

bench 1281912
  • Loading branch information
MinetaS authored and linrock committed Oct 31, 2024
1 parent 8681d3c commit 339e8d5
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 6 deletions.
4 changes: 3 additions & 1 deletion src/movepick.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -216,7 +216,7 @@ Move MovePicker::select(Pred filter) {
// This is the most important method of the MovePicker class. We emit one
// new pseudo-legal move on every call until there are no more moves left,
// picking the move with the highest score from a list of generated moves.
Move MovePicker::next_move(bool skipQuiets) {
Move MovePicker::next_move() {

auto quiet_threshold = [](Depth d) { return -3560 * d; };

Expand Down Expand Up @@ -322,4 +322,6 @@ Move MovePicker::next_move(bool skipQuiets) {
return Move::none(); // Silence warning
}

void MovePicker::skip_quiet_moves() { skipQuiets = true; }

} // namespace Stockfish
4 changes: 3 additions & 1 deletion src/movepick.h
Original file line number Diff line number Diff line change
Expand Up @@ -212,7 +212,8 @@ class MovePicker {
const PawnHistory*,
int);
MovePicker(const Position&, Move, int, const CapturePieceToHistory*);
Move next_move(bool skipQuiets = false);
Move next_move();
void skip_quiet_moves();

private:
template<PickType T, typename Pred>
Expand All @@ -234,6 +235,7 @@ class MovePicker {
int threshold;
Depth depth;
int ply;
bool skipQuiets = false;
ExtMove moves[MAX_MOVES];
};

Expand Down
8 changes: 4 additions & 4 deletions src/search.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -942,12 +942,11 @@ Value Search::Worker::search(

value = bestValue;

int moveCount = 0;
bool moveCountPruning = false;
int moveCount = 0;

// Step 13. Loop through all pseudo-legal moves until no moves remain
// or a beta cutoff occurs.
while ((move = mp.next_move(moveCountPruning)) != Move::none())
while ((move = mp.next_move()) != Move::none())
{
assert(move.is_ok());

Expand Down Expand Up @@ -993,7 +992,8 @@ Value Search::Worker::search(
if (!rootNode && pos.non_pawn_material(us) && bestValue > VALUE_TB_LOSS_IN_MAX_PLY)
{
// Skip quiet moves if movecount exceeds our FutilityMoveCount threshold (~8 Elo)
moveCountPruning = moveCount >= futility_move_count(improving, depth);
if (moveCount >= futility_move_count(improving, depth))
mp.skip_quiet_moves();

// Reduced depth of the next LMR search
int lmrDepth = newDepth - r;
Expand Down

0 comments on commit 339e8d5

Please sign in to comment.