def _evaluate_rollout(self, game_state: go.GameState, limit=1000): """Use the rollout policy to play until the end of the game, returning +1 if the current player wins, -1 if the opponent wins, and 0 if it is a tie. """ player = game_state.current_player for _ in range(limit): if game_state.is_end_of_game or len( game_state.get_legal_moves(False)) == 0: break action_probs = _rollout_policy_fn(game_state) max_action = max(action_probs, key=itemgetter(1))[0] if max_action == PASS_MOVE: move = PASS_MOVE else: move = (max_action // game_state.size, max_action % game_state.size) game_state.do_move(move) else: # If no break from the loop, issue a warning. print("WARNING: rollout reached move limit") winner = game_state.get_winner() if winner is None: # tie return 0.0 else: return 1.0 if winner == player else -1.0
class play_match(object): """docstring for ClassName""" def __init__(self, player1, player2, save_dir, size=19): # super(ClassName, self).__init__() self.player1 = player1 self.player2 = player2 self.state = GameState(save_dir, size=size) # I Propose that GameState should take a top-level save directory, # then automatically generate the specific file name def _play(self, player): move = player.get_move(self.state) end_of_game = self.state.do_move(move) self.state.write_to_disk() return end_of_game def play(self): """Play one move of match, update game state, save to disk""" end_of_game = self._play(self.player1) if not end_of_game: end_of_game = self._play(self.player2) return end_of_game