assert(square_is_ok(to));
history[p][to] += int(d) * int(d);
-
- // Prevent history overflow
- if (history[p][to] >= HistoryMax)
- for (int i = 0; i < 16; i++)
- for (int j = 0; j < 64; j++)
- history[i][j] /= 2;
}
assert(square_is_ok(to));
history[p][to] -= int(d) * int(d);
-
- // Prevent history underflow
- if (history[p][to] <= -HistoryMax)
- for (int i = 0; i < 16; i++)
- for (int j = 0; j < 64; j++)
- history[i][j] /= 2;
}
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-
#if !defined(HISTORY_H_INCLUDED)
#define HISTORY_H_INCLUDED
-////
-//// Includes
-////
-
#include "depth.h"
#include "move.h"
#include "piece.h"
#include "value.h"
-////
-//// Types
-////
-
/// The History class stores statistics about how often different moves
/// have been successful or unsuccessful during the current search. These
/// statistics are used for reduction and move ordering decisions. History
int maxStaticValueDelta[16][64]; // [piece][from_square][to_square]
};
-
-////
-//// Constants and variables
-////
-
-/// HistoryMax controls how often the history counters will be scaled down:
-/// When the history score for a move gets bigger than HistoryMax, all
-/// entries in the table are divided by 2. It is difficult to guess what
-/// the ideal value of this constant is. Scaling down the scores often has
-/// the effect that parts of the search tree which have been searched
-/// recently have a bigger importance for move ordering than the moves which
-/// have been searched a long time ago.
-/// Current policy is to set this as high as possible, but avoid overflow.
-
-const int HistoryMax = (1 << 28);
-
-
-////
-//// Inline functions
-////
-
inline int History::value(Piece p, Square to) const {
return history[p][to];
}
{
m = cur->move;
if ((seeScore = pos.see_sign(m)) < 0)
- cur->score = seeScore - HistoryMax; // Be sure are at the bottom
+ cur->score = seeScore - (1 << 29); // Be sure are at the bottom
else if (pos.move_is_capture(m))
cur->score = pos.midgame_value_of_piece_on(move_to(m))
- - pos.type_of_piece_on(move_from(m)) + HistoryMax;
+ - pos.type_of_piece_on(move_from(m)) + (1 << 29);
else
cur->score = H.value(pos.piece_on(move_from(m)), move_to(m));
}