X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fevaluate.h;h=2b2533907a5ed56cc53bae49b46ba1a58d802e51;hp=d573e2df3e49f2e04c4dbc5f28191ad30ae61a2e;hb=c7a932bc744f899f53ce0013cbbbaa86915bb2e8;hpb=5dc23121215039938a9ef4e59ae934312774571c diff --git a/src/evaluate.h b/src/evaluate.h index d573e2df..2b253390 100644 --- a/src/evaluate.h +++ b/src/evaluate.h @@ -1,18 +1,18 @@ /* Stockfish, a UCI chess playing engine derived from Glaurung 2.1 Copyright (C) 2004-2008 Tord Romstad (Glaurung author) - Copyright (C) 2008 Marco Costalba + Copyright (C) 2008-2010 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 the Free Software Foundation, either version 3 of the License, or (at your option) any later version. - + Stockfish is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - + You should have received a copy of the GNU General Public License along with this program. If not, see . */ @@ -25,43 +25,48 @@ //// Includes //// +#include + #include "material.h" #include "pawns.h" -#include "position.h" //// //// Types //// + /// The EvalInfo struct contains various information computed and collected -/// by the evaluation function. An EvalInfo object is passed as one of the +/// by the evaluation function. An EvalInfo object is passed as one of the /// arguments to the evaluation function, and the search can make use of its /// contents to make intelligent search decisions. /// -/// At the moment, this is not utilized very much: The only part of the +/// At the moment, this is not utilized very much: The only part of the /// EvalInfo object which is used by the search is futilityMargin. +class Position; struct EvalInfo { - - // Middle game and endgame evaluations: - Value mgValue, egValue; - // Pointers to material and pawn hash table entries: - MaterialInfo *mi; - PawnInfo *pi; + EvalInfo() { margin[WHITE] = margin[BLACK] = VALUE_ZERO; } + + // Middle game and endgame evaluations + Score value; + + // Pointers to material and pawn hash table entries + MaterialInfo* mi; + PawnInfo* pi; // attackedBy[color][piece type] is a bitboard representing all squares - // attacked by a given color and piece type. attackedBy[color][0] contains + // attacked by a given color and piece type, attackedBy[color][0] contains // all squares attacked by the given color. Bitboard attackedBy[2][8]; Bitboard attacked_by(Color c) const { return attackedBy[c][0]; } Bitboard attacked_by(Color c, PieceType pt) const { return attackedBy[c][pt]; } // kingZone[color] is the zone around the enemy king which is considered - // by the king safety evaluation. This consists of the squares directly + // by the king safety evaluation. This consists of the squares directly // adjacent to the king, and the three (or two, for a king on an edge file) - // squares two ranks in front of the king. For instance, if black's king + // squares two ranks in front of the king. For instance, if black's king // is on g8, kingZone[WHITE] is a bitboard containing the squares f8, h8, // f7, g7, h7, f6, g6 and h6. Bitboard kingZone[2]; @@ -84,15 +89,8 @@ struct EvalInfo { // 2 to kingAdjacentZoneAttacksCount[BLACK]. int kingAdjacentZoneAttacksCount[2]; - // mateThreat[color] is a move for the given side which gives a direct mate. - Move mateThreat[2]; - - // Middle game and endgame mobility scores. - Value mgMobility, egMobility; - - // Extra futility margin. This is added to the standard futility margin - // in the quiescence search. - Value futilityMargin; + // Value of the score margin we should consider for the given color + Value margin[2]; }; @@ -100,8 +98,7 @@ struct EvalInfo { //// Prototypes //// -extern Value evaluate(const Position &pos, EvalInfo &ei, int threadID); -extern Value quick_evaluate(const Position &pos); +extern Value evaluate(const Position& pos, EvalInfo& ei); extern void init_eval(int threads); extern void quit_eval(); extern void read_weights(Color sideToMove);