From b0d28ac3abcac8db4708055b380edc49f63637aa Mon Sep 17 00:00:00 2001 From: nodchip Date: Sat, 8 Aug 2020 18:23:11 +0900 Subject: [PATCH] Fixed a bug that the training data generation crashes if eval_limit is high. --- src/learn/learner.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/learn/learner.cpp b/src/learn/learner.cpp index fea25503..85da2ac3 100644 --- a/src/learn/learner.cpp +++ b/src/learn/learner.cpp @@ -634,11 +634,19 @@ void MultiThinkGenSfen::thread_worker(size_t thread_id) // reach leaf // cout << pos; - auto v = Eval::evaluate(pos); + Value v; + if (pos.checkers()) { + // HACK: If a king is checkmated, Eval::evalute(pos) crashes with an + // assertion. To avoid crashes, return value1 instead. + v = value1; + } + else { + v = Eval::evaluate(pos); // evaluate() returns the evaluation value on the turn side, so // If it's a turn different from root_color, you must invert v and return it. if (rootColor != pos.side_to_move()) v = -v; + } // Rewind. // Is it C++x14, and isn't there even foreach to turn in reverse?