1
0
Fork 0
mirror of https://github.com/sockspls/badfish synced 2025-04-30 16:53:09 +00:00

Added use_draw_in_training_data_generation option to write out draw games to the training data.

This commit is contained in:
nodchip 2020-06-27 14:00:12 +09:00
parent 4c926b8eb4
commit aa2dc962f5
2 changed files with 24 additions and 23 deletions

View file

@ -165,8 +165,8 @@ typedef float LearnFloatType;
// 引き分けに至ったとき、それを教師局面として書き出す // 引き分けに至ったとき、それを教師局面として書き出す
// これをするほうが良いかどうかは微妙。 // これをするほうが良いかどうかは微妙。
// #define LEARN_GENSFEN_USE_DRAW_RESULT // #define LEARN_GENSFEN_USE_DRAW_RESULT
extern bool use_draw_in_training;
extern bool use_hash_in_training;
// ====================== // ======================
// configure // configure
// ====================== // ======================

View file

@ -84,10 +84,6 @@
#include <shared_mutex> #include <shared_mutex>
#endif #endif
bool use_draw_in_training=false;
bool use_draw_in_validation=false;
bool use_hash_in_training=true;
using namespace std; using namespace std;
//// これは探索部で定義されているものとする。 //// これは探索部で定義されているものとする。
@ -115,6 +111,11 @@ namespace Learner
// 局面の配列 : PSVector は packed sfen vector の略。 // 局面の配列 : PSVector は packed sfen vector の略。
typedef std::vector<PackedSfenValue> PSVector; typedef std::vector<PackedSfenValue> PSVector;
bool use_draw_in_training_data_generation = false;
bool use_draw_in_training = false;
bool use_draw_in_validation = false;
bool use_hash_in_training = true;
// ----------------------------------- // -----------------------------------
// 局面のファイルへの書き出し // 局面のファイルへの書き出し
// ----------------------------------- // -----------------------------------
@ -499,19 +500,19 @@ void MultiThinkGenSfen::thread_worker(size_t thread_id)
// 長手数に達したのか // 長手数に達したのか
if (ply >= MAX_PLY2) if (ply >= MAX_PLY2)
{ {
#if defined (LEARN_GENSFEN_USE_DRAW_RESULT) if (use_draw_in_training_data_generation) {
// 勝敗 = 引き分けとして書き出す。 // 勝敗 = 引き分けとして書き出す。
// こうしたほうが自分が入玉したときに、相手の入玉を許しにくい(かも) // こうしたほうが自分が入玉したときに、相手の入玉を許しにくい(かも)
flush_psv(0); flush_psv(0);
#endif }
break; break;
} }
if (pos.is_draw(ply)) { if (pos.is_draw(ply)) {
#if defined (LEARN_GENSFEN_USE_DRAW_RESULT) if (use_draw_in_training_data_generation) {
// Write if draw.
flush_psv(0); flush_psv(0);
#endif }
// Do not write if draw.
break; break;
} }
@ -522,10 +523,9 @@ void MultiThinkGenSfen::thread_worker(size_t thread_id)
// Write the positions other than this position if checkmated. // Write the positions other than this position if checkmated.
if (pos.checkers()) // Mate if (pos.checkers()) // Mate
flush_psv(-1); flush_psv(-1);
#if defined (LEARN_GENSFEN_USE_DRAW_RESULT) else if (use_draw_in_training_data_generation) {
else // Stalemate flush_psv(0); // Stalemate
flush_psv(0); }
#endif
break; break;
} }
@ -588,10 +588,10 @@ void MultiThinkGenSfen::thread_worker(size_t thread_id)
// 各千日手に応じた処理。 // 各千日手に応じた処理。
if (pos.is_draw(0)) { if (pos.is_draw(0)) {
#if defined (LEARN_GENSFEN_USE_DRAW_RESULT) if (use_draw_in_training_data_generation) {
// 引き分けを書き出すとき // Write if draw.
flush_psv(0); flush_psv(0);
#endif }
break; break;
} }
@ -2660,6 +2660,7 @@ void learn(Position&, istringstream& is)
else if (option == "eta3") is >> eta3; else if (option == "eta3") is >> eta3;
else if (option == "eta1_epoch") is >> eta1_epoch; else if (option == "eta1_epoch") is >> eta1_epoch;
else if (option == "eta2_epoch") is >> eta2_epoch; else if (option == "eta2_epoch") is >> eta2_epoch;
else if (option == "use_draw_in_training_data_generation") is >> use_draw_in_training_data_generation;
else if (option == "use_draw_in_training") is >> use_draw_in_training; else if (option == "use_draw_in_training") is >> use_draw_in_training;
else if (option == "use_draw_in_validation") is >> use_draw_in_validation; else if (option == "use_draw_in_validation") is >> use_draw_in_validation;
else if (option == "use_hash_in_training") is >> use_hash_in_training; else if (option == "use_hash_in_training") is >> use_hash_in_training;