def __init__(self,
                 board_size=8,
                 random_rate=0.0,
                 as_player_2_rate=0.0,
                 use_agent_service=False):
        self._agent = None  # will need to set after Agent created
        self._use_agent_service = use_agent_service
        self._game: GameBoard = GameBoard(
            board_size=board_size, random_start=random.random() < random_rate)
        self._episode_ended = self._game.game_ended
        self._player_id = PLAYER_1
        self._log_on = False
        self._random_rate = random_rate
        self._as_player_2_rate = as_player_2_rate

        self._action_spec = array_spec.BoundedArraySpec(
            shape=(),
            dtype=np.int32,
            minimum=0,
            # 0 - 8*8, including the last, for pass_turn
            maximum=board_size * board_size,
            name='action')
        # self._observation_spec = array_spec.BoundedArraySpec(shape=(9,),
        self._observation_spec = array_spec.BoundedArraySpec(
            shape=(board_size, board_size, 1),
            dtype=np.float32,
            minimum=-1.0,
            maximum=1.0,
            name='observation')
def fight(policy_1, policy_2) -> GameBoard:
    board_size = 8
    board = GameBoard(board_size=board_size, random_start=False)
    while not board.game_ended:
        # player 1
        board = step(board, PLAYER_1, policy_1)
        if board.game_ended:
            break
        # player 2
        board = step(board, PLAYER_2, policy_2)

    return board
    def _reset(self) -> ts:
        self._game = GameBoard(
            board_size=self._game.board_size,
            random_start=random.random() < self._random_rate)
        self._episode_ended = False
        self._player_id = PLAYER_1
        # random player_id
        # if random.random() < self._random_rate:
        if random.random() < self._as_player_2_rate:
            self._player_id = PLAYER_2
            # opponent move...
            opponent_result = self._opponent_take_turn()
            self._game = opponent_result.new_game_board

        return ts.restart(self._get_observation(self._player_id))
Exemplo n.º 4
0
def fight(policy, agent_as_player_id) -> GameBoard:
    board_size = 8
    board = GameBoard(board_size=board_size, random_start=False)
    if agent_as_player_id == PLAYER_1:
        while not board.game_ended:
            # player 1
            board = agent_step(board, PLAYER_1, policy)
            if board.game_ended:
                break
            # player 2
            board = server_step(board, PLAYER_2, PLAYER_1)
    else:
        while not board.game_ended:
            # player 1
            board = server_step(board, PLAYER_1, PLAYER_2)
            if board.game_ended:
                break
            # player 2
            board = agent_step(board, PLAYER_2, policy)

    return board