1
0
Fork 0
mirror of https://github.com/sockspls/badfish synced 2025-07-12 03:59:15 +00:00

Implement futility move count array

No functional change

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
This commit is contained in:
Joona Kiiski 2010-02-07 10:42:40 +02:00 committed by Marco Costalba
parent 4bfa0c429e
commit 6e1cb6e45b

View file

@ -198,8 +198,10 @@ namespace {
// Futility lookup tables and their getter functions // Futility lookup tables and their getter functions
const Value FutilityMarginQS = Value(0x80); const Value FutilityMarginQS = Value(0x80);
int32_t FutilityMarginsMatrix[14][64]; // [depth][moveNumber] int32_t FutilityMarginsMatrix[14][64]; // [depth][moveNumber]
int FutilityMoveCountArray[32]; // [depth]
inline Value futility_margin(Depth d, int mn) { return (Value) (d < 14? FutilityMarginsMatrix[Max(d, 0)][Min(mn, 63)] : 2*VALUE_INFINITE); } inline Value futility_margin(Depth d, int mn) { return (Value) (d < 14? FutilityMarginsMatrix[Max(d, 0)][Min(mn, 63)] : 2*VALUE_INFINITE); }
inline int futility_move_count(Depth d) { return (d < 32? FutilityMoveCountArray[d] : 512); }
// Reduction lookup tables and their getter functions // Reduction lookup tables and their getter functions
// Initialized at startup // Initialized at startup
@ -554,6 +556,10 @@ void init_threads() {
FutilityMarginsMatrix[i][j] = (i < 2 ? 0 : 112 * bitScanReverse32(i * i / 2)) - 8 * j; // FIXME: test using log instead of BSR FutilityMarginsMatrix[i][j] = (i < 2 ? 0 : 112 * bitScanReverse32(i * i / 2)) - 8 * j; // FIXME: test using log instead of BSR
} }
// Init futility move count array
for (i = 0; i < 32; i++) // i == depth (OnePly = 2)
FutilityMoveCountArray[i] = 3 + (1 << (3 * i / 8));
for (i = 0; i < THREAD_MAX; i++) for (i = 0; i < THREAD_MAX; i++)
Threads[i].activeSplitPoints = 0; Threads[i].activeSplitPoints = 0;
@ -1367,9 +1373,6 @@ namespace {
isCheck = pos.is_check(); isCheck = pos.is_check();
// Calculate depth dependant futility pruning parameters
const int FutilityMoveCountMargin = 3 + (1 << (3 * int(depth) / 8));
// Evaluate the position statically // Evaluate the position statically
if (!isCheck) if (!isCheck)
{ {
@ -1526,7 +1529,7 @@ namespace {
&& move != ttMove) && move != ttMove)
{ {
// Move count based pruning // Move count based pruning
if ( moveCount >= FutilityMoveCountMargin if ( moveCount >= futility_move_count(depth)
&& ok_to_prune(pos, move, ss[ply].threatMove) && ok_to_prune(pos, move, ss[ply].threatMove)
&& bestValue > value_mated_in(PLY_MAX)) && bestValue > value_mated_in(PLY_MAX))
continue; continue;
@ -1841,8 +1844,6 @@ namespace {
bool useFutilityPruning = sp->depth < 7 * OnePly //FIXME: sync with search bool useFutilityPruning = sp->depth < 7 * OnePly //FIXME: sync with search
&& !isCheck; && !isCheck;
const int FutilityMoveCountMargin = 3 + (1 << (3 * int(sp->depth) / 8));
while ( lock_grab_bool(&(sp->lock)) while ( lock_grab_bool(&(sp->lock))
&& sp->bestValue < sp->beta && sp->bestValue < sp->beta
&& !thread_should_stop(threadID) && !thread_should_stop(threadID)
@ -1869,7 +1870,7 @@ namespace {
&& !captureOrPromotion) && !captureOrPromotion)
{ {
// Move count based pruning // Move count based pruning
if ( moveCount >= FutilityMoveCountMargin if ( moveCount >= futility_move_count(sp->depth)
&& ok_to_prune(pos, move, ss[sp->ply].threatMove) && ok_to_prune(pos, move, ss[sp->ply].threatMove)
&& sp->bestValue > value_mated_in(PLY_MAX)) && sp->bestValue > value_mated_in(PLY_MAX))
continue; continue;