コード例 #1
0
ファイル: simulate.py プロジェクト: seokhohong/landlord_ai
    def play_game(self):
        while True:
            players = self.pick_players()
            game = LandlordGame(players=players)
            # play a meaningful game
            game.play_round()
            if game.has_winners():
                players_to_record = game._winners
                if random.random() < self.record_everyone_pct:
                    players_to_record = list(TurnPosition)
                for pos in players_to_record:
                    player = game.get_ai(pos)
                    self.record_player(game, player)
                self.track_stats(game)
                break

            # clear out in case a full game wasn't played
            for player in players:
                player._reset_records()
コード例 #2
0
ファイル: player.py プロジェクト: seokhohong/landlord_ai
    def test_features_v2(self):
        players = [
            LearningPlayer_v2(name='random',
                              epsilon=0,
                              estimation_mode=LearningPlayer.ACTUAL_Q,
                              learning_rate=1) for _ in range(3)
        ]
        game = LandlordGame(players=players)
        while not game.is_round_over():
            curr_player = game.get_current_player()
            curr_features = curr_player._derive_features(game)

            best_move, best_move_q = curr_player.decide_best_move(game)
            curr_move_vector = game.get_current_player().compute_move_vector(
                game.get_current_position(), game.get_landlord_position(),
                best_move)
            curr_hand_vector = game.get_current_player(
            ).compute_remaining_hand_vector(game, curr_move_vector,
                                            game.get_current_position())

            curr_player.record_move(game, best_move, best_move_q,
                                    game.get_current_position())
            game.play_move(best_move)

            self.assertTrue(
                np.allclose(curr_features,
                            curr_player.record_history_matrices[-1]))
            self.assertTrue(
                np.allclose(curr_move_vector,
                            curr_player.record_move_vectors[-1]))
            self.assertTrue(
                np.allclose(curr_hand_vector,
                            curr_player.record_hand_vectors[-1]))

        players[0].compute_future_q(game)

        if game.has_winners():
            print(np.max(np.abs(players[0].get_estimated_qs())))
            self.assertTrue(np.max(np.abs(players[0].get_estimated_qs())) == 1)

        self.assertTrue(
            players[0].record_history_matrices[0][0].dtype == np.int8)
コード例 #3
0
def human_game(player_names, perspective):
    perspective_hand = None
    players = []
    for player_name in player_names:
        if player_name == perspective:
            perspective_hand = manual_hand()
        player_is_perspective = (player_name == perspective)
        players.append(
            HumanPlayer(name=player_name,
                        reference_player=reference_player,
                        known_hand=player_is_perspective,
                        ai_before=player_is_perspective))

    game = LandlordGame(players, kitty_callback=manual_kitty)

    first_player = get_first_player(game)

    game.force_current_position(first_player)
    game.force_hand(perspective_position(game, perspective), perspective_hand)

    while not game.is_round_over():
        current_player = game.get_current_player()
        current_position = game.get_current_position()

        best_move, best_move_q = current_player.decide_best_move(game)

        print(current_player.get_name(), "(" + game.get_position_role_name(current_position) + ", " \
              + str(len(game.get_hand(current_position))) + "):", best_move, '(' + str(best_move_q) + ')')

        # play with known hand if it matches perspective
        game.play_move(best_move,
                       hand_known=current_player.get_name() == perspective)

        if type(game.get_last_played()) == KittyReveal:
            print(game.get_last_played())

    if game.has_winners():
        for winner in game.get_winners():
            print('WINNERS:', game.get_ai_players()[winner].get_name())
コード例 #4
0
ファイル: play_vs_ai.py プロジェクト: seokhohong/landlord_ai
def play_against_two(players, show_q=True):
    game = LandlordGame(players)
    while not game.is_round_over():
        current_player = game.get_current_player()
        current_position = game.get_current_position()

        best_move, best_move_q = current_player.decide_best_move(game)

        if show_q:
            best_move_q_str = '(' + str(best_move_q) + ')'
        else:
            best_move_q_str = ''

        print(current_player.get_name(), "(" + game.get_position_role_name(current_position) + ", " \
                  + str(len(game.get_hand(current_position))) + "):", best_move, best_move_q_str)
        game.play_move(best_move)

        if type(game.get_last_played()) == KittyReveal:
            print(game.get_last_played())

    if game.has_winners():
        for winner in game.get_winners():
            print('WINNERS:', game.get_ai_players()[winner].get_name())
コード例 #5
0
if __name__ == "__main__":
    #players = [load_net('4_11_actualq4_model20'),
    #           load_net('4_11_actualq4_model20'),
    #           load_net('4_11_actualq4_model20')]

    players = [
        load_v2_net('4_13_stream2_model3_170', '../stream_models/'),
        load_v2_net('4_13_stream2_model2_194', '../stream_models/'),
        load_v2_net('4_13_stream2_model1_141', '../stream_models/')
    ]

    while True:
        game = LandlordGame(players=players)
        game.play_round(debug=True)
        if game.has_winners():
            break

    def printout_floats(array):
        print(', '.join(["%.3f" % val for val in array]))

    print('\n')
    for i in range(3):
        players[i].compute_future_q(game)
        print(players[i].get_name())
        printout_floats(players[i].get_estimated_qs())
        printout_floats(players[i]._record_state_q)
        print('\n')

    print('')