From 246589971a2fb47cb57cce00f48ed9b44fa299b5 Mon Sep 17 00:00:00 2001 From: Fabian Fichter Date: Sat, 7 Nov 2020 23:47:31 +0100 Subject: [PATCH] Support loading multiple variant NNUE files Use same separator colon/semicolon as for TB files. --- src/evaluate.cpp | 27 ++++++++++++++++++++++----- 1 files changed, 22 insertions(+), 5 deletions(-) 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; } -- 1.7.0.4