X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fevaluate.cpp;h=7f7df3c5465e491bc78775338f12de908fd3d6ab;hp=486bb810cb995b6f0a356f95f85ca2a0a09a1abd;hb=bfd4421f490e721958a77b8304d8ebcb574a583f;hpb=7eefc1f6cc1ceda0a75b0dfef8c7b268e33f052b diff --git a/src/evaluate.cpp b/src/evaluate.cpp index 486bb810..7f7df3c5 100644 --- a/src/evaluate.cpp +++ b/src/evaluate.cpp @@ -266,9 +266,6 @@ namespace { const int PawnTableSize = 16384; const int MaterialTableSize = 1024; - // Array which gives the number of nonzero bits in an 8-bit integer - uint8_t BitCount8Bit[256]; - // Function prototypes template Value do_evaluate(const Position& pos, EvalInfo& ei, int threadID); @@ -326,8 +323,8 @@ Value do_evaluate(const Position& pos, EvalInfo& ei, int threadID) { // Probe the material hash table ei.mi = MaterialTable[threadID]->get_material_info(pos); - ei.mgValue += ei.mi->mg_value(); - ei.egValue += ei.mi->eg_value(); + ei.mgValue += ei.mi->material_value(); + ei.egValue += ei.mi->material_value(); // If we have a specialized evaluation function for the current material // configuration, call it and return @@ -353,8 +350,13 @@ Value do_evaluate(const Position& pos, EvalInfo& ei, int threadID) { // Initialize pawn attack bitboards for both sides ei.attackedBy[WHITE][PAWN] = ((pos.pawns(WHITE) << 9) & ~FileABB) | ((pos.pawns(WHITE) << 7) & ~FileHBB); ei.attackedBy[BLACK][PAWN] = ((pos.pawns(BLACK) >> 7) & ~FileABB) | ((pos.pawns(BLACK) >> 9) & ~FileHBB); - ei.kingAttackersCount[WHITE] = count_1s_max_15(ei.attackedBy[WHITE][PAWN] & ei.attackedBy[BLACK][KING])/2; - ei.kingAttackersCount[BLACK] = count_1s_max_15(ei.attackedBy[BLACK][PAWN] & ei.attackedBy[WHITE][KING])/2; + Bitboard b1 = ei.attackedBy[WHITE][PAWN] & ei.attackedBy[BLACK][KING]; + Bitboard b2 = ei.attackedBy[BLACK][PAWN] & ei.attackedBy[WHITE][KING]; + if (b1) + ei.kingAttackersCount[WHITE] = count_1s_max_15(b1)/2; + + if (b2) + ei.kingAttackersCount[BLACK] = count_1s_max_15(b2)/2; // Evaluate pieces for (Color c = WHITE; c <= BLACK; c++) @@ -493,12 +495,6 @@ void init_eval(int threads) { if (!MaterialTable[i]) MaterialTable[i] = new MaterialInfoTable(MaterialTableSize); } - - for (Bitboard b = 0ULL; b < 256ULL; b++) - { - assert(count_1s(b) == int(uint8_t(count_1s(b)))); - BitCount8Bit[b] = (uint8_t)count_1s(b); - } } @@ -532,6 +528,14 @@ void read_weights(Color us) { WeightKingSafety[us] = weight_option("Cowardice", WeightKingSafetyInternal); WeightKingSafety[them] = weight_option("Aggressiveness", WeightKingOppSafetyInternal); + // If running in analysis mode, make sure we use symmetrical king safety. + // We do this by replacing both WeightKingSafety[us] and + // WeightKingSafety[them] by their average. + if (get_option_value_bool("UCI_AnalyseMode")) { + WeightKingSafety[us] = (WeightKingSafety[us] + WeightKingSafety[them]) / 2; + WeightKingSafety[them] = WeightKingSafety[us]; + } + WeightSpace = weight_option("Space", WeightSpaceInternal); init_safety(); @@ -701,10 +705,6 @@ namespace { } } - inline Bitboard shiftRowsDown(const Bitboard& b, int num) { - - return b >> (num << 3); - } // evaluate_king<>() assigns bonuses and penalties to a king of a given color. @@ -717,19 +717,7 @@ namespace { // King shelter if (relative_rank(us, s) <= RANK_4) { - // 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 += BitCount8Bit[shiftRowsDown(pawns, r+i*sign) & 0xFF] * (128 >> i); - - // Cache shelter value in pawn info - ei.pi->setKingShelter(us, s, shelter); - } + shelter = ei.pi->get_king_shelter(p, us, s); ei.mgValue += sign * Value(shelter); }