From: Marco Costalba Date: Wed, 20 Jul 2011 02:31:50 +0000 (+0100) Subject: Revert previous patches due to bug X-Git-Url: https://git.sesse.net/?p=stockfish;a=commitdiff_plain;h=a1f9bf19d9aa542fd5109a4ce997eac8122568d4;ds=inline Revert previous patches due to bug We have a bug (possibly because of returning draw from root move list), it is possible to see when looking at games with a GUI, we can see rarely but consistently the score return as #0 for many depths until it comes back to normal values. Revert patches until it is not fixed. Signed-off-by: Marco Costalba --- diff --git a/src/search.cpp b/src/search.cpp index e7933f76..94b34389 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -726,7 +726,7 @@ namespace { if (PvNode && thread.maxPly < ss->ply) thread.maxPly = ss->ply; - // Step 1. Initialize node. + // Step 1. Initialize node and poll. Polling can abort search if (!SpNode) { ss->currentMove = ss->bestMove = threatMove = (ss+1)->excludedMove = MOVE_NONE; @@ -742,6 +742,18 @@ namespace { goto split_point_start; } + if (pos.thread() == 0 && ++NodesSincePoll > NodesBetweenPolls) + { + NodesSincePoll = 0; + poll(pos); + } + + // Step 2. Check for aborted search and immediate draw + if (( StopRequest + || pos.is_draw() + || ss->ply > PLY_MAX) && !RootNode) + return VALUE_DRAW; + // Step 3. Mate distance pruning if (!RootNode) { @@ -902,12 +914,7 @@ namespace { if (pos.pl_move_is_legal(move, ci.pinned)) { pos.do_move(move, st, ci, pos.move_gives_check(move, ci)); - - if (pos.is_draw() || ss->ply + 1 > PLY_MAX) - value = VALUE_DRAW; - else - value = -search(pos, ss+1, -rbeta, -rbeta+1, rdepth); - + value = -search(pos, ss+1, -rbeta, -rbeta+1, rdepth); pos.undo_move(move); if (value >= rbeta) return value; @@ -1097,22 +1104,6 @@ split_point_start: // At split points actual search starts from here // Step 14. Make the move pos.do_move(move, st, ci, givesCheck); - // Step XX. Poll. Check if search should be aborted. - if (pos.thread() == 0 && ++NodesSincePoll > NodesBetweenPolls) - { - NodesSincePoll = 0; - poll(pos); - } - - // Step XX. Check for aborted search and immediate draw - if ( StopRequest - || pos.is_draw() - || ss->ply + 1 > PLY_MAX) - { - value = VALUE_DRAW; - goto undo; - } - // Step extra. pv search (only in PV nodes) // The first move in list is the expected PV if (isPvMove) @@ -1159,7 +1150,6 @@ split_point_start: // At split points actual search starts from here } // Step 17. Undo move -undo: pos.undo_move(move); assert(value > -VALUE_INFINITE && value < VALUE_INFINITE); @@ -1322,6 +1312,10 @@ undo: ss->bestMove = ss->currentMove = MOVE_NONE; ss->ply = (ss-1)->ply + 1; + // Check for an instant draw or maximum ply reached + if (pos.is_draw() || ss->ply > PLY_MAX) + return VALUE_DRAW; + // Decide whether or not to include checks, this fixes also the type of // TT entry depth that we are going to use. Note that in qsearch we use // only two types of depth in TT: DEPTH_QS_CHECKS or DEPTH_QS_NO_CHECKS. @@ -1456,12 +1450,7 @@ undo: // Make and search the move pos.do_move(move, st, ci, givesCheck); - - if (pos.is_draw() || ss->ply+1 > PLY_MAX) - value = VALUE_DRAW; - else - value = -qsearch(pos, ss+1, -beta, -alpha, depth-ONE_PLY); - + value = -qsearch(pos, ss+1, -beta, -alpha, depth-ONE_PLY); pos.undo_move(move); assert(value > -VALUE_INFINITE && value < VALUE_INFINITE);