mirror of
https://github.com/sockspls/badfish
synced 2025-05-01 17:19:36 +00:00
Use simple array for Pawns Connected bonus #2061
Simplification which removes the pawns connected array. Instead of storing the values in an array, the values are calculated real-time. This is about 1.6% faster on my machines. Performance: master ave nps: 159,248,672 patch ave nps: 161,905,592 STC LLR: 2.95 (-2.94,2.94) [-3.00,1.00] Total: 20363 W: 4579 L: 4455 D: 11329 http://tests.stockfishchess.org/tests/view/5c9925ba0ebc5925cfff79a6 Non functional change.
This commit is contained in:
parent
76f1807baa
commit
95ba7f78d5
3 changed files with 8 additions and 27 deletions
|
@ -42,7 +42,6 @@ int main(int argc, char* argv[]) {
|
||||||
Position::init();
|
Position::init();
|
||||||
Bitbases::init();
|
Bitbases::init();
|
||||||
Search::init();
|
Search::init();
|
||||||
Pawns::init();
|
|
||||||
Threads.set(Options["Threads"]);
|
Threads.set(Options["Threads"]);
|
||||||
Search::clear(); // After threads are up
|
Search::clear(); // After threads are up
|
||||||
|
|
||||||
|
|
|
@ -35,8 +35,8 @@ namespace {
|
||||||
constexpr Score Doubled = S(11, 56);
|
constexpr Score Doubled = S(11, 56);
|
||||||
constexpr Score Isolated = S( 5, 15);
|
constexpr Score Isolated = S( 5, 15);
|
||||||
|
|
||||||
// Connected pawn bonus by opposed, phalanx, #support and rank
|
// Connected pawn bonus
|
||||||
Score Connected[2][2][3][RANK_NB];
|
constexpr int Connected[RANK_NB] = { 0, 13, 24, 18, 65, 100, 175, 330 };
|
||||||
|
|
||||||
// Strength of pawn shelter for our king by [distance from edge][rank].
|
// Strength of pawn shelter for our king by [distance from edge][rank].
|
||||||
// RANK_1 = 0 is used for files where we have no pawn, or pawn is behind our king.
|
// RANK_1 = 0 is used for files where we have no pawn, or pawn is behind our king.
|
||||||
|
@ -128,8 +128,12 @@ namespace {
|
||||||
|
|
||||||
// Score this pawn
|
// Score this pawn
|
||||||
if (support | phalanx)
|
if (support | phalanx)
|
||||||
score += Connected[opposed][bool(phalanx)][popcount(support)][relative_rank(Us, s)];
|
{
|
||||||
|
int r = relative_rank(Us, s);
|
||||||
|
int v = phalanx ? Connected[r] + Connected[r + 1] : 2 * Connected[r];
|
||||||
|
v = 17 * popcount(support) + (v >> (opposed + 1));
|
||||||
|
score += make_score(v, v * (r - 2) / 4);
|
||||||
|
}
|
||||||
else if (!neighbours)
|
else if (!neighbours)
|
||||||
score -= Isolated, e->weakUnopposed[Us] += !opposed;
|
score -= Isolated, e->weakUnopposed[Us] += !opposed;
|
||||||
|
|
||||||
|
@ -147,27 +151,6 @@ namespace {
|
||||||
|
|
||||||
namespace Pawns {
|
namespace Pawns {
|
||||||
|
|
||||||
/// Pawns::init() initializes some tables needed by evaluation. Instead of using
|
|
||||||
/// hard-coded tables, when makes sense, we prefer to calculate them with a formula
|
|
||||||
/// to reduce independent parameters and to allow easier tuning and better insight.
|
|
||||||
|
|
||||||
void init() {
|
|
||||||
|
|
||||||
static constexpr int Seed[RANK_NB] = { 0, 13, 24, 18, 65, 100, 175, 330 };
|
|
||||||
|
|
||||||
for (int opposed = 0; opposed <= 1; ++opposed)
|
|
||||||
for (int phalanx = 0; phalanx <= 1; ++phalanx)
|
|
||||||
for (int support = 0; support <= 2; ++support)
|
|
||||||
for (Rank r = RANK_2; r < RANK_8; ++r)
|
|
||||||
{
|
|
||||||
int v = 17 * support;
|
|
||||||
v += (Seed[r] + (phalanx ? (Seed[r + 1] - Seed[r]) / 2 : 0)) >> opposed;
|
|
||||||
|
|
||||||
Connected[opposed][phalanx][support][r] = make_score(v, v * (r - 2) / 4);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/// Pawns::probe() looks up the current position's pawns configuration in
|
/// Pawns::probe() looks up the current position's pawns configuration in
|
||||||
/// the pawns hash table. It returns a pointer to the Entry if the position
|
/// the pawns hash table. It returns a pointer to the Entry if the position
|
||||||
/// is found. Otherwise a new Entry is computed and stored there, so we don't
|
/// is found. Otherwise a new Entry is computed and stored there, so we don't
|
||||||
|
|
|
@ -76,7 +76,6 @@ struct Entry {
|
||||||
|
|
||||||
typedef HashTable<Entry, 16384> Table;
|
typedef HashTable<Entry, 16384> Table;
|
||||||
|
|
||||||
void init();
|
|
||||||
Entry* probe(const Position& pos);
|
Entry* probe(const Position& pos);
|
||||||
|
|
||||||
} // namespace Pawns
|
} // namespace Pawns
|
||||||
|
|
Loading…
Add table
Reference in a new issue