// Pawn and material hash tables, indexed by the current thread id.
// Note that they will be initialized at 0 being global variables.
- MaterialInfoTable* MaterialTable[THREAD_MAX];
- PawnInfoTable* PawnTable[THREAD_MAX];
+ MaterialInfoTable* MaterialTable[MAX_THREADS];
+ PawnInfoTable* PawnTable[MAX_THREADS];
// Sizes of pawn and material hash tables
const int PawnTableSize = 16384;
Value do_evaluate(const Position& pos, EvalInfo& ei, int threadID) {
assert(pos.is_ok());
- assert(threadID >= 0 && threadID < THREAD_MAX);
+ assert(threadID >= 0 && threadID < MAX_THREADS);
assert(!pos.is_check());
memset(&ei, 0, sizeof(EvalInfo));
} // namespace
-/// quick_evaluate() does a very approximate evaluation of the current position.
-/// It currently considers only material and piece square table scores. Perhaps
-/// we should add scores from the pawn and material hash tables?
-
-Value quick_evaluate(const Position &pos) {
-
- assert(pos.is_ok());
-
- static const ScaleFactor sf[2] = {SCALE_FACTOR_NORMAL, SCALE_FACTOR_NORMAL};
-
- Value v = scale_by_game_phase(pos.value(), MaterialInfoTable::game_phase(pos), sf);
- return (pos.side_to_move() == WHITE ? v : -v);
-}
-
-
/// init_eval() initializes various tables used by the evaluation function
void init_eval(int threads) {
- assert(threads <= THREAD_MAX);
+ assert(threads <= MAX_THREADS);
- for (int i = 0; i < THREAD_MAX; i++)
+ for (int i = 0; i < MAX_THREADS; i++)
{
if (i >= threads)
{
void quit_eval() {
- for (int i = 0; i < THREAD_MAX; i++)
+ for (int i = 0; i < MAX_THREADS; i++)
{
delete PawnTable[i];
delete MaterialTable[i];
// capturing a single attacking piece can therefore result in a score
// change far bigger than the value of the captured piece.
Score v = apply_weight(make_score(SafetyTable[attackUnits], 0), WeightKingSafety[Us]);
-
ei.value -= Sign[Us] * v;
-
- if (Us == pos.side_to_move())
- ei.futilityMargin += mg_value(v);
+ ei.futilityMargin[Us] += mg_value(v);
}
}