1
0
Fork 0

More aggressive post-futility pruning

sf_3_base
Joona Kiiski 2013-04-21 14:53:27 +01:00
parent f84f04742a
commit 8df17204f4
2 changed files with 7 additions and 2 deletions

View File

@ -643,10 +643,10 @@ namespace {
&& !ss->skipNullMove
&& depth < 4 * ONE_PLY
&& !inCheck
&& eval - FutilityMargins[depth][0] >= beta
&& eval - FutilityMargins[depth][(ss-1)->futMc] >= beta
&& abs(beta) < VALUE_MATE_IN_MAX_PLY
&& pos.non_pawn_material(pos.side_to_move()))
return eval - FutilityMargins[depth][0];
return eval - FutilityMargins[depth][(ss-1)->futMc];
// Step 8. Null move search with verification search (is omitted in PV nodes)
if ( !PvNode
@ -852,6 +852,8 @@ split_point_start: // At split points actual search starts from here
// Update current move (this must be done after singular extension search)
newDepth = depth - ONE_PLY + ext;
ss->futMc = 0;
// Step 13. Futility pruning (is omitted in PV nodes)
if ( !PvNode
&& !captureOrPromotion
@ -874,6 +876,8 @@ split_point_start: // At split points actual search starts from here
// Value based pruning
// We illogically ignore reduction condition depth >= 3*ONE_PLY for predicted depth,
// but fixing this made program slightly weaker.
ss->futMc = moveCount;
Depth predictedDepth = newDepth - reduction<PvNode>(depth, moveCount);
futilityValue = ss->staticEval + ss->evalMargin + futility_margin(predictedDepth, moveCount)
+ Gain[pos.piece_moved(move)][to_sq(move)];

View File

@ -47,6 +47,7 @@ struct Stack {
Value staticEval;
Value evalMargin;
int skipNullMove;
int futMc;
};