From 35ada63174bbec6289d6dea6d3cfc5b5f14d1d27 Mon Sep 17 00:00:00 2001 From: Marco Costalba Date: Mon, 1 Feb 2010 20:06:56 +0100 Subject: [PATCH] Save futilityMargin for both colors It will be needed by future patches. No functional change. Signed-off-by: Marco Costalba --- src/evaluate.cpp | 5 +---- src/evaluate.h | 6 +++--- src/search.cpp | 6 +++--- 3 files changed, 7 insertions(+), 10 deletions(-) diff --git a/src/evaluate.cpp b/src/evaluate.cpp index 07a1e210..d225de26 100644 --- a/src/evaluate.cpp +++ b/src/evaluate.cpp @@ -860,11 +860,8 @@ namespace { // capturing a single attacking piece can therefore result in a score // change far bigger than the value of the captured piece. Score v = apply_weight(make_score(SafetyTable[attackUnits], 0), WeightKingSafety[Us]); - ei.value -= Sign[Us] * v; - - if (Us == pos.side_to_move()) - ei.futilityMargin += mg_value(v); + ei.futilityMargin[Us] += mg_value(v); } } diff --git a/src/evaluate.h b/src/evaluate.h index f33774ac..067baa3c 100644 --- a/src/evaluate.h +++ b/src/evaluate.h @@ -47,7 +47,7 @@ class Position; struct EvalInfo { - EvalInfo() : futilityMargin(Value(0)) {} + EvalInfo() { futilityMargin[0] = futilityMargin[1] = Value(0); } // Middle game and endgame evaluations Score value; @@ -96,8 +96,8 @@ struct EvalInfo { Score mobility; // Extra futility margin. This is added to the standard futility margin - // in the quiescence search. - Value futilityMargin; + // in the quiescence search. One for each color. + Value futilityMargin[2]; }; diff --git a/src/search.cpp b/src/search.cpp index 84b1d78a..4ea31a0b 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -1821,7 +1821,7 @@ namespace { if (bestValue >= beta) { // Store the score to avoid a future costly evaluation() call - if (!isCheck && !tte && ei.futilityMargin == 0) + if (!isCheck && !tte && ei.futilityMargin[pos.side_to_move()] == 0) TT.store(pos.get_key(), value_to_tt(bestValue, ply), VALUE_TYPE_EV_LO, Depth(-127*OnePly), MOVE_NONE); return bestValue; @@ -1840,7 +1840,7 @@ namespace { MovePicker mp = MovePicker(pos, ttMove, deepChecks ? Depth(0) : depth, H); CheckInfo ci(pos); enoughMaterial = pos.non_pawn_material(pos.side_to_move()) > RookValueMidgame; - futilityBase = staticValue + FutilityMarginQS + ei.futilityMargin; + futilityBase = staticValue + FutilityMarginQS + ei.futilityMargin[pos.side_to_move()]; // Loop through the moves until no moves remain or a beta cutoff // occurs. @@ -1920,7 +1920,7 @@ namespace { { // If bestValue isn't changed it means it is still the static evaluation // of the node, so keep this info to avoid a future evaluation() call. - ValueType type = (bestValue == staticValue && !ei.futilityMargin ? VALUE_TYPE_EV_UP : VALUE_TYPE_UPPER); + ValueType type = (bestValue == staticValue && !ei.futilityMargin[pos.side_to_move()] ? VALUE_TYPE_EV_UP : VALUE_TYPE_UPPER); TT.store(pos.get_key(), value_to_tt(bestValue, ply), type, d, MOVE_NONE); } else if (bestValue >= beta) -- 2.39.2