X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fucioption.cpp;h=e1b5ae552900b310f61db930caf85d53eb73fb1e;hp=d700e6d18e840aef53f2abf888fe98baf843ce42;hb=66a64406ca2bf10f903ec5078515f9c825414c3d;hpb=6c64f68ccf18a4ee1d4429abbef5fb4c0e216504 diff --git a/src/ucioption.cpp b/src/ucioption.cpp index d700e6d1..e1b5ae55 100644 --- a/src/ucioption.cpp +++ b/src/ucioption.cpp @@ -1,13 +1,14 @@ /* - Glaurung, a UCI chess playing engine. - Copyright (C) 2004-2008 Tord Romstad + Stockfish, a UCI chess playing engine derived from Glaurung 2.1 + Copyright (C) 2004-2008 Tord Romstad (Glaurung author) + Copyright (C) 2008-2010 Marco Costalba, Joona Kiiski, Tord Romstad - Glaurung is free software: you can redistribute it and/or modify + 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. - Glaurung is distributed in the hope that it will be useful, + 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. @@ -21,6 +22,7 @@ //// Includes //// +#include #include #include #include @@ -31,13 +33,9 @@ #include "thread.h" #include "ucioption.h" - -//// -//// Variables -//// - -bool Chess960 = false; - +using std::string; +using std::cout; +using std::endl; //// //// Local definitions @@ -45,148 +43,149 @@ bool Chess960 = false; namespace { - /// - /// Types - /// + enum OptionType { SPIN, COMBO, CHECK, STRING, BUTTON }; - enum OptionType { SPIN, COMBO, CHECK, STRING, BUTTON, OPTION_TYPE_NONE }; + typedef std::vector StrVector; - typedef std::vector ComboValues; + struct Option { - struct OptionValue - { - std::string defaultValue, currentValue; + string name, defaultValue, currentValue; OptionType type; + size_t idx; int minValue, maxValue; - ComboValues comboValues; + StrVector comboValues; - // Helper to convert a bool or an int in a std::string - template std::string stringify(const T& v); + Option(); + Option(const char* defaultValue, OptionType = STRING); + Option(bool defaultValue, OptionType = CHECK); + Option(int defaultValue, int minValue, int maxValue); - OptionValue(); // this is needed to use a std::map - OptionValue(const char* defaultValue, OptionType = STRING); - OptionValue(bool defaultValue); - OptionValue(int defaultValue, int minValue, int maxValue); + bool operator<(const Option& o) const { return idx < o.idx; } }; - typedef std::map Options; - - /// - /// Constants - /// - - // load-defaults populates the options map with the hard - // coded options names and their default values. - void load_defaults(Options& options) { - - options["Use Search Log"] = OptionValue(false); - options["Search Log Filename"] = OptionValue("SearchLog.txt"); - options["Book File"] = OptionValue("book.bin"); - options["Mobility (Middle Game)"] = OptionValue(100, 0, 200); - options["Mobility (Endgame)"] = OptionValue(100, 0, 200); - options["Pawn Structure (Middle Game)"] = OptionValue(100, 0, 200); - options["Pawn Structure (Endgame)"] = OptionValue(100, 0, 200); - options["Passed Pawns (Middle Game)"] = OptionValue(100, 0, 200); - options["Passed Pawns (Endgame)"] = OptionValue(100, 0, 200); - options["Aggressiveness"] = OptionValue(100, 0, 200); - options["Cowardice"] = OptionValue(100, 0, 200); - options["King Safety Curve"] = OptionValue("Quadratic", COMBO); - - options["King Safety Curve"].comboValues.push_back("Quadratic"); - options["King Safety Curve"].comboValues.push_back("Linear"); /*, "From File"*/ - - options["King Safety Coefficient"] = OptionValue(40, 1, 100); - options["King Safety X Intercept"] = OptionValue(0, 0, 20); - options["King Safety Max Slope"] = OptionValue(30, 10, 100); - options["King Safety Max Value"] = OptionValue(500, 100, 1000); - options["Queen Contact Check Bonus"] = OptionValue(4, 0, 8); - options["Rook Contact Check Bonus"] = OptionValue(2, 0, 4); - options["Queen Check Bonus"] = OptionValue(2, 0, 4); - options["Rook Check Bonus"] = OptionValue(1, 0, 4); - options["Bishop Check Bonus"] = OptionValue(1, 0, 4); - options["Knight Check Bonus"] = OptionValue(1, 0, 4); - options["Discovered Check Bonus"] = OptionValue(3, 0, 8); - options["Mate Threat Bonus"] = OptionValue(3, 0, 8); - - options["Check Extension (PV nodes)"] = OptionValue(2, 0, 2); - options["Check Extension (non-PV nodes)"] = OptionValue(1, 0, 2); - options["Single Reply Extension (PV nodes)"] = OptionValue(2, 0, 2); - options["Single Reply Extension (non-PV nodes)"] = OptionValue(2, 0, 2); - options["Mate Threat Extension (PV nodes)"] = OptionValue(2, 0, 2); - options["Mate Threat Extension (non-PV nodes)"] = OptionValue(0, 0, 2); - options["Pawn Push to 7th Extension (PV nodes)"] = OptionValue(1, 0, 2); - options["Pawn Push to 7th Extension (non-PV nodes)"] = OptionValue(1, 0, 2); - options["Passed Pawn Extension (PV nodes)"] = OptionValue(1, 0, 2); - options["Passed Pawn Extension (non-PV nodes)"] = OptionValue(0, 0, 2); - options["Pawn Endgame Extension (PV nodes)"] = OptionValue(2, 0, 2); - options["Pawn Endgame Extension (non-PV nodes)"] = OptionValue(2, 0, 2); - options["Full Depth Moves (PV nodes)"] = OptionValue(14, 1, 100); - options["Full Depth Moves (non-PV nodes)"] = OptionValue(3, 1, 100); - options["Threat Depth"] = OptionValue(5, 0, 100); - options["Selective Plies"] = OptionValue(7, 0, 10); - options["Futility Pruning (Main Search)"] = OptionValue(true); - options["Futility Pruning (Quiescence Search)"] = OptionValue(true); - options["Futility Margin 0"] = OptionValue(50, 0, 1000); - options["Futility Margin 1"] = OptionValue(100, 0, 1000); - options["Futility Margin 2"] = OptionValue(300, 0, 1000); - options["Maximum Razoring Depth"] = OptionValue(3, 0, 4); - options["Razoring Margin"] = OptionValue(300, 150, 600); - options["Randomness"] = OptionValue(0, 0, 10); - options["Minimum Split Depth"] = OptionValue(4, 4, 7); - options["Maximum Number of Threads per Split Point"] = OptionValue(5, 4, 8); - options["Threads"] = OptionValue(1, 1, 8); - options["Hash"] = OptionValue(32, 4, 4096); - options["Clear Hash"] = OptionValue(false); - options["Ponder"] = OptionValue(true); - options["OwnBook"] = OptionValue(true); - options["MultiPV"] = OptionValue(1, 1, 500); - options["UCI_ShowCurrLine"] = OptionValue(false); - options["UCI_Chess960"] = OptionValue(false); + typedef std::vector