X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fevaluate.cpp;h=3ba405ccf28ff378192bed7b905ef1fc9f9686c9;hp=4642b34f4f63b681d5859229b86a67b0fc478eec;hb=9a1d5f0f1d8a12a85b198688d4f1d636a146eb7a;hpb=d0c2faa5fd9ad05f865d2a69b59efab43b2be421 diff --git a/src/evaluate.cpp b/src/evaluate.cpp index 4642b34f..3ba405cc 100644 --- a/src/evaluate.cpp +++ b/src/evaluate.cpp @@ -1,7 +1,7 @@ /* Stockfish, a UCI chess playing engine derived from Glaurung 2.1 Copyright (C) 2004-2008 Tord Romstad (Glaurung author) - Copyright (C) 2008-2012 Marco Costalba, Joona Kiiski, Tord Romstad + Copyright (C) 2008-2013 Marco Costalba, Joona Kiiski, Tord Romstad Stockfish is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -150,7 +150,7 @@ namespace { #undef S - Score BishopPinBonus = make_score(27, 12); + const Score BishopPinBonus = make_score(66, 11); // Bonus for having the side to move (modified by Joona Kiiski) const Score Tempo = make_score(24, 11); @@ -308,8 +308,6 @@ namespace Eval { KingDangerTable[0][i] = apply_weight(make_score(t, 0), make_score(KingDanger[0], 0)); KingDangerTable[1][i] = apply_weight(make_score(t, 0), make_score(KingDanger[1], 0)); } - - BishopPinBonus = make_score(Options["pin_open"], Options["pin_end"]); } @@ -500,7 +498,7 @@ Value do_evaluate(const Position& pos, Value& margin) { // Init king safety tables only if we are going to use them if ( pos.piece_count(Us, QUEEN) - && pos.non_pawn_material(Us) >= QueenValueMg + RookValueMg) + && pos.non_pawn_material(Us) > QueenValueMg + PawnValueMg) { ei.kingRing[Them] = (b | (Us == WHITE ? b >> 8 : b << 8)); b &= ei.attackedBy[Us][PAWN]; @@ -585,11 +583,13 @@ Value do_evaluate(const Position& pos, Value& margin) { // of threat evaluation must be done later when we have full attack info. if (ei.attackedBy[Them][PAWN] & s) score -= ThreatenedByPawnPenalty[Piece]; - else if (Piece == BISHOP && (PseudoAttacks[Piece][pos.king_square(Them)] & s)) { - const Bitboard between = BetweenBB[s][pos.king_square(Them)] & pos.pieces(); - if (!more_than_one(between)) + + // Otherwise give a bonus if we are a bishop and can pin a piece or + // can give a discovered check through an x-ray attack. + else if ( Piece == BISHOP + && (PseudoAttacks[Piece][pos.king_square(Them)] & s) + && !more_than_one(BetweenBB[s][pos.king_square(Them)] & pos.pieces())) score += BishopPinBonus; - } // Bishop and knight outposts squares if ( (Piece == BISHOP || Piece == KNIGHT)