mirror of
https://github.com/HChaZZY/Stockfish.git
synced 2025-12-22 10:06:26 +08:00
@@ -84,11 +84,10 @@ namespace {
|
||||
return d > 17 ? 0 : 29 * d * d + 138 * d - 134;
|
||||
}
|
||||
|
||||
// Add a small random component to draw evaluations to keep search dynamic
|
||||
// and to avoid 3fold-blindness.
|
||||
// Add a small random component to draw evaluations to avoid 3fold-blindness
|
||||
Value value_draw(Depth depth, Thread* thisThread) {
|
||||
return depth < 4 ? VALUE_DRAW
|
||||
: VALUE_DRAW + Value(2 * (thisThread->nodes.load(std::memory_order_relaxed) % 2) - 1);
|
||||
: VALUE_DRAW + Value(2 * (thisThread->nodes & 1) - 1);
|
||||
}
|
||||
|
||||
// Skill structure is used to implement strength limit
|
||||
@@ -162,12 +161,12 @@ void Search::clear() {
|
||||
Time.availableNodes = 0;
|
||||
TT.clear();
|
||||
Threads.clear();
|
||||
Tablebases::init(Options["SyzygyPath"]); // Free up mapped files
|
||||
Tablebases::init(Options["SyzygyPath"]); // Free mapped files
|
||||
}
|
||||
|
||||
|
||||
/// MainThread::search() is called by the main thread when the program receives
|
||||
/// the UCI 'go' command. It searches from the root position and outputs the "bestmove".
|
||||
/// MainThread::search() is started when the program receives the UCI 'go'
|
||||
/// command. It searches from the root position and outputs the "bestmove".
|
||||
|
||||
void MainThread::search() {
|
||||
|
||||
@@ -221,8 +220,9 @@ void MainThread::search() {
|
||||
if (Limits.npmsec)
|
||||
Time.availableNodes += Limits.inc[us] - Threads.nodes_searched();
|
||||
|
||||
// Check if there are threads with a better score than main thread
|
||||
Thread* bestThread = this;
|
||||
|
||||
// Check if there are threads with a better score than main thread
|
||||
if ( Options["MultiPV"] == 1
|
||||
&& !Limits.depth
|
||||
&& !Skill(Options["Skill Level"]).enabled()
|
||||
@@ -273,9 +273,9 @@ void MainThread::search() {
|
||||
|
||||
void Thread::search() {
|
||||
|
||||
// To allow access to (ss-5) up to (ss+2), the stack must be oversized.
|
||||
// To allow access to (ss-7) up to (ss+2), the stack must be oversized.
|
||||
// The former is needed to allow update_continuation_histories(ss-1, ...),
|
||||
// which accesses its argument at ss-4, also near the root.
|
||||
// which accesses its argument at ss-6, also near the root.
|
||||
// The latter is needed for statScores and killer initialization.
|
||||
Stack stack[MAX_PLY+10], *ss = stack+7;
|
||||
Move pv[MAX_PLY+1];
|
||||
@@ -317,7 +317,7 @@ void Thread::search() {
|
||||
: Options["Analysis Contempt"] == "Black" && us == WHITE ? -ct
|
||||
: ct;
|
||||
|
||||
// In evaluate.cpp the evaluation is from the white point of view
|
||||
// Evaluation score is from the white point of view
|
||||
contempt = (us == WHITE ? make_score(ct, ct / 2)
|
||||
: -make_score(ct, ct / 2));
|
||||
|
||||
@@ -832,8 +832,7 @@ namespace {
|
||||
}
|
||||
|
||||
// Step 11. Internal iterative deepening (~2 Elo)
|
||||
if ( depth >= 8 * ONE_PLY
|
||||
&& !ttMove)
|
||||
if (depth >= 8 * ONE_PLY && !ttMove)
|
||||
{
|
||||
search<NT>(pos, ss, alpha, beta, depth - 7 * ONE_PLY, cutNode);
|
||||
|
||||
@@ -847,6 +846,7 @@ moves_loop: // When in check, search starts from here
|
||||
const PieceToHistory* contHist[] = { (ss-1)->continuationHistory, (ss-2)->continuationHistory,
|
||||
nullptr, (ss-4)->continuationHistory,
|
||||
nullptr, (ss-6)->continuationHistory };
|
||||
|
||||
Move countermove = thisThread->counterMoves[pos.piece_on(prevSq)][prevSq];
|
||||
|
||||
MovePicker mp(pos, ttMove, depth, &thisThread->mainHistory,
|
||||
@@ -854,8 +854,8 @@ moves_loop: // When in check, search starts from here
|
||||
contHist,
|
||||
countermove,
|
||||
ss->killers);
|
||||
value = bestValue; // Workaround a bogus 'uninitialized' warning under gcc
|
||||
|
||||
value = bestValue; // Workaround a bogus 'uninitialized' warning under gcc
|
||||
moveCountPruning = false;
|
||||
ttCapture = ttMove && pos.capture_or_promotion(ttMove);
|
||||
|
||||
@@ -946,7 +946,7 @@ moves_loop: // When in check, search starts from here
|
||||
&& bestValue > VALUE_MATED_IN_MAX_PLY)
|
||||
{
|
||||
// Skip quiet moves if movecount exceeds our FutilityMoveCount threshold
|
||||
moveCountPruning = moveCount >= futility_move_count(improving,depth / ONE_PLY);
|
||||
moveCountPruning = moveCount >= futility_move_count(improving, depth / ONE_PLY);
|
||||
|
||||
if ( !captureOrPromotion
|
||||
&& !givesCheck
|
||||
|
||||
Reference in New Issue
Block a user