Use int instead of Value for history related stats.

history related scores are not related to evaluation based scores.
For example, can easily exceed the range -VALUE_INFINITE,VALUE_INFINITE.
As such the current type is confusing, and a plain int is a better match.

tested for no regression:

STC:
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 43693 W: 7909 L: 7827 D: 27957

No functional change.

Closes #1070
This commit is contained in:
Joost VandeVondele
2017-04-23 07:57:48 -07:00
committed by Joona Kiiski
parent ced29248c9
commit 9da3b44ddc
5 changed files with 23 additions and 23 deletions

View File

@@ -76,16 +76,16 @@ namespace {
int Reductions[2][2][64][64]; // [pv][improving][depth][moveNumber]
// Threshold used for countermoves based pruning.
const int CounterMovePruneThreshold = VALUE_ZERO;
const int CounterMovePruneThreshold = 0;
template <bool PvNode> Depth reduction(bool i, Depth d, int mn) {
return Reductions[PvNode][i][std::min(d / ONE_PLY, 63)][std::min(mn, 63)] * ONE_PLY;
}
// History and stats update bonus, based on depth
Value stat_bonus(Depth depth) {
int stat_bonus(Depth depth) {
int d = depth / ONE_PLY ;
return d > 17 ? VALUE_ZERO : Value(d * d + 2 * d - 2);
return d > 17 ? 0 : d * d + 2 * d - 2;
}
// Skill structure is used to implement strength limit
@@ -151,8 +151,8 @@ namespace {
Value value_to_tt(Value v, int ply);
Value value_from_tt(Value v, int ply);
void update_pv(Move* pv, Move move, Move* childPv);
void update_cm_stats(Stack* ss, Piece pc, Square s, Value bonus);
void update_stats(const Position& pos, Stack* ss, Move move, Move* quiets, int quietsCnt, Value bonus);
void update_cm_stats(Stack* ss, Piece pc, Square s, int bonus);
void update_stats(const Position& pos, Stack* ss, Move move, Move* quiets, int quietsCnt, int bonus);
void check_time();
} // namespace
@@ -195,7 +195,7 @@ void Search::clear() {
th->counterMoves.clear();
th->history.clear();
th->counterMoveHistory.clear();
th->counterMoveHistory[NO_PIECE][0].fill(Value(CounterMovePruneThreshold-1));
th->counterMoveHistory[NO_PIECE][0].fill(CounterMovePruneThreshold-1);
th->resetCalls = true;
}
@@ -554,7 +554,7 @@ namespace {
Thread* thisThread = pos.this_thread();
inCheck = pos.checkers();
moveCount = quietCount = ss->moveCount = 0;
ss->history = VALUE_ZERO;
ss->history = 0;
bestValue = -VALUE_INFINITE;
ss->ply = (ss-1)->ply + 1;
@@ -639,7 +639,7 @@ namespace {
// Penalty for a quiet ttMove that fails low
else if (!pos.capture_or_promotion(ttMove))
{
Value penalty = -stat_bonus(depth);
int penalty = -stat_bonus(depth);
thisThread->history.update(pos.side_to_move(), ttMove, penalty);
update_cm_stats(ss, pos.moved_piece(ttMove), to_sq(ttMove), penalty);
}
@@ -985,10 +985,10 @@ moves_loop: // When in check search starts from here
- 4000; // Correction factor
// Decrease/increase reduction by comparing opponent's stat score
if (ss->history > VALUE_ZERO && (ss-1)->history < VALUE_ZERO)
if (ss->history > 0 && (ss-1)->history < 0)
r -= ONE_PLY;
else if (ss->history < VALUE_ZERO && (ss-1)->history > VALUE_ZERO)
else if (ss->history < 0 && (ss-1)->history > 0)
r += ONE_PLY;
// Decrease/increase reduction for moves with a good/bad history
@@ -1382,7 +1382,7 @@ moves_loop: // When in check search starts from here
// update_cm_stats() updates countermove and follow-up move history
void update_cm_stats(Stack* ss, Piece pc, Square s, Value bonus) {
void update_cm_stats(Stack* ss, Piece pc, Square s, int bonus) {
for (int i : {1, 2, 4})
if (is_ok((ss-i)->currentMove))
@@ -1393,7 +1393,7 @@ moves_loop: // When in check search starts from here
// update_stats() updates move sorting heuristics when a new quiet best move is found
void update_stats(const Position& pos, Stack* ss, Move move,
Move* quiets, int quietsCnt, Value bonus) {
Move* quiets, int quietsCnt, int bonus) {
if (ss->killers[0] != move)
{