X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fevaluate.h;h=067baa3cf2e0c717f98a3f136f6f13ece186a6bf;hp=b95aa15d92aad4e662f90a1cc8f2f8d52fced5f1;hb=35ada63174bbec6289d6dea6d3cfc5b5f14d1d27;hpb=539051b1e0fb099c0d0da69d20d6a4c2b98a2cb6;ds=sidebyside diff --git a/src/evaluate.h b/src/evaluate.h index b95aa15d..067baa3c 100644 --- a/src/evaluate.h +++ b/src/evaluate.h @@ -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 Marco Costalba + Copyright (C) 2008-2009 Marco Costalba Stockfish is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -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; + EvalInfo() { futilityMargin[0] = futilityMargin[1] = Value(0); } + + // Middle game and endgame evaluations + Score value; - // Pointers to material and pawn hash table entries: - MaterialInfo *mi; - PawnInfo *pi; + // 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]; @@ -88,11 +93,11 @@ struct EvalInfo { Move mateThreat[2]; // Middle game and endgame mobility scores. - Value mgMobility, egMobility; + Score mobility; - // Extra futility margin. This is added to the standard futility margin - // in the quiescence search. - Value futilityMargin; + // Extra futility margin. This is added to the standard futility margin + // in the quiescence search. One for each color. + Value futilityMargin[2]; }; @@ -100,8 +105,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, int threadID); extern void init_eval(int threads); extern void quit_eval(); extern void read_weights(Color sideToMove);