mirror of
https://github.com/sockspls/badfish
synced 2025-04-30 16:53:09 +00:00
Use stat_malus when decreasing stats
This patch applies stat_bonus when increasing and stat_malus when decreasing stats. Passed STC: LLR: 2.93 (-2.94,2.94) <0.00,2.00> Total: 133792 W: 34221 L: 33758 D: 65813 Ptnml(0-2): 477, 15764, 33959, 16211, 485 https://tests.stockfishchess.org/tests/view/654699f3136acbc5735256b2 Passed LTC: LLR: 2.95 (-2.94,2.94) <0.50,2.50> Total: 67374 W: 16912 L: 16523 D: 33939 Ptnml(0-2): 42, 7528, 18171, 7891, 55 https://tests.stockfishchess.org/tests/view/65474558136acbc5735263ab closes https://github.com/official-stockfish/Stockfish/pull/4864 bench: 1114417
This commit is contained in:
parent
d4b46ea6db
commit
442c294a07
1 changed files with 16 additions and 9 deletions
|
@ -94,7 +94,10 @@ constexpr int futility_move_count(bool improving, Depth depth) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// History and stats update bonus, based on depth
|
// History and stats update bonus, based on depth
|
||||||
int stat_bonus(Depth d) { return std::min(357 * d - 483, 1511); }
|
int stat_bonus(Depth d) { return std::min(364 * d - 438, 1501); }
|
||||||
|
|
||||||
|
// History and stats update malus, based on depth
|
||||||
|
int stat_malus(Depth d) { return std::min(452 * d - 452, 1478); }
|
||||||
|
|
||||||
// Add a small random component to draw evaluations to avoid 3-fold blindness
|
// Add a small random component to draw evaluations to avoid 3-fold blindness
|
||||||
Value value_draw(const Thread* thisThread) {
|
Value value_draw(const Thread* thisThread) {
|
||||||
|
@ -636,12 +639,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).
|
// the previous ply (~0 Elo on STC, ~2 Elo on LTC).
|
||||||
if (prevSq != SQ_NONE && (ss - 1)->moveCount <= 2 && !priorCapture)
|
if (prevSq != SQ_NONE && (ss - 1)->moveCount <= 2 && !priorCapture)
|
||||||
update_continuation_histories(ss - 1, pos.piece_on(prevSq), prevSq,
|
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)
|
// Penalty for a quiet ttMove that fails low (~1 Elo)
|
||||||
else if (!ttCapture)
|
else if (!ttCapture)
|
||||||
{
|
{
|
||||||
int penalty = -stat_bonus(depth);
|
int penalty = -stat_malus(depth);
|
||||||
thisThread->mainHistory[us][from_to(ttMove)] << penalty;
|
thisThread->mainHistory[us][from_to(ttMove)] << penalty;
|
||||||
update_continuation_histories(ss, pos.moved_piece(ttMove), to_sq(ttMove), penalty);
|
update_continuation_histories(ss, pos.moved_piece(ttMove), to_sq(ttMove), penalty);
|
||||||
}
|
}
|
||||||
|
@ -1190,7 +1193,7 @@ moves_loop: // When in check, search starts here
|
||||||
if (newDepth > d)
|
if (newDepth > d)
|
||||||
value = -search<NonPV>(pos, ss + 1, -(alpha + 1), -alpha, newDepth, !cutNode);
|
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)
|
: value >= beta ? stat_bonus(newDepth)
|
||||||
: 0;
|
: 0;
|
||||||
|
|
||||||
|
@ -1681,6 +1684,7 @@ void update_all_stats(const Position& pos,
|
||||||
PieceType captured;
|
PieceType captured;
|
||||||
|
|
||||||
int quietMoveBonus = stat_bonus(depth + 1);
|
int quietMoveBonus = stat_bonus(depth + 1);
|
||||||
|
int quietMoveMalus = stat_malus(depth + 1);
|
||||||
|
|
||||||
if (!pos.capture_stage(bestMove))
|
if (!pos.capture_stage(bestMove))
|
||||||
{
|
{
|
||||||
|
@ -1692,15 +1696,18 @@ void update_all_stats(const Position& pos,
|
||||||
thisThread->pawnHistory[pawn_structure(pos)][moved_piece][to_sq(bestMove)]
|
thisThread->pawnHistory[pawn_structure(pos)][moved_piece][to_sq(bestMove)]
|
||||||
<< quietMoveBonus;
|
<< quietMoveBonus;
|
||||||
|
|
||||||
|
int moveMalus = bestValue > beta + 168 ? quietMoveMalus // larger malus
|
||||||
|
: stat_malus(depth); // smaller malus
|
||||||
|
|
||||||
// Decrease stats for all non-best quiet moves
|
// Decrease stats for all non-best quiet moves
|
||||||
for (int i = 0; i < quietCount; ++i)
|
for (int i = 0; i < quietCount; ++i)
|
||||||
{
|
{
|
||||||
thisThread->pawnHistory[pawn_structure(pos)][pos.moved_piece(quietsSearched[i])]
|
thisThread->pawnHistory[pawn_structure(pos)][pos.moved_piece(quietsSearched[i])]
|
||||||
[to_sq(quietsSearched[i])]
|
[to_sq(quietsSearched[i])]
|
||||||
<< -bestMoveBonus;
|
<< -moveMalus;
|
||||||
thisThread->mainHistory[us][from_to(quietsSearched[i])] << -bestMoveBonus;
|
thisThread->mainHistory[us][from_to(quietsSearched[i])] << -moveMalus;
|
||||||
update_continuation_histories(ss, pos.moved_piece(quietsSearched[i]),
|
update_continuation_histories(ss, pos.moved_piece(quietsSearched[i]),
|
||||||
to_sq(quietsSearched[i]), -bestMoveBonus);
|
to_sq(quietsSearched[i]), -moveMalus);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -1716,14 +1723,14 @@ void update_all_stats(const Position& pos,
|
||||||
&& ((ss - 1)->moveCount == 1 + (ss - 1)->ttHit
|
&& ((ss - 1)->moveCount == 1 + (ss - 1)->ttHit
|
||||||
|| ((ss - 1)->currentMove == (ss - 1)->killers[0]))
|
|| ((ss - 1)->currentMove == (ss - 1)->killers[0]))
|
||||||
&& !pos.captured_piece())
|
&& !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
|
// Decrease stats for all non-best capture moves
|
||||||
for (int i = 0; i < captureCount; ++i)
|
for (int i = 0; i < captureCount; ++i)
|
||||||
{
|
{
|
||||||
moved_piece = pos.moved_piece(capturesSearched[i]);
|
moved_piece = pos.moved_piece(capturesSearched[i]);
|
||||||
captured = type_of(pos.piece_on(to_sq(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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue