예제 #1
0
 def get_games_from_all_files(self):
     files = find_pgn_files(self.config.resource.play_data_dir)
     print(files)
     games = []
     for filename in files:
         games.extend(get_games_from_file(filename))
     print("done reading")
     return games
예제 #2
0
 def get_games_from_all_files(self):
     """
     Loads game data from pgn files
     :return list(chess.pgn.Game): the games
     """
     files = find_pgn_files(self.config.resource.play_data_dir)
     print(files)
     games = []
     for filename in files:
         games.extend(get_games_from_file(filename))
     print("done reading")
     return games
예제 #3
0
 def get_games_from_all_files(self):
     """
     Loads game data from pgn files
     :return list(chess.pgn.Game): the games
     """
     files = find_pgn_files(self.config.resource.play_data_dir)
     print(files)
     games = []
     for filename in files:
         games.extend(get_games_from_file(filename))
     print("done reading")
     return games
예제 #4
0
    def read_game(self, idx):
        self.env.reset()
        self.black = ChessPlayer(self.config, self.model)
        self.white = ChessPlayer(self.config, self.model)
        files = find_pgn_files(self.config.resource.play_data_dir)
        if len(files) > 0:
            random.shuffle(files)
            filename = files[0]
            pgn = open(filename, errors='ignore')
            size = os.path.getsize(filename)
            pos = random.randint(0, size)
            pgn.seek(pos)

            line = pgn.readline()
            offset = 0
            # Parse game headers.
            while line:
                if line.isspace() or line.startswith("%"):
                    line = pgn.readline()
                    continue

                # Read header tags.
                tag_match = TAG_REGEX.match(line)
                if tag_match:
                    offset = pgn.tell()
                    break

                line = pgn.readline()

            pgn.seek(offset)
            game = chess.pgn.read_game(pgn)
            node = game
            result = game.headers["Result"]
            actions = []
            while not node.is_end():
                next_node = node.variation(0)
                actions.append(node.board().uci(next_node.move))
                node = next_node
            pgn.close()

            k = 0
            observation = self.env.observation
            while not self.env.done and k < len(actions):
                if self.env.board.turn == chess.BLACK:
                    action = self.black.sl_action(observation, actions[k])
                else:
                    action = self.white.sl_action(observation, actions[k])
                board, info = self.env.step(action)
                observation = board.fen()
                k += 1

            self.env.done = True
            if not self.env.board.is_game_over() and result != '1/2-1/2':
                self.env.resigned = True
            if result == '1-0':
                self.env.winner = Winner.white
            elif result == '0-1':
                self.env.winner = Winner.black
            else:
                self.env.winner = Winner.draw

            self.finish_game()
            self.save_play_data(write=idx % self.config.play_data.nb_game_in_file == 0)
            self.remove_play_data()
        return self.env
예제 #5
0
 def get_games_from_all_files(self):
     files = find_pgn_files(self.config.resource.play_data_dir)
     games = []
     for filename in files:
         games.extend(self.get_games_from_file(filename))
     return games
예제 #6
0
파일: sl.py 프로젝트: sky4star/Chess-Zero
 def read_all_files(self):
     files = find_pgn_files(self.config.resource.play_data_dir)
     print(files)
     from itertools import chain
     return chain.from_iterable(
         self.read_file(filename) for filename in files)