X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fevaluate.cpp;h=d3ddfd510bad2e51a92ce991386bbcb135de2738;hp=b1a85a0fcb67cb1692db334b09d437fca3ee356f;hb=3d10cfcdd22b16d6bd2801eeecbe16f280eb6e27;hpb=1d09ee70f7da1f9aa60c7ff97a35881327f69a03 diff --git a/src/evaluate.cpp b/src/evaluate.cpp index b1a85a0f..d3ddfd51 100644 --- a/src/evaluate.cpp +++ b/src/evaluate.cpp @@ -481,6 +481,19 @@ namespace { // evaluate_threats() assigns bonuses according to the types of the attacking // and the attacked pieces. + const Bitboard WhiteCamp = Rank4BB | Rank5BB | Rank6BB | Rank7BB | Rank8BB; + const Bitboard BlackCamp = Rank5BB | Rank4BB | Rank3BB | Rank2BB | Rank1BB; + const Bitboard QueenSide = FileABB | FileBBB | FileCBB | FileDBB; + const Bitboard CenterFiles = FileCBB | FileDBB | FileEBB | FileFBB; + const Bitboard KingSide = FileEBB | FileFBB | FileGBB | FileHBB; + + const Bitboard KingFlank[COLOR_NB][FILE_NB] = { + { QueenSide & WhiteCamp, QueenSide & WhiteCamp, QueenSide & WhiteCamp, CenterFiles & WhiteCamp, + CenterFiles & WhiteCamp, KingSide & WhiteCamp, KingSide & WhiteCamp, KingSide & WhiteCamp }, + { QueenSide & BlackCamp, QueenSide & BlackCamp, QueenSide & BlackCamp, CenterFiles & BlackCamp, + CenterFiles & BlackCamp, KingSide & BlackCamp, KingSide & BlackCamp, KingSide & BlackCamp }, + }; + template Score evaluate_threats(const Position& pos, const EvalInfo& ei) { @@ -491,18 +504,6 @@ namespace { const Bitboard TRank2BB = (Us == WHITE ? Rank2BB : Rank7BB); const Bitboard TRank7BB = (Us == WHITE ? Rank7BB : Rank2BB); - const Bitboard TheirCamp = (Us == WHITE ? Rank4BB | Rank5BB | Rank6BB | Rank7BB | Rank8BB - : Rank5BB | Rank4BB | Rank3BB | Rank2BB | Rank1BB); - - const Bitboard QueenSide = TheirCamp & (FileABB | FileBBB | FileCBB | FileDBB); - const Bitboard CenterFiles = TheirCamp & (FileCBB | FileDBB | FileEBB | FileFBB); - const Bitboard KingSide = TheirCamp & (FileEBB | FileFBB | FileGBB | FileHBB); - - const Bitboard KingFlank[FILE_NB] = { - QueenSide, QueenSide, QueenSide, CenterFiles, - CenterFiles, KingSide, KingSide, KingSide - }; - enum { Minor, Rook }; Bitboard b, weak, defended, safeThreats; @@ -571,7 +572,7 @@ namespace { score += ThreatByPawnPush * popcount(b); // King tropism: firstly, find squares that we attack in the enemy king flank - b = ei.attackedBy[Us][ALL_PIECES] & KingFlank[file_of(pos.square(Them))]; + b = ei.attackedBy[Us][ALL_PIECES] & KingFlank[Us][file_of(pos.square(Them))]; // Secondly, add to the bitboard the squares which we attack twice in that flank // but which are not protected by a enemy pawn. Note the trick to shift away the @@ -702,10 +703,10 @@ namespace { // ...count safe + (behind & safe) with a single popcount int bonus = popcount((Us == WHITE ? safe << 32 : safe >> 32) | (behind & safe)); - int weight = pos.count(Us) + pos.count(Us) - + pos.count(Them) + pos.count(Them); + bonus = std::min(16, bonus); + int weight = pos.count(Us); - return make_score(bonus * weight * weight * 2 / 11, 0); + return make_score(bonus * weight * weight / 22, 0); }