if (tte && (tte->type() & VALUE_TYPE_EVAL))
futilityValue = value_from_tt(tte->value(), ply) + FutilityMargins[int(depth) - 2];
+ // Move count pruning limit
+ const int MCLimit = 3 + (1 << (3*int(depth)/8));
+
// Loop through all legal moves until no moves remain or a beta cutoff
// occurs.
while ( bestValue < beta
&& !captureOrPromotion
&& move != ttMove)
{
+ //std::cout << std::endl;
+ //for (int d = 2; d < 14; d++)
+ // std::cout << d << ", " << 64*(1+bitScanReverse32(d*d)) << std::endl;
+
+ //std::cout << std::endl;
+/*
+ 64*(1+bitScanReverse32(d*d))
+
+ 2 -> 256 - 256
+ 3 -> 288 - 320
+ 4 -> 512 - 384
+ 5 -> 544 - 384
+ 6 -> 592 - 448
+ 7 -> 624 - 448
+ 8 -> 672 - 512
+ 9 -> 704 - 512
+ 10 -> 832 - 512
+ 11 -> 864 - 512
+ 12 -> 928 - 576
+ 13 -> 960 - 576
+
+ 300 + 2*(1 << (3*d/4))
+
+ 2 -> 256 - 304
+ 3 -> 288 - 308
+ 4 -> 512 - 316
+ 5 -> 544 - 316
+ 6 -> 592 - 332
+ 7 -> 624 - 364
+ 8 -> 672 - 428
+ 9 -> 704 - 428
+ 10 -> 832 - 556
+ 11 -> 864 - 812
+ 12 -> 928 - 1324
+ 13 -> 960 - 1324
+
+
+ 3 + (1 << (3*int(depth)/8))
+
+ 1 * onePly - > moveCount >= 4
+ 2 * onePly - > moveCount >= 5
+ 3 * onePly - > moveCount >= 7
+ 4 * onePly - > moveCount >= 11
+ 5 * onePly - > moveCount >= 11
+ 6 * onePly - > moveCount >= 19
+ 7 * onePly - > moveCount >= 35
+*/
// History pruning. See ok_to_prune() definition
- if ( moveCount >= 2 + int(depth)
+ if ( moveCount >= MCLimit
&& ok_to_prune(pos, move, ss[ply].threatMove, depth)
&& bestValue > value_mated_in(PLY_MAX))
continue;
{
if (futilityValue == VALUE_NONE)
futilityValue = evaluate(pos, ei, threadID)
- + FutilityMargins[int(depth) - 2]
- + 4*IncrementalFutilityMargin;
+ + 64*(1+bitScanReverse32(int(depth) * int(depth)));
futilityValueScaled = futilityValue - moveCount * IncrementalFutilityMargin;