]> git.sesse.net Git - stockfish/commitdiff
Merge Joona's increased static null pruning
authorMarco Costalba <mcostalba@gmail.com>
Thu, 25 Apr 2013 09:39:06 +0000 (11:39 +0200)
committerMarco Costalba <mcostalba@gmail.com>
Thu, 25 Apr 2013 10:05:00 +0000 (12:05 +0200)
The idea is to fail high more easily in static
null test if in the parent node we are already
very deep in the move list, so the propability
to fail high there is very low.

[edit: I have slightly changed the functionality
moving

ss->futilityMoveCount = moveCount;

At the end of the pruning code, this should not affect
ELO in anyway, but makes code more natural and logic]

Test with SPRT is good at 15+0.05
LLR: 2.96 (-2.94,2.94)
Total: 50653 W: 10024 L: 9780 D: 30849

And at 60+0.05
LLR: 2.97 (-2.94,2.94)
Total: 40799 W: 7227 L: 6921 D: 26651

bench: 4530093

1  2 
src/search.cpp
src/search.h

diff --cc src/search.cpp
index 1fe895d3cf576e66e622a3767decd3eceac138a5,267f5f8f4c64c87fbacc15f9184a16242dbcd394..0e68178147c7b2cbba34845c89e57218e6ea9b86
@@@ -643,10 -643,10 +643,10 @@@ namespace 
          && !ss->skipNullMove
          &&  depth < 4 * ONE_PLY
          && !inCheck
-         &&  eval - FutilityMargins[depth][0] >= beta
 -        &&  eval - futility_margin(depth, (ss-1)->futMc) >= beta
++        &&  eval - futility_margin(depth, (ss-1)->futilityMoveCount) >= beta
          &&  abs(beta) < VALUE_MATE_IN_MAX_PLY
          &&  pos.non_pawn_material(pos.side_to_move()))
-         return eval - FutilityMargins[depth][0];
 -        return eval - futility_margin(depth, (ss-1)->futMc);
++        return eval - futility_margin(depth, (ss-1)->futilityMoveCount);
  
      // Step 8. Null move search with verification search (is omitted in PV nodes)
      if (   !PvNode
@@@ -806,6 -806,6 +806,7 @@@ split_point_start: // At split points a
                          << " currmovenumber " << moveCount + PVIdx << sync_endl;
        }
  
++      ss->futilityMoveCount = 0;
        ext = DEPTH_ZERO;
        captureOrPromotion = pos.is_capture_or_promotion(move);
        givesCheck = pos.move_gives_check(move, ci);
  
                continue;
            }
++
++          // We have not pruned the move that will be searched, but remember how
++          // far in the move list we are to be more aggressive in the child node.
++          ss->futilityMoveCount = moveCount;
        }
  
        // Check for legality only before to do the move
diff --cc src/search.h
index bd21023747f53d2e480003933566c86fbd844bf8,2300c76271cc7c85a0d9d7e8bda732b9ba353e20..b4fb26ae72b9bee3b1bd80f1bfd225e12e654518
@@@ -47,6 -47,7 +47,7 @@@ struct Stack 
    Value staticEval;
    Value evalMargin;
    int skipNullMove;
 -  int futMc;
++  int futilityMoveCount;
  };