Ejemplo n.º 1
0
    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
Ejemplo n.º 2
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