Support loading multiple variant NNUE files
authorFabian Fichter <ianfab@users.noreply.github.com>
Sat, 7 Nov 2020 22:47:31 +0000 (23:47 +0100)
committerFabian Fichter <ianfab@users.noreply.github.com>
Sat, 7 Nov 2020 22:47:31 +0000 (23:47 +0100)
Use same separator colon/semicolon as for TB files.

src/evaluate.cpp

index 7aed771..2b6f814 100644 (file)
@@ -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;
   }