X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fevaluate.cpp;h=6fe4af628b051883dff3fec72ed4d987300291e7;hp=59b605eca2665f12b40f4a816d71badc9fa6c449;hb=da579e46b71ef67871ec940209b63b44fe352fbf;hpb=980124c6094f90741a250a40c160efb593244ffb diff --git a/src/evaluate.cpp b/src/evaluate.cpp index 59b605ec..6fe4af62 100644 --- a/src/evaluate.cpp +++ b/src/evaluate.cpp @@ -44,14 +44,11 @@ namespace { // Evaluation grain size, must be a power of 2. const int GrainSize = 4; - // Evaluation weights - int WeightMobilityMidgame = 0x100; - int WeightMobilityEndgame = 0x100; - int WeightPawnStructureMidgame = 0x100; - int WeightPawnStructureEndgame = 0x100; - int WeightPassedPawnsMidgame = 0x100; - int WeightPassedPawnsEndgame = 0x100; - int WeightKingSafety[2] = { 0x100, 0x100 }; + // Evaluation weights, initialized from UCI options + int WeightMobilityMidgame, WeightMobilityEndgame; + int WeightPawnStructureMidgame, WeightPawnStructureEndgame; + int WeightPassedPawnsMidgame, WeightPassedPawnsEndgame; + int WeightKingSafety[2]; int WeightSpace; // Internal evaluation weights. These are applied on top of the evaluation @@ -232,19 +229,15 @@ namespace { const int BishopAttackWeight = 2; const int KnightAttackWeight = 2; - // Bonuses for safe checks for each piece type. - int QueenContactCheckBonus = 3; - int QueenCheckBonus = 2; - int RookCheckBonus = 1; - int BishopCheckBonus = 1; - int KnightCheckBonus = 1; - int DiscoveredCheckBonus = 3; + // Bonuses for safe checks, initialized from UCI options + int QueenContactCheckBonus, DiscoveredCheckBonus; + int QueenCheckBonus, RookCheckBonus, BishopCheckBonus, KnightCheckBonus; // Scan for queen contact mates? const bool QueenContactMates = true; - // Bonus for having a mate threat. - int MateThreatBonus = 3; + // Bonus for having a mate threat, initialized from UCI options + int MateThreatBonus; // InitKingDanger[] contains bonuses based on the position of the defending // king. @@ -709,11 +702,19 @@ namespace { // King shelter if (relative_rank(us, s) <= RANK_4) { - Bitboard pawns = p.pawns(us) & this_and_neighboring_files_bb(s); - Rank r = square_rank(s); - for (int i = 1; i < 4; i++) - shelter += count_1s_8bit(shiftRowsDown(pawns, r+i*sign)) * (128>>i); - + // Shelter cache lookup + shelter = ei.pi->kingShelter(us, s); + if (shelter == -1) + { + shelter = 0; + Bitboard pawns = p.pawns(us) & this_and_neighboring_files_bb(s); + Rank r = square_rank(s); + for (int i = 1; i < 4; i++) + shelter += count_1s_8bit(shiftRowsDown(pawns, r+i*sign)) * (128>>i); + + // Cache shelter value in pawn info + ei.pi->setKingShelter(us, s, shelter); + } ei.mgValue += sign * Value(shelter); }