/*
Stockfish, a UCI chess playing engine derived from Glaurung 2.1
Copyright (C) 2004-2008 Tord Romstad (Glaurung author)
- Copyright (C) 2008-2014 Marco Costalba, Joona Kiiski, Tord Romstad
+ Copyright (C) 2008-2015 Marco Costalba, Joona Kiiski, Tord Romstad
Stockfish is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
// KingDanger[attackUnits] contains the actual king danger weighted
// scores, indexed by a calculated integer number.
- Score KingDanger[128];
+ Score KingDanger[512];
// apply_weight() weighs score 's' by weight 'w' trying to prevent overflow
Score apply_weight(Score s, const Weight& w) {
// Finally, extract the king danger score from the KingDanger[]
// array and subtract the score from evaluation.
- score -= KingDanger[std::max(std::min(attackUnits / 4, 99), 0)];
+ score -= KingDanger[std::max(std::min(attackUnits, 399), 0)];
}
if (Trace)
b = weak & ~ei.attackedBy[Them][ALL_PIECES];
if (b)
- score += more_than_one(b) ? Hanging * popcount<Max15>(b) : Hanging;
+ score += Hanging * popcount<Max15>(b);
b = weak & ei.attackedBy[Us][KING];
if (b)
void init() {
- const double MaxSlope = 30;
+ const double MaxSlope = 7.5;
const double Peak = 1280;
+ double t = 0.0;
- for (int t = 0, i = 1; i < 100; ++i)
+ for (int i = 1; i < 400; ++i)
{
- t = int(std::min(Peak, std::min(0.4 * i * i, t + MaxSlope)));
- KingDanger[i] = apply_weight(make_score(t, 0), Weights[KingSafety]);
+ t = std::min(Peak, std::min(0.025 * i * i, t + MaxSlope));
+ KingDanger[i] = apply_weight(make_score(int(t), 0), Weights[KingSafety]);
}
}