From: Fabian Fichter Date: Sat, 7 Nov 2020 22:47:31 +0000 (+0100) Subject: Support loading multiple variant NNUE files X-Git-Url: http://winboard.nl/cgi-bin?a=commitdiff_plain;h=246589971a2fb47cb57cce00f48ed9b44fa299b5;p=fairystockfish.git Support loading multiple variant NNUE files Use same separator colon/semicolon as for TB files. --- diff --git a/src/evaluate.cpp b/src/evaluate.cpp index 7aed771..2b6f814 100644 --- a/src/evaluate.cpp +++ b/src/evaluate.cpp @@ -71,11 +71,28 @@ namespace Eval { void NNUE::init() { + useNNUE = Options["Use NNUE"]; + if (!useNNUE) + return; + string eval_file = string(Options["EvalFile"]); - useNNUE = Options["Use NNUE"] - && ( eval_file.find(string(Options["UCI_Variant"])) != string::npos - || (Options["UCI_Variant"] == "chess" && eval_file.rfind("nn-", 0) != string::npos)); // restrict NNUE usage to corresponding variant + // Restrict NNUE usage to corresponding variant + // Support multiple variant networks separated by semicolon(Windows)/colon(Unix) + stringstream ss(eval_file); + string variant = string(Options["UCI_Variant"]); + useNNUE = false; +#ifndef _WIN32 + constexpr char SepChar = ':'; +#else + constexpr char SepChar = ';'; +#endif + while (getline(ss, eval_file, SepChar)) + if (eval_file.rfind(variant, 0) != string::npos || (variant == "chess" && eval_file.rfind("nn-", 0) != string::npos)) + { + useNNUE = true; + break; + } if (!useNNUE) return; @@ -119,7 +136,7 @@ namespace Eval { string eval_file = string(Options["EvalFile"]); - if (useNNUE && eval_file_loaded != eval_file) + if (useNNUE && eval_file.find(eval_file_loaded) == string::npos) { UCI::OptionsMap defaults; UCI::init(defaults); @@ -140,7 +157,7 @@ namespace Eval { } if (useNNUE) - sync_cout << "info string NNUE evaluation using " << eval_file << " enabled" << sync_endl; + sync_cout << "info string NNUE evaluation using " << eval_file_loaded << " enabled" << sync_endl; else sync_cout << "info string classical evaluation enabled" << sync_endl; }