1
0
Fork 0

Tweak check extension condition

There are two concepts with this patch:

Limit check extensions by using move count.
The idea is to limit search explosion.

Always extend check if the first move gives check.
The idea is to save expensive SEE calls, since the vast
majority of first move will have SEE value >= 0, also
first move may still be strong even if the SEE is negative.

STC:
LLR: 2.95 (-2.94,2.94) [0.00,5.00]
Total: 16503 W: 3068 L: 2873 D: 10562

LTC:
LLR: 2.97 (-2.94,2.94) [0.00,5.00]
Total: 37202 W: 5261 L: 5014 D: 26927

bench: 8543366
pull/696/merge
VoyagerOne 2016-06-06 09:39:26 -04:00 committed by Marco Costalba
parent 6fed8ff22a
commit 7c5d724724
1 changed files with 8 additions and 4 deletions

View File

@ -608,7 +608,7 @@ namespace {
Depth extension, newDepth, predictedDepth;
Value bestValue, value, ttValue, eval, nullValue;
bool ttHit, inCheck, givesCheck, singularExtensionNode, improving;
bool captureOrPromotion, doFullDepthSearch;
bool captureOrPromotion, doFullDepthSearch, moveCountPruning;
Piece moved_piece;
int moveCount, quietCount;
@ -919,8 +919,13 @@ moves_loop: // When in check search starts from here
? ci.checkSquares[type_of(pos.piece_on(from_sq(move)))] & to_sq(move)
: pos.gives_check(move, ci);
moveCountPruning = depth < 16 * ONE_PLY
&& moveCount >= FutilityMoveCounts[improving][depth];
// Step 12. Extend checks
if (givesCheck && pos.see_sign(move) >= VALUE_ZERO)
if ( givesCheck
&& ( moveCount == 1
|| (!moveCountPruning && pos.see_sign(move) >= VALUE_ZERO)))
extension = ONE_PLY;
// Singular extension search. If all moves but one fail low on a search of
@ -956,8 +961,7 @@ moves_loop: // When in check search starts from here
&& bestValue > VALUE_MATED_IN_MAX_PLY)
{
// Move count based pruning
if ( depth < 16 * ONE_PLY
&& moveCount >= FutilityMoveCounts[improving][depth])
if (moveCountPruning)
continue;
// Countermoves based pruning