Advertisement
adfasdfadsfasdf

Untitled

Aug 17th, 2023 (edited)
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.52 KB | None | 0 0
  1. void single_thread_datagen(const string& output_file_path) {
  2.     ThreadData tdata{};
  3.     SearchData sdata{};
  4.     SearchParameters sparams{};
  5.     sdata.node_limit = sparams.node_limit = 5'000;
  6.  
  7.     i64 total_fens_collected = 0;
  8.     std::ofstream output_fens;
  9.     output_fens.open(output_file_path);
  10.  
  11.     auto start_time = std::chrono::high_resolution_clock::now();
  12.     while (true) {
  13.         Position board = datagen_random_game();
  14.  
  15.         usize legal_move_size;
  16.         std::vector<DatagenGameInfo> collected_fens{};
  17.         do {
  18.             if (board.turn() == WHITE) {
  19.                 MoveList<WHITE, MoveGenerationType::ALL> move_list(board);
  20.                 legal_move_size = move_list.size();
  21.             } else {
  22.                 MoveList<BLACK, MoveGenerationType::ALL> move_list(board);
  23.                 legal_move_size = move_list.size();
  24.             }
  25.  
  26.             if (legal_move_size != 0) {
  27.                 search(sdata, tdata, board, sparams);
  28.  
  29.                 if (!sdata.final_best_move.is_capture() && !board.in_check<WHITE>() && !board.in_check<BLACK>()) {
  30.                     if (board.turn() == BLACK) sdata.final_value *= -1;
  31.                     collected_fens.push_back({board.fen(), sdata.final_value});
  32.                 }
  33.  
  34.                 if (board.turn() == WHITE) board.play<WHITE>(sdata.final_best_move);
  35.                 else board.play<BLACK>(sdata.final_best_move);
  36.             }
  37.         } while (legal_move_size != 0 && !board.has_repetition(Position::THREE_FOLD) && board.fifty_move_rule() < 100);
  38.  
  39.         DatagenGameResults game_result;
  40.         if (!board.has_repetition(Position::THREE_FOLD) && board.fifty_move_rule() < 100) {
  41.             if (board.in_check<WHITE>()) game_result = DatagenGameResults::BLACK_WON;
  42.             else if (board.in_check<BLACK>()) game_result = DatagenGameResults::WHITE_WON;
  43.             else game_result = DatagenGameResults::DRAW;
  44.         } else game_result = DatagenGameResults::DRAW;
  45.  
  46.         for (const auto& game_info : collected_fens | std::views::drop(1)) {
  47.             if (std::abs(game_info.value) >= MATE_BOUND) break;
  48.  
  49.             total_fens_collected += 1;
  50.             if (game_result == DatagenGameResults::DRAW) {
  51.                 output_fens << game_info.fen << " | " << game_info.value << " | " << 0.5 << "\n";
  52.                 continue;
  53.             }
  54.  
  55.             string game_score = "1.0";
  56.             if (game_result == DatagenGameResults::BLACK_WON) game_score = "0.0";
  57.             output_fens << game_info.fen << " | " << game_info.value << " | " << game_score << "\n";
  58.         }
  59.  
  60.         auto current_time = std::chrono::high_resolution_clock::now();
  61.         std::chrono::duration<double> diff = current_time - start_time;
  62.         double seconds_elapsed = diff.count();
  63.         double fps = total_fens_collected / seconds_elapsed;
  64.         std::cout << "Total Fens Collected: " << total_fens_collected << " Fens / Second: " << fps << "\n";
  65.     }
  66. }
  67.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement