// in KingDanger[]. Various little "meta-bonuses" measuring the strength
// of the enemy attack are added up into an integer, which is used as an
// index to KingDanger[].
- Score KingDanger[512];
+ Score KingDanger[400];
// KingAttackWeights[PieceType] contains king attack weights by piece type
const int KingAttackWeights[PIECE_TYPE_NB] = { 0, 0, 7, 5, 4, 1 };
// ...count safe + (behind & safe) with a single popcount
int bonus = popcount((Us == WHITE ? safe << 32 : safe >> 32) | (behind & safe));
bonus = std::min(16, bonus);
- int weight = pos.count<ALL_PIECES>(Us);
+ int weight = pos.count<ALL_PIECES>(Us) - 2 * ei.pi->open_files();
- return make_score(bonus * weight * weight / 22, 0);
+ return make_score(bonus * weight * weight / 18, 0);
}
assert(!pos.checkers());
+ Score mobility[COLOR_NB] = { SCORE_ZERO, SCORE_ZERO };
EvalInfo ei;
- Score score, mobility[COLOR_NB] = { SCORE_ZERO, SCORE_ZERO };
-
- // Initialize score by reading the incrementally updated scores included in
- // the position object (material + piece square tables). Score is computed
- // internally from the white point of view.
- score = pos.psq_score();
// Probe the material hash table
ei.me = Material::probe(pos);
- score += ei.me->imbalance();
// If we have a specialized evaluation function for the current material
// configuration, call it and return.
if (ei.me->specialized_eval_exists())
return ei.me->evaluate(pos);
+ // Initialize score by reading the incrementally updated scores included in
+ // the position object (material + piece square tables) and the material
+ // imbalance. Score is computed internally from the white point of view.
+ Score score = pos.psq_score() + ei.me->imbalance();
+
// Probe the pawn hash table
ei.pi = Pawns::probe(pos);
score += ei.pi->pawns_score();