X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;ds=inline;f=src%2Fevaluate.cpp;h=566eba6d93433659afa89898dac49de293c50cbb;hb=298cf150958212e3270182644fd87f5489823b27;hp=99c0cd6e1acd512ccc8eaa04cb8609a44f9a4cc0;hpb=7133598a98301cf84857d39194026b876da48b96;p=stockfish
diff --git a/src/evaluate.cpp b/src/evaluate.cpp
index 99c0cd6e..566eba6d 100644
--- a/src/evaluate.cpp
+++ b/src/evaluate.cpp
@@ -18,7 +18,6 @@
along with this program. If not, see .
*/
-#include
#include
#include // For std::memset
#include
@@ -229,6 +228,8 @@ namespace {
const Square ksq = pos.square(Us);
+ Bitboard dblAttackByPawn = pawn_double_attacks_bb(pos.pieces(Us, PAWN));
+
// Find our pawns that are blocked or on the first two ranks
Bitboard b = pos.pieces(Us, PAWN) & (shift(pos.pieces()) | LowRanks);
@@ -240,7 +241,8 @@ namespace {
attackedBy[Us][KING] = pos.attacks_from(ksq);
attackedBy[Us][PAWN] = pe->pawn_attacks(Us);
attackedBy[Us][ALL_PIECES] = attackedBy[Us][KING] | attackedBy[Us][PAWN];
- attackedBy2[Us] = attackedBy[Us][KING] & attackedBy[Us][PAWN];
+ attackedBy2[Us] = (attackedBy[Us][KING] & attackedBy[Us][PAWN])
+ | dblAttackByPawn;
// Init our king safety tables
kingRing[Us] = attackedBy[Us][KING];
@@ -257,7 +259,7 @@ namespace {
kingAttacksCount[Them] = kingAttackersWeight[Them] = 0;
// Remove from kingRing[] the squares defended by two pawns
- kingRing[Us] &= ~pawn_double_attacks_bb(pos.pieces(Us, PAWN));
+ kingRing[Us] &= ~dblAttackByPawn;
}
@@ -326,7 +328,7 @@ namespace {
// bishop, bigger when the center files are blocked with pawns.
Bitboard blocked = pos.pieces(Us, PAWN) & shift(pos.pieces());
- score -= BishopPawns * pe->pawns_on_same_color_squares(Us, s)
+ score -= BishopPawns * pos.pawns_on_same_color_squares(Us, s)
* (1 + popcount(blocked & CenterFiles));
// Bonus for bishop on a long diagonal which can "see" both center squares
@@ -356,8 +358,8 @@ namespace {
score += RookOnPawn * popcount(pos.pieces(Them, PAWN) & PseudoAttacks[ROOK][s]);
// Bonus for rook on an open or semi-open file
- if (pe->semiopen_file(Us, file_of(s)))
- score += RookOnFile[bool(pe->semiopen_file(Them, file_of(s)))];
+ if (pos.semiopen_file(Us, file_of(s)))
+ score += RookOnFile[bool(pos.semiopen_file(Them, file_of(s)))];
// Penalty when trapped by the king, even more if the king cannot castle
else if (mob <= 3)
@@ -470,10 +472,10 @@ namespace {
- 6 * mg_value(score) / 8
+ mg_value(mobility[Them] - mobility[Us])
+ 5 * kingFlankAttacks * kingFlankAttacks / 16
- - 25;
+ - 15;
// Transform the kingDanger units into a Score, and subtract it from the evaluation
- if (kingDanger > 0)
+ if (kingDanger > 100)
score -= make_score(kingDanger * kingDanger / 4096, kingDanger / 16);
// Penalty when our king is on a pawnless flank
@@ -718,7 +720,7 @@ namespace {
int bonus = popcount(safe) + popcount(behind & safe);
int weight = pos.count(Us)
- - 2 * popcount(pe->semiopenFiles[WHITE] & pe->semiopenFiles[BLACK]);
+ - (16 - pos.count()) / 4;
Score score = make_score(bonus * weight * weight / 16, 0);