along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+#include "tune.h"
+
#include <algorithm>
#include <iostream>
+#include <map>
#include <sstream>
+#include <string>
-#include "types.h"
-#include "misc.h"
#include "uci.h"
+namespace Stockfish {
+enum Value : int;
+}
+
using std::string;
namespace Stockfish {
-bool Tune::update_on_last;
-const UCI::Option* LastOption = nullptr;
+bool Tune::update_on_last;
+const UCI::Option* LastOption = nullptr;
static std::map<std::string, int> TuneResults;
string Tune::next(string& names, bool pop) {
- string name;
+ string name;
- do {
- string token = names.substr(0, names.find(','));
+ do
+ {
+ string token = names.substr(0, names.find(','));
- if (pop)
- names.erase(0, token.size() + 1);
+ if (pop)
+ names.erase(0, token.size() + 1);
- std::stringstream ws(token);
- name += (ws >> token, token); // Remove trailing whitespace
+ std::stringstream ws(token);
+ name += (ws >> token, token); // Remove trailing whitespace
- } while ( std::count(name.begin(), name.end(), '(')
- - std::count(name.begin(), name.end(), ')'));
+ } while (std::count(name.begin(), name.end(), '(') - std::count(name.begin(), name.end(), ')'));
- return name;
+ return name;
}
static void on_tune(const UCI::Option& o) {
- if (!Tune::update_on_last || LastOption == &o)
- Tune::read_options();
+ if (!Tune::update_on_last || LastOption == &o)
+ Tune::read_options();
}
static void make_option(const string& n, int v, const SetRange& r) {
- // Do not generate option when there is nothing to tune (ie. min = max)
- if (r(v).first == r(v).second)
- return;
+ // Do not generate option when there is nothing to tune (ie. min = max)
+ if (r(v).first == r(v).second)
+ return;
- if (TuneResults.count(n))
- v = TuneResults[n];
+ if (TuneResults.count(n))
+ v = TuneResults[n];
- Options[n] << UCI::Option(v, r(v).first, r(v).second, on_tune);
- LastOption = &Options[n];
+ Options[n] << UCI::Option(v, r(v).first, r(v).second, on_tune);
+ LastOption = &Options[n];
- // Print formatted parameters, ready to be copy-pasted in Fishtest
- std::cout << n << ","
- << v << ","
- << r(v).first << "," << r(v).second << ","
- << (r(v).second - r(v).first) / 20.0 << ","
- << "0.0020"
- << std::endl;
+ // Print formatted parameters, ready to be copy-pasted in Fishtest
+ std::cout << n << "," << v << "," << r(v).first << "," << r(v).second << ","
+ << (r(v).second - r(v).first) / 20.0 << ","
+ << "0.0020" << std::endl;
}
-template<> void Tune::Entry<int>::init_option() { make_option(name, value, range); }
-
-template<> void Tune::Entry<int>::read_option() {
- if (Options.count(name))
- value = int(Options[name]);
+template<>
+void Tune::Entry<int>::init_option() {
+ make_option(name, value, range);
}
-template<> void Tune::Entry<Value>::init_option() { make_option(name, value, range); }
-
-template<> void Tune::Entry<Value>::read_option() {
- if (Options.count(name))
- value = Value(int(Options[name]));
+template<>
+void Tune::Entry<int>::read_option() {
+ if (Options.count(name))
+ value = int(Options[name]);
}
-template<> void Tune::Entry<Score>::init_option() {
- make_option("m" + name, mg_value(value), range);
- make_option("e" + name, eg_value(value), range);
+template<>
+void Tune::Entry<Value>::init_option() {
+ make_option(name, value, range);
}
-template<> void Tune::Entry<Score>::read_option() {
- if (Options.count("m" + name))
- value = make_score(int(Options["m" + name]), eg_value(value));
-
- if (Options.count("e" + name))
- value = make_score(mg_value(value), int(Options["e" + name]));
+template<>
+void Tune::Entry<Value>::read_option() {
+ if (Options.count(name))
+ value = Value(int(Options[name]));
}
// Instead of a variable here we have a PostUpdate function: just call it
-template<> void Tune::Entry<Tune::PostUpdate>::init_option() {}
-template<> void Tune::Entry<Tune::PostUpdate>::read_option() { value(); }
+template<>
+void Tune::Entry<Tune::PostUpdate>::init_option() {}
+template<>
+void Tune::Entry<Tune::PostUpdate>::read_option() {
+ value();
+}
-} // namespace Stockfish
+} // namespace Stockfish
// Init options with tuning session results instead of default values. Useful to
//
// Then paste the output below, as the function body
-#include <cmath>
namespace Stockfish {
-void Tune::read_results() {
-
- /* ...insert your values here... */
+void Tune::read_results() { /* ...insert your values here... */
}
-} // namespace Stockfish
+} // namespace Stockfish