const Value FutilityMarginQS = Value(0x80);
// Each move futility margin is decreased
- const Value IncrementalFutilityMargin = Value(0xA);
+ const Value IncrementalFutilityMargin = Value(0x8);
// Remaining depth: 1 ply 1.5 ply 2 ply 2.5 ply 3 ply 3.5 ply
const Value FutilityMargins[12] = { Value(0x100), Value(0x120), Value(0x200), Value(0x220), Value(0x250), Value(0x270),
{
//std::cout << std::endl;
//for (int d = 2; d < 14; d++)
- // std::cout << d << ", " << 300 + 2*(1 << (3*d/4)) << std::endl;
+ // 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
{
if (futilityValue == VALUE_NONE)
futilityValue = evaluate(pos, ei, threadID)
- + (300 + 2 * (1 << (3 * int(depth) /4)))
- + 4*IncrementalFutilityMargin;
+ + 64*(2+bitScanReverse32(int(depth) * int(depth)));
futilityValueScaled = futilityValue - moveCount * IncrementalFutilityMargin;