contempt = (us == WHITE ? make_score(ct, ct / 2)
: -make_score(ct, ct / 2));
+ int searchAgainCounter = 0;
+
// Iterative deepening loop until requested to stop or the target depth is reached
while ( ++rootDepth < MAX_PLY
&& !Threads.stop
size_t pvFirst = 0;
pvLast = 0;
+ if (!Threads.increaseDepth)
+ searchAgainCounter++;
+
// MultiPV loop. We perform a full root search for each PV line
for (pvIdx = 0; pvIdx < multiPV && !Threads.stop; ++pvIdx)
{
int failedHighCnt = 0;
while (true)
{
- Depth adjustedDepth = std::max(1, rootDepth - failedHighCnt);
+ Depth adjustedDepth = std::max(1, rootDepth - failedHighCnt - searchAgainCounter);
bestValue = ::search<PV>(rootPos, ss, alpha, beta, adjustedDepth, false);
// Bring the best move to the front. It is critical that sorting
else
Threads.stop = true;
}
+ else if ( Threads.increaseDepth
+ && Time.elapsed() > Time.optimum() * fallingEval * reduction * bestMoveInstability * 0.6)
+ Threads.increaseDepth = false;
+ else
+ Threads.increaseDepth = true;
}
mainThread->iterValue[iterIdx] = bestValue;