Skip to content

Commit

Permalink
Use stat_malus when decreasing stats
Browse files Browse the repository at this point in the history
This patch applies stat_bonus when increasing and stat_malus when decreasing stats.
  • Loading branch information
TarasVuk authored and PikaCat-OuO committed Nov 6, 2023
1 parent 8204b67 commit 88dc515
Showing 1 changed file with 15 additions and 8 deletions.
23 changes: 15 additions & 8 deletions src/search.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,9 @@ constexpr int futility_move_count(bool improving, Depth depth) {
// History and stats update bonus, based on depth
int stat_bonus(Depth d) { return std::min(392 * d - 467, 1858); }

// History and stats update malus, based on depth
int stat_malus(Depth d) { return std::min(392 * d - 467, 1858); }

// Add a small random component to draw evaluations to avoid 3-fold blindness
Value value_draw(const Thread* thisThread) {
return VALUE_DRAW - 1 + Value(thisThread->nodes & 0x2);
Expand Down Expand Up @@ -566,12 +569,12 @@ Value search(Position& pos, Stack* ss, Value alpha, Value beta, Depth depth, boo
// the previous ply (~0 Elo on STC, ~2 Elo on LTC).
if (prevSq != SQ_NONE && (ss - 1)->moveCount <= 2 && !priorCapture)
update_continuation_histories(ss - 1, pos.piece_on(prevSq), prevSq,
-stat_bonus(depth + 1));
-stat_malus(depth + 1));
}
// Penalty for a quiet ttMove that fails low (~1 Elo)
else if (!ttCapture)
{
int penalty = -stat_bonus(depth);
int penalty = -stat_malus(depth);
thisThread->mainHistory[us][from_to(ttMove)] << penalty;
update_continuation_histories(ss, pos.moved_piece(ttMove), to_sq(ttMove), penalty);
}
Expand Down Expand Up @@ -1060,7 +1063,7 @@ Value search(Position& pos, Stack* ss, Value alpha, Value beta, Depth depth, boo
if (newDepth > d)
value = -search<NonPV>(pos, ss + 1, -(alpha + 1), -alpha, newDepth, !cutNode);

int bonus = value <= alpha ? -stat_bonus(newDepth)
int bonus = value <= alpha ? -stat_malus(newDepth)
: value >= beta ? stat_bonus(newDepth)
: 0;

Expand Down Expand Up @@ -1534,6 +1537,7 @@ void update_all_stats(const Position& pos,
PieceType captured;

int quietMoveBonus = stat_bonus(depth + 1);
int quietMoveMalus = stat_malus(depth + 1);

if (!pos.capture(bestMove))
{
Expand All @@ -1545,15 +1549,18 @@ void update_all_stats(const Position& pos,
thisThread->pawnHistory[pawn_structure(pos)][moved_piece][to_sq(bestMove)]
<< quietMoveBonus;

int moveMalus = bestValue > beta + 97 ? quietMoveMalus // larger malus
: stat_malus(depth); // smaller malus

// Decrease stats for all non-best quiet moves
for (int i = 0; i < quietCount; ++i)
{
thisThread->pawnHistory[pawn_structure(pos)][pos.moved_piece(quietsSearched[i])]
[to_sq(quietsSearched[i])]
<< -bestMoveBonus;
thisThread->mainHistory[us][from_to(quietsSearched[i])] << -bestMoveBonus;
<< -moveMalus;
thisThread->mainHistory[us][from_to(quietsSearched[i])] << -moveMalus;
update_continuation_histories(ss, pos.moved_piece(quietsSearched[i]),
to_sq(quietsSearched[i]), -bestMoveBonus);
to_sq(quietsSearched[i]), -moveMalus);
}
}
else
Expand All @@ -1569,14 +1576,14 @@ void update_all_stats(const Position& pos,
&& ((ss - 1)->moveCount == 1 + (ss - 1)->ttHit
|| ((ss - 1)->currentMove == (ss - 1)->killers[0]))
&& !pos.captured_piece())
update_continuation_histories(ss - 1, pos.piece_on(prevSq), prevSq, -quietMoveBonus);
update_continuation_histories(ss - 1, pos.piece_on(prevSq), prevSq, -quietMoveMalus);

// Decrease stats for all non-best capture moves
for (int i = 0; i < captureCount; ++i)
{
moved_piece = pos.moved_piece(capturesSearched[i]);
captured = type_of(pos.piece_on(to_sq(capturesSearched[i])));
captureHistory[moved_piece][to_sq(capturesSearched[i])][captured] << -quietMoveBonus;
captureHistory[moved_piece][to_sq(capturesSearched[i])][captured] << -quietMoveMalus;
}
}

Expand Down

0 comments on commit 88dc515

Please sign in to comment.