"Fossies" - the Fresh Open Source Software Archive

Member "stockfish-11-linux/src/search.h" (18 Jan 2020, 3243 Bytes) of package /linux/privat/stockfish-11-linux.zip:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file. See also the last Fossies "Diffs" side-by-side code changes report for "search.h": 9-linux_vs_10-linux.

    1 /*
    2   Stockfish, a UCI chess playing engine derived from Glaurung 2.1
    3   Copyright (C) 2004-2008 Tord Romstad (Glaurung author)
    4   Copyright (C) 2008-2015 Marco Costalba, Joona Kiiski, Tord Romstad
    5   Copyright (C) 2015-2020 Marco Costalba, Joona Kiiski, Gary Linscott, Tord Romstad
    6 
    7   Stockfish is free software: you can redistribute it and/or modify
    8   it under the terms of the GNU General Public License as published by
    9   the Free Software Foundation, either version 3 of the License, or
   10   (at your option) any later version.
   11 
   12   Stockfish is distributed in the hope that it will be useful,
   13   but WITHOUT ANY WARRANTY; without even the implied warranty of
   14   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   15   GNU General Public License for more details.
   16 
   17   You should have received a copy of the GNU General Public License
   18   along with this program.  If not, see <http://www.gnu.org/licenses/>.
   19 */
   20 
   21 #ifndef SEARCH_H_INCLUDED
   22 #define SEARCH_H_INCLUDED
   23 
   24 #include <vector>
   25 
   26 #include "misc.h"
   27 #include "movepick.h"
   28 #include "types.h"
   29 
   30 class Position;
   31 
   32 namespace Search {
   33 
   34 /// Threshold used for countermoves based pruning
   35 constexpr int CounterMovePruneThreshold = 0;
   36 
   37 
   38 /// Stack struct keeps track of the information we need to remember from nodes
   39 /// shallower and deeper in the tree during the search. Each search thread has
   40 /// its own array of Stack objects, indexed by the current ply.
   41 
   42 struct Stack {
   43   Move* pv;
   44   PieceToHistory* continuationHistory;
   45   int ply;
   46   Move currentMove;
   47   Move excludedMove;
   48   Move killers[2];
   49   Value staticEval;
   50   int statScore;
   51   int moveCount;
   52 };
   53 
   54 
   55 /// RootMove struct is used for moves at the root of the tree. For each root move
   56 /// we store a score and a PV (really a refutation in the case of moves which
   57 /// fail low). Score is normally set at -VALUE_INFINITE for all non-pv moves.
   58 
   59 struct RootMove {
   60 
   61   explicit RootMove(Move m) : pv(1, m) {}
   62   bool extract_ponder_from_tt(Position& pos);
   63   bool operator==(const Move& m) const { return pv[0] == m; }
   64   bool operator<(const RootMove& m) const { // Sort in descending order
   65     return m.score != score ? m.score < score
   66                             : m.previousScore < previousScore;
   67   }
   68 
   69   Value score = -VALUE_INFINITE;
   70   Value previousScore = -VALUE_INFINITE;
   71   int selDepth = 0;
   72   int tbRank = 0;
   73   int bestMoveCount = 0;
   74   Value tbScore;
   75   std::vector<Move> pv;
   76 };
   77 
   78 typedef std::vector<RootMove> RootMoves;
   79 
   80 
   81 /// LimitsType struct stores information sent by GUI about available time to
   82 /// search the current move, maximum depth/time, or if we are in analysis mode.
   83 
   84 struct LimitsType {
   85 
   86   LimitsType() { // Init explicitly due to broken value-initialization of non POD in MSVC
   87     time[WHITE] = time[BLACK] = inc[WHITE] = inc[BLACK] = npmsec = movetime = TimePoint(0);
   88     movestogo = depth = mate = perft = infinite = 0;
   89     nodes = 0;
   90   }
   91 
   92   bool use_time_management() const {
   93     return !(mate | movetime | depth | nodes | perft | infinite);
   94   }
   95 
   96   std::vector<Move> searchmoves;
   97   TimePoint time[COLOR_NB], inc[COLOR_NB], npmsec, movetime, startTime;
   98   int movestogo, depth, mate, perft, infinite;
   99   int64_t nodes;
  100 };
  101 
  102 extern LimitsType Limits;
  103 
  104 void init();
  105 void clear();
  106 
  107 } // namespace Search
  108 
  109 #endif // #ifndef SEARCH_H_INCLUDED