コード例 #1
0
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)
コード例 #2
0
ファイル: az_quiz_evaluator.py プロジェクト: AzGhort/npfl122
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)))
コード例 #4
0
ファイル: az_quiz_evaluator.py プロジェクト: uhlajs/npfl122
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)))