Fix for SF getting stuck during search (issue #5023)

Among several passed similar versions this is the simpliest one.

Passed STC non-regression
https://tests.stockfishchess.org/tests/view/691f3b4aacb6dbdf23d07d11
LLR: 2.93 (-2.94,2.94) <-1.75,0.25>
Total: 126368 W: 32607 L: 32489 D: 61272
Ptnml(0-2): 408, 13974, 34298, 14100, 404

Passed LTC non-regression
https://tests.stockfishchess.org/tests/view/69209712acb6dbdf23d0836a
LLR: 2.94 (-2.94,2.94) <-1.75,0.25>
Total: 114786 W: 29097 L: 28976 D: 56713
Ptnml(0-2): 53, 11841, 33488, 11954, 57

closes https://github.com/official-stockfish/Stockfish/pull/6447

Bench: 2941767
This commit is contained in:
pb00067
2025-11-30 21:58:34 +01:00
committed by Disservin
parent f4244e13e4
commit c73f21df97
+11 -1
View File
@@ -141,6 +141,16 @@ void update_all_stats(const Position& pos,
Move TTMove,
int moveCount);
bool isShuffling(Move move, Stack* const ss, const Position& pos) {
if (type_of(pos.moved_piece(move)) == PAWN || pos.capture_stage(move)
|| pos.rule50_count() < 10)
return false;
if (pos.state()->pliesFromNull <= 6 || ss->ply < 20)
return false;
return move.from_sq() == (ss - 2)->currentMove.to_sq()
&& (ss - 2)->currentMove.from_sq() == (ss - 4)->currentMove.to_sq();
}
} // namespace
Search::Worker::Worker(SharedState& sharedState,
@@ -1114,7 +1124,7 @@ moves_loop: // When in check, search starts here
// and lower extension margins scale well.
if (!rootNode && move == ttData.move && !excludedMove && depth >= 6 + ss->ttPv
&& is_valid(ttData.value) && !is_decisive(ttData.value) && (ttData.bound & BOUND_LOWER)
&& ttData.depth >= depth - 3)
&& ttData.depth >= depth - 3 && !isShuffling(move, ss, pos))
{
Value singularBeta = ttData.value - (53 + 75 * (ss->ttPv && !PvNode)) * depth / 60;
Depth singularDepth = newDepth / 2;