def evaluate(players: list, games: int, randomized: bool, first_chosen: bool, render: bool = False, verbose: bool = False) -> float: assert not first_chosen or games % az_quiz.AZQuiz.actions == 0, \ "If `first_chosen` is True, the number of games must be divisble by the number of actions" wins = [0, 0] for i in range(games): for to_start in range(2): game = az_quiz.AZQuiz(randomized) if first_chosen: game.move(i % game.actions) while game.winner is None: game.move(players[to_start ^ game.to_play].play(game.clone())) if render: game.render() time.sleep(0.3) if game.winner == to_start: wins[to_start] += 1 if render: time.sleep(1.0) if verbose: print("First player win rate after {} games: {:.2f}% ({:.2f}% and {:.2f}% when starting and not starting)".format( 2 * i + 2, 100 * (wins[0] + wins[1]) / (2 * i + 2), 100 * wins[0] / (i + 1), 100 * wins[1] / (i + 1))) return (wins[0] + wins[1]) / (2 * games)
def evaluate(players, games, randomized, render): wins = [0, 0] for i in range(games): for to_start in range(2): game = az_quiz.AZQuiz(randomized) to_play = to_start try: while game.winner is None: game.move(players[to_play].play(game.clone())) to_play = 1 - to_play if render: game.render() time.sleep(0.3) except ValueError: pass if to_play == 1: wins[to_start] += 1 if render: time.sleep(1.0) print( "First player win rate after {} games: {:.2f}% ({:.2f}% and {:.2f}% when starting and not starting)" .format(2 * i + 2, 100 * (wins[0] + wins[1]) / (2 * i + 2), 100 * wins[0] / (i + 1), 100 * wins[1] / (i + 1)), file=sys.stderr)
def evaluate(player, games=50, randomized=False): # Will be implemented slightly differently in ReCodEx players = [player, az_quiz_player_simple_heuristic.Player()] wins = [0, 0] for i in range(games): for to_start in range(2): game = az_quiz.AZQuiz(randomized) while game.winner is None: game.move(players[to_start ^ game.to_play].play(game.clone())) if game.winner == to_start: wins[to_start] += 1 print( "First player win rate after {} games: {:.2f}% ({:.2f}% and {:.2f}% when starting and not starting)" .format(2 * i + 2, 100 * (wins[0] + wins[1]) / (2 * i + 2), 100 * wins[0] / (i + 1), 100 * wins[1] / (i + 1)))
def evaluate(players, games, randomized, first_fixed, render): wins = [0, 0] for i in range(games): for to_start in range(2): game = az_quiz.AZQuiz(randomized) if first_fixed: game.move(i % game.actions) while game.winner is None: game.move(players[to_start ^ game.to_play].play(game.clone())) if render: game.render() time.sleep(0.3) if game.winner == to_start: wins[to_start] += 1 if render: time.sleep(1.0) print( "First player win rate after {} games: {:.2f}% ({:.2f}% and {:.2f}% when starting and not starting)" .format(2 * i + 2, 100 * (wins[0] + wins[1]) / (2 * i + 2), 100 * wins[0] / (i + 1), 100 * wins[1] / (i + 1)))