1
0
Fork 0
mirror of https://github.com/sockspls/badfish synced 2025-07-13 12:39:16 +00:00

Remove Gain Stats

Additionally in futility pruning the margin is raised for compensation.

STC
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 48481 W: 9229 L: 9156 D: 30096

LTC
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 32058 W: 5134 L: 5031 D: 21893

Bench: 8098149

Resolves #350
This commit is contained in:
Stefan Geschwentner 2015-05-18 13:58:13 -07:00 committed by Gary Linscott
parent 411e704fdf
commit e14046517e
2 changed files with 9 additions and 28 deletions

View file

@ -30,14 +30,13 @@
/// The Stats struct stores moves statistics. According to the template parameter /// The Stats struct stores moves statistics. According to the template parameter
/// the class can store History, Gains and Countermoves. History records how often /// the class can store History and Countermoves. History records how often
/// different moves have been successful or unsuccessful during the current search /// different moves have been successful or unsuccessful during the current search
/// and is used for reduction and move ordering decisions. Gains records the move's /// and is used for reduction and move ordering decisions.
/// best evaluation gain from one ply to the next and is used for pruning decisions.
/// Countermoves store the move that refute a previous one. Entries are stored /// Countermoves store the move that refute a previous one. Entries are stored
/// using only the moving piece and destination square, hence two moves with /// using only the moving piece and destination square, hence two moves with
/// different origin but same destination and piece will be considered identical. /// different origin but same destination and piece will be considered identical.
template<bool Gain, typename T> template<typename T>
struct Stats { struct Stats {
static const Value Max = Value(250); static const Value Max = Value(250);
@ -54,10 +53,7 @@ struct Stats {
void update(Piece pc, Square to, Value v) { void update(Piece pc, Square to, Value v) {
if (Gain) if (abs(table[pc][to] + v) < Max)
table[pc][to] = std::max(v, table[pc][to] - 1);
else if (abs(table[pc][to] + v) < Max)
table[pc][to] += v; table[pc][to] += v;
} }
@ -65,10 +61,9 @@ private:
T table[PIECE_NB][SQUARE_NB]; T table[PIECE_NB][SQUARE_NB];
}; };
typedef Stats< true, Value> GainsStats; typedef Stats<Value> HistoryStats;
typedef Stats<false, Value> HistoryStats; typedef Stats<Move> MovesStats;
typedef Stats<false, Move> MovesStats; typedef Stats<HistoryStats> CounterMovesHistoryStats;
typedef Stats<false, HistoryStats> CounterMovesHistoryStats;
/// MovePicker class is used to pick one pseudo legal move at a time from the /// MovePicker class is used to pick one pseudo legal move at a time from the

View file

@ -134,7 +134,6 @@ namespace {
Value DrawValue[COLOR_NB]; Value DrawValue[COLOR_NB];
HistoryStats History; HistoryStats History;
CounterMovesHistoryStats CounterMovesHistory; CounterMovesHistoryStats CounterMovesHistory;
GainsStats Gains;
MovesStats Countermoves; MovesStats Countermoves;
template <NodeType NT, bool SpNode> template <NodeType NT, bool SpNode>
@ -188,7 +187,6 @@ void Search::reset () {
TT.clear(); TT.clear();
History.clear(); History.clear();
CounterMovesHistory.clear(); CounterMovesHistory.clear();
Gains.clear();
Countermoves.clear(); Countermoves.clear();
} }
@ -643,7 +641,7 @@ namespace {
} }
} }
// Step 5. Evaluate the position statically and update parent's gain statistics // Step 5. Evaluate the position statically
if (inCheck) if (inCheck)
{ {
ss->staticEval = eval = VALUE_NONE; ss->staticEval = eval = VALUE_NONE;
@ -672,17 +670,6 @@ namespace {
if (ss->skipEarlyPruning) if (ss->skipEarlyPruning)
goto moves_loop; goto moves_loop;
if ( !pos.captured_piece_type()
&& ss->staticEval != VALUE_NONE
&& (ss-1)->staticEval != VALUE_NONE
&& (move = (ss-1)->currentMove) != MOVE_NULL
&& move != MOVE_NONE
&& type_of(move) == NORMAL)
{
Square to = to_sq(move);
Gains.update(pos.piece_on(to), to, -(ss-1)->staticEval - ss->staticEval);
}
// Step 6. Razoring (skipped when in check) // Step 6. Razoring (skipped when in check)
if ( !PvNode if ( !PvNode
&& depth < 4 * ONE_PLY && depth < 4 * ONE_PLY
@ -915,8 +902,7 @@ moves_loop: // When in check and at SpNode search starts from here
// Futility pruning: parent node // Futility pruning: parent node
if (predictedDepth < 7 * ONE_PLY) if (predictedDepth < 7 * ONE_PLY)
{ {
futilityValue = ss->staticEval + futility_margin(predictedDepth) futilityValue = ss->staticEval + futility_margin(predictedDepth) + 256;
+ 128 + Gains[pos.moved_piece(move)][to_sq(move)];
if (futilityValue <= alpha) if (futilityValue <= alpha)
{ {