def _value_eval(self, game: ReversiGame, piece: str) -> Union[float, int]: """The evaluation function for minimax. For Positional Player, the evaluation function will evaluate the positional advantage of the pieces on the board. Preconditions: - piece in {BLACK, WHITE} :param game: the current game state for evaluation :return: value evaluated from the current game state """ if game.get_winner() is not None: if game.get_winner() == piece: # win return math.inf elif game.get_winner() == 'Draw': # draw return 0 else: # lose return -math.inf else: num_black, num_white = game.get_num_pieces( )[BLACK], game.get_num_pieces()[WHITE] corner_black, corner_white = check_corners(game) board_filled = (num_black + num_white) / (game.get_size()**2) if piece == BLACK: if board_filled < 0.80: # early to middle game return 10 * (corner_black - corner_white) + len( game.get_valid_moves()) else: # end game return num_black / num_white else: if board_filled < 0.80: # early to middle game return 10 * (corner_white - corner_black) + len( game.get_valid_moves()) else: # end game return num_white / num_black
def _value_eval(self, game: ReversiGame, piece: str) -> Union[float, int]: """The evaluation function for minimax. For Positional Player, the evaluation function will evaluate the positional advantage of the pieces on the board. Preconditions: - piece in {BLACK, WHITE} :param game: the current game state for evaluation :return: value evaluated from the current game state """ if game.get_winner() is not None: if game.get_winner() == piece: # win return math.inf elif game.get_winner() == 'Draw': # draw return 0 else: # lose return -math.inf else: num_black, num_white = game.get_num_pieces( )[BLACK], game.get_num_pieces()[WHITE] board_filled = (num_black + num_white) / (game.get_size()**2) if game.get_size() == 8: selected_board_weight = BOARD_WEIGHT_8 else: selected_board_weight = BOARD_WEIGHT_6 if board_filled < 0.80: return positional_early(game, selected_board_weight, piece) else: if piece == BLACK: return num_black / num_white if piece == WHITE: return num_white / num_black return 0
def _value_eval(self, game: ReversiGame, piece: str) -> Union[float, int]: """The evaluation function for minimax. The evaluation function will return the number of piece of its side Preconditions: - piece in {BLACK, WHITE} :param game: the current game state for evaluation :return: the evaluated value of the current state """ if game.get_winner() is not None: if game.get_winner() == piece: # win return math.inf elif game.get_winner() == 'Draw': # draw return 0 else: # lose return -math.inf else: if piece == BLACK: return game.get_num_pieces()[BLACK] / game.get_num_pieces( )[WHITE] else: return game.get_num_pieces()[WHITE] / game.get_num_pieces( )[BLACK]