示例#1
0
def main():

    # Define two agents to compare -- these agents will play from the same
    # starting position against the same adversaries in the tournament
    test_agents = [
        Agent(AlphaBetaPlayer(score_fn=improved_score), "AB_Improved"),
        Agent(AlphaBetaPlayer(score_fn=custom_score), "AB_Custom")
        #Agent(AlphaBetaPlayer(score_fn=custom_score_2), "AB_Custom_2"),
        #Agent(AlphaBetaPlayer(score_fn=custom_score_3), "AB_Custom_3")
        #Agent(AlphaBetaPlayer(score_fn=custom_score_4), "AB_Custom_4"),
        #Agent(AlphaBetaPlayer(score_fn=custom_score_5), "AB_Custom_5"),
        #Agent(AlphaBetaPlayer(score_fn=custom_score_6), "AB_Custom_6")
    ]

    # Define a collection of agents to compete against the test agents
    cpu_agents = [
        Agent(RandomPlayer(), "Random"),
        Agent(MinimaxPlayer(score_fn=open_move_score), "MM_Open"),
        Agent(MinimaxPlayer(score_fn=center_score), "MM_Center"),
        Agent(MinimaxPlayer(score_fn=improved_score), "MM_Improved"),
        Agent(AlphaBetaPlayer(score_fn=open_move_score), "AB_Open"),
        Agent(AlphaBetaPlayer(score_fn=center_score), "AB_Center"),
        Agent(AlphaBetaPlayer(score_fn=improved_score), "AB_Improved")
    ]

    print(DESCRIPTION)
    print("{:^74}".format("*************************"))
    print("{:^74}".format("Playing Matches"))
    print("{:^74}".format("*************************"))
    play_matches(cpu_agents, test_agents, NUM_MATCHES)
示例#2
0
 def test_alphabeta(self):
     self.player1 = AlphaBetaPlayer()
     self.player2 = AlphaBetaPlayer()
     self.game = Board(self.player1, self.player2)
     self.game.apply_move((2, 3))
     self.game.apply_move((0, 5))
     winner, history, outcome = self.game.play()
     self.assertTrue(type(history) == list)
     self.assertTrue(len(history) > 1)
示例#3
0
 def setUp(self):
     reload(game_agent)
     self.player1 = AlphaBetaPlayer(search_depth=2,
                                    score_fn=null_score,
                                    timeout=10.)
     self.player2 = AlphaBetaPlayer(search_depth=2,
                                    score_fn=null_score,
                                    timeout=10.)
     self.game = Board(self.player1, self.player2)
 def test_minimax(self):
     self.game._board_state = [
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0,
         0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 57
     ]
     self.player1 = AlphaBetaPlayer(2, score_fn=open_move_score)
     self.player2 = AlphaBetaPlayer(2, score_fn=open_move_score)
     move = self.player1.alphabeta(self.game, 2)
示例#5
0
def test_aggresive():
    custom_score_2_0_5 = lambda game, player: custom_score_2(game, player, 0.5)
    custom_score_2_1_5 = lambda game, player: custom_score_2(game, player, 1.5)
    custom_score_2_2_0 = lambda game, player: custom_score_2(game, player, 2.0)

    test_agents = [
        Agent(AlphaBetaPlayer(score_fn=improved_score), "AB_Improved"),
        Agent(AlphaBetaPlayer(score_fn=custom_score_2_0_5), "AB_Aggr_0.5"),
        Agent(AlphaBetaPlayer(score_fn=custom_score_2_1_5), "AB_Aggr_1.5"),
        Agent(AlphaBetaPlayer(score_fn=custom_score_2_2_0), "AB_Aggr_2.0"),
    ]
    return test_agents
def test2():
	player1 = AlphaBetaPlayer()
	player2 = AlphaBetaPlayer()
	game = Board(player1, player2, 9, 9)
	game._board_state = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 22]
	#print(player1.get_move(game, 6))
	
	moves = game.get_legal_moves()
	for m in moves:
		fm = game.forecast_move(m).get_legal_moves()
		print (str(m) + " -->" + str(fm) + str(player1.score(game.forecast_move(m),player1)))
	print (player1.get_move(game, 6))
def main():

    # Define two agents to compare -- these agents will play from the same
    # starting position against the same adversaries in the tournament
    test_agents = [
        Agent(AlphaBetaPlayer(score_fn=improved_score), "AB_Improved"),
        Agent(AlphaBetaPlayer(score_fn=ox2_ppd), "ox2_ppd"),
        Agent(AlphaBetaPlayer(score_fn=ox2_ncd), "ox2_ncd"),
        Agent(AlphaBetaPlayer(score_fn=ncd_ppd), "ncd_ppd"),
        Agent(AlphaBetaPlayer(score_fn=ox2_ncd_ppd), "ox2_ncd_ppd"),
        # Agent(AlphaBetaPlayer(score_fn=pos_center_dis), "pos_ct_dis"),
        # Agent(AlphaBetaPlayer(score_fn=neg_center_dis), "neg_ct_dis"),
        # Agent(AlphaBetaPlayer(score_fn=pos_player_dis), "pos_p_dis"),
        # Agent(AlphaBetaPlayer(score_fn=neg_player_dis), "neg_p_dis")
    ]

    # Define a collection of agents to compete against the test agents
    cpu_agents = [
        Agent(RandomPlayer(), "Random"),
        Agent(MinimaxPlayer(score_fn=open_move_score), "MM_Open"),
        Agent(MinimaxPlayer(score_fn=center_score), "MM_Center"),
        Agent(MinimaxPlayer(score_fn=improved_score), "MM_Improved"),
        Agent(AlphaBetaPlayer(score_fn=open_move_score), "AB_Open"),
        Agent(AlphaBetaPlayer(score_fn=center_score), "AB_Center"),
        Agent(AlphaBetaPlayer(score_fn=improved_score), "AB_Improved")
    ]

    print(DESCRIPTION)
    print("{:^85}".format("*************************"))
    print("{:^85}".format("Playing Matches"))
    print("{:^85}".format("*************************"))
    play_matches(cpu_agents, test_agents, NUM_MATCHES)
示例#8
0
def main():

    # Define two agents to compare -- these agents will play from the same
    # starting position against the same adversaries in the tournament
    test_agents = [
        Agent(AlphaBetaPlayer(score_fn=improved_score), "AB_Improved"),
        Agent(AlphaBetaPlayer(score_fn=defensive), "defensive"),
        Agent(AlphaBetaPlayer(score_fn=aggressive), "aggressive"),
        Agent(AlphaBetaPlayer(score_fn=center_play), "center play"),
        Agent(AlphaBetaPlayer(score_fn=defensive_to_aggressive),
              "defensive to aggressive")
    ]

    # Define a collection of agents to compete against the test agents
    cpu_agents = [
        Agent(RandomPlayer(), "Random"),
        Agent(MinimaxPlayer(score_fn=open_move_score), "MM_Open"),
        Agent(MinimaxPlayer(score_fn=center_score), "MM_Center"),
        Agent(MinimaxPlayer(score_fn=improved_score), "MM_Improved"),
        Agent(AlphaBetaPlayer(score_fn=open_move_score), "AB_Open"),
        Agent(AlphaBetaPlayer(score_fn=center_score), "AB_Center"),
        Agent(AlphaBetaPlayer(score_fn=improved_score), "AB_Improved")
    ]

    print(DESCRIPTION)
    print("{:^74}".format("*************************"))
    print("{:^74}".format("Playing Matches"))
    print("{:^74}".format("*************************"))
    play_matches(cpu_agents, test_agents, NUM_MATCHES)
示例#9
0
def test_weighted_move():
    custom_score_3_0_5 = lambda game, player: custom_score_3(game, player, 0.5)
    custom_score_3_1_0 = lambda game, player: custom_score_3(game, player, 1.0)
    custom_score_3_1_5 = lambda game, player: custom_score_3(game, player, 1.5)
    custom_score_3_2_0 = lambda game, player: custom_score_3(game, player, 2.0)

    test_agents = [
        Agent(AlphaBetaPlayer(score_fn=improved_score), "AB_Improved"),
        Agent(AlphaBetaPlayer(score_fn=custom_score_3_0_5), "AB_Wm_0.5"),
        Agent(AlphaBetaPlayer(score_fn=custom_score_3_1_0), "AB_Wm_1.0"),
        Agent(AlphaBetaPlayer(score_fn=custom_score_3_1_5), "AB_Wm_1.5"),
        Agent(AlphaBetaPlayer(score_fn=custom_score_3_2_0), "AB_Wm_2.0")
    ]

    return test_agents
示例#10
0
def test_combined_adaptive():
    custom_score_adaptive_0 = lambda game, player: custom_score_adaptive(
        game, player, True)
    custom_score_adaptive_1 = lambda game, player: custom_score_adaptive(
        game, player, False)

    test_agents = [
        Agent(AlphaBetaPlayer(score_fn=improved_score), "AB_Improved"),
        Agent(AlphaBetaPlayer(score_fn=custom_score_adaptive_0),
              "AB_Comb_Occ"),
        Agent(AlphaBetaPlayer(score_fn=custom_score_adaptive_1),
              "AB_Comb_1-Occ")
    ]

    return test_agents
示例#11
0
def main():

    # Define two agents to compare -- these agents will play from the same
    # starting position against the same adversaries in the tournament
    test_agents = [
        Agent(AlphaBetaPlayer(score_fn=improved_score), "AB_Improved"),
        Agent(AlphaBetaPlayer(score_fn=custom_score), "AB_Custom"),
        Agent(AlphaBetaPlayer(score_fn=custom_score_2), "AB_Custom_2"),
        Agent(AlphaBetaPlayer(score_fn=custom_score_3), "AB_Custom_3")
    ]

    timeout = {"AB_Open": 10, "AB_Center": 10, "AB_Improved": 10}
    test_agents2 = [
        Agent(
            AlphaBetaPlayer(score_fn=open_move_score,
                            timeout=timeout["AB_Open"]), "AB_Open"),
        Agent(
            AlphaBetaPlayer(score_fn=center_score,
                            timeout=timeout["AB_Center"]), "AB_Center"),
        Agent(
            AlphaBetaPlayer(score_fn=improved_score,
                            timeout=timeout["AB_Improved"]), "AB_Improved")
        #  Agent(AlphaBetaPlayer(score_fn=custom_score_3), "AB_Custom_3")
    ]

    # Define a collection of agents to compete against the test agents
    cpu_agents = [
        Agent(RandomPlayer(), "Random"),
        Agent(MinimaxPlayer(score_fn=open_move_score), "MM_Open"),
        Agent(MinimaxPlayer(score_fn=center_score), "MM_Center"),
        Agent(MinimaxPlayer(score_fn=improved_score), "MM_Improved"),
        Agent(
            AlphaBetaPlayer(score_fn=open_move_score,
                            timeout=timeout["AB_Open"]), "AB_Open"),
        Agent(
            AlphaBetaPlayer(score_fn=center_score,
                            timeout=timeout["AB_Center"]), "AB_Center"),
        Agent(
            AlphaBetaPlayer(score_fn=improved_score,
                            timeout=timeout["AB_Improved"]), "AB_Improved")
    ]
    #    assert test_agents[0][0].TIMER_THRESHOLD==90

    print(DESCRIPTION)
    print("{:^74}".format("*************************"))
    print("{:^74}".format("Playing Matches"))
    print("{:^74}".format("*************************"))
    play_matches(cpu_agents, test_agents, NUM_MATCHES)
示例#12
0
def test5():
    player1 = AlphaBetaPlayer(search_depth=100, score_fn=open_move_score)
    player2 = AlphaBetaPlayer(search_depth=100, score_fn=custom_score_3)
    game = isolation.Board(player1, player2, height=7, width=7)
    game._board_state =[0, 0, 0, 'o13', 0, 0, 0, 'o17', 0, 0, 'x17', ' O ', ' X ', 'o09', 0, 'x19', 'o15', 'x27', 'o11',
                        'x03', 'o27', 0, 'o19', 'x11', 'x01', 'x15', 'o07', 0, 'x21', 0, 'x25', 'o05', 'x05', 'o25',
                        0, 0, 'x09', 'o21', 'x13', 0, 'o03', 0, 0, 'x23', 0, 'x07', 'o23', 0, 0, 1, 11, 12]
    game._active_player, game._inactive_player = game._inactive_player, game._active_player
    print(game.to_string())
    print(game.active_player==game._player_2)
    game_copy = game.copy()
    time_millis = lambda: 1000 * timeit.default_timer()
    move_start = time_millis()
    time_left = lambda: 150000 - (time_millis() - move_start)
    curr_move = game._active_player.get_move(game_copy, time_left)
    return curr_move
示例#13
0
def start_game():
    # create an isolation board (by default 7x7)
    player1 = RandomPlayer()
    player2 = AlphaBetaPlayer(score_fn=custom_score_3)
    game = Board(player1, player2)
    assert (player1 == game.active_player)

    player_position = choice(game.get_legal_moves())
    game.apply_move(player_position)

    ai_position = choice(game.get_legal_moves())
    game.apply_move(ai_position)

    move_history = [player_position, ai_position]

    response = jsonify({
        'legal_moves': game.get_legal_moves(),
        'player_position': list(player_position),
        'ai_position': list(ai_position),
        'move_history': move_history
    })

    # place player 1 on the board at row 2, column 3, then place player 2 on
    # the board at row 0, column 5; display the resulting board state.  Note
    # that the .apply_move() method changes the calling object in-place.

    return response
示例#14
0
def test_combined_strategy():
    custom_score_1_0_5 = lambda game, player: custom_score_comb(
        game, player, 0.5)
    custom_score_1_1_0 = lambda game, player: custom_score_comb(
        game, player, 1.5)
    custom_score_1_2_0 = lambda game, player: custom_score_comb(
        game, player, 2.0)

    test_agents = [
        Agent(AlphaBetaPlayer(score_fn=improved_score), "AB_Improved"),
        Agent(AlphaBetaPlayer(score_fn=custom_score_1_0_5), "AB_Comb_0.5"),
        Agent(AlphaBetaPlayer(score_fn=custom_score_1_1_0), "AB_Comb_1.0"),
        Agent(AlphaBetaPlayer(score_fn=custom_score_1_2_0), "AB_Comb_2.0")
    ]

    return test_agents
示例#15
0
def play_game():
    content = request.get_json(silent=True)
    move_history = content['move_history']

    # create an isolation board (by default 7x7)
    player1 = RandomPlayer()
    player2 = AlphaBetaPlayer(score_fn=custom_score_3)
    game = Board(player1, player2)

    assert (player1 == game.active_player)

    for move in move_history:
        game.apply_move(move)

    isWinner = ''

    if game.is_winner(player1):
        isWinner = 'White Knight'

    if game.is_winner(player2):
        isWinner = 'Black Knight'

    if isWinner:
        response = jsonify({
            'legal_moves': game.get_legal_moves(),
            'player_position': list(player_position),
            'ai_position': list(ai_position),
            'move_history': move_history,
            'isWinner': isWinner
        })

    player2.time_left = time_left

    ai_move = player2.alphabeta(game, 6)
    game.apply_move(ai_move)

    player_position = game.get_player_location(player1)
    move_history.append(ai_move)
    ai_position = game.get_player_location(player2)

    if game.is_winner(player1):
        isWinner = 'White Knight'

    if game.is_winner(player2):
        isWinner = 'Black Knight'

    response = jsonify({
        'legal_moves': game.get_legal_moves(),
        'player_position': list(player_position),
        'ai_position': list(ai_position),
        'move_history': move_history,
        'isWinner': isWinner
    })

    # place player 1 on the board at row 2, column 3, then place player 2 on
    # the board at row 0, column 5; display the resulting board state.  Note
    # that the .apply_move() method changes the calling object in-place.

    return response
示例#16
0
    def test_AlphaBetaFailCase1(self):
        self.player1 = AlphaBetaPlayer()
        self.player2 = AlphaBetaPlayer()

        time_millis = lambda: 1000 * timeit.default_timer()
        move_start = time_millis()
        time_left = lambda : 150 - (time_millis() - move_start)
        self.player1.time_left = time_left
        self.player2.time_left = time_left

        self.player1.score = strategy.improved_score
        self.player2.score = strategy.improved_score

        self.game = isolation.Board(self.player1, self.player2, 9, 9)
        self.game._board_state = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 14]

        best_move = self.player1.alphabeta(self.game, 1, 0, 0)
示例#17
0
def main():

    # Define two agents to compare -- these agents will play from the same
    # starting position against the same adversaries in the tournament
    test_agents = [
        Agent(AlphaBetaPlayer(score_fn=improved_score), "AB_Improved"),
        Agent(AlphaBetaPlayer(score_fn=custom_score, timeout=50.),
              "MinDist2Opp"),
        Agent(AlphaBetaPlayer(score_fn=custom_score_2, timeout=50.),
              "DiffDist2Ctr"),
        Agent(AlphaBetaPlayer(score_fn=custom_score_3, timeout=50.),
              "OpenComplex"),
    ]

    # Define a collection of agents to compete against the test agents
    cpu_agents = [
        Agent(RandomPlayer(), "Random"),
        Agent(MinimaxPlayer(score_fn=open_move_score), "MM_Open"),
        Agent(MinimaxPlayer(score_fn=center_score), "MM_Center"),
        Agent(MinimaxPlayer(score_fn=improved_score), "MM_Improved"),
        Agent(AlphaBetaPlayer(score_fn=open_move_score), "AB_Open"),
        Agent(AlphaBetaPlayer(score_fn=center_score), "AB_Center"),
        Agent(AlphaBetaPlayer(score_fn=improved_score), "AB_Improved")
    ]

    print(DESCRIPTION)
    print("{:^74}".format("*************************"))
    print("{:^74}".format("Playing Matches"))
    print("{:^74}".format("*************************"))
    play_matches(cpu_agents, test_agents, NUM_MATCHES)
示例#18
0
def main():

    # Define two agents to compare -- these agents will play from the same
    # starting position against the same adversaries in the tournament
    test_agents = [
        Agent(AlphaBetaPlayer(score_fn=improved_score), "AB_Improved"),
        Agent(AlphaBetaPlayer(score_fn=custom_score), "AB_Custom"),
        Agent(AlphaBetaPlayer(score_fn=custom_score_2), "AB_Custom_2"),
        Agent(AlphaBetaPlayer(score_fn=custom_score_3), "AB_Custom_3")
    ]

    # Define a collection of agents to compete against the test agents
    cpu_agents = [
        Agent(RandomPlayer(), "Random"),
        Agent(MinimaxPlayer(score_fn=open_move_score), "MM_Open"),
        Agent(MinimaxPlayer(score_fn=center_score), "MM_Center"),
        Agent(MinimaxPlayer(score_fn=improved_score), "MM_Improved"),
        Agent(AlphaBetaPlayer(score_fn=open_move_score), "AB_Open"),
        Agent(AlphaBetaPlayer(score_fn=center_score), "AB_Center"),
        Agent(AlphaBetaPlayer(score_fn=improved_score), "AB_Improved")
    ]

    print(DESCRIPTION)
    print("Agent Heuristics:")
    print("AB_Custom = avoid_corners_score")
    print("AB_Custom_2 = next_moves_score")
    print("AB_Custom_3 = weighted_chase_opponent_score\n")
    print("{:^74}".format("*************************"))
    print("{:^74}".format("Playing Matches"))
    print("{:^74}".format("*************************"))
    play_matches(cpu_agents, test_agents, NUM_MATCHES)
示例#19
0
文件: tournament.py 项目: NinV/AIND
def custom_test():
    # Define two agents to compare -- these agents will play from the same
    # starting position against the same adversaries in the tournament
    test_agents = [
        Agent(AlphaBetaPlayer(score_fn=custom_score), "AB_Custom"),
    ]

    # Define a collection of agents to compete against the test agents
    cpu_agents = [
        Agent(AlphaBetaPlayer(score_fn=improved_score), "AB_Improved"),
    ]

    print(DESCRIPTION)
    print("{:^74}".format("*************************"))
    print("{:^74}".format("Playing Matches"))
    print("{:^74}".format("*************************"))
    NUM_MATCHES = 50
    play_matches(cpu_agents, test_agents, NUM_MATCHES)
示例#20
0
    def fitness(a, b):
        score_func = generate_score_function(a, b)
        test_agent = Agent(AlphaBetaPlayer(score_fn=score_func), "AB_Custom")

        results = play_matches(cpu_agents, [test_agent], NUM_MATCHES)

        win_ratio = results[test_agent]
        error = 100. / win_ratio

        return error
示例#21
0
    def test_hash_different(self):
        board = Board(AlphaBetaPlayer(), RandomPlayer())

        board.apply_move(random.choice(board.get_legal_moves()))
        board.apply_move(random.choice(board.get_legal_moves()))

        b1 = board.forecast_move(board.get_legal_moves()[0])
        b2 = board.forecast_move(board.get_legal_moves()[1])

        self.assertNotEqual(b1.__hash__(), b2.__hash__())
示例#22
0
    def testBoard(self):
        AB = AlphaBetaPlayer()
        MM = MinimaxPlayer()
        greedy = GreedyPlayer()
        rand = RandomPlayer()
        game = Board(AB, MM)

        game.apply_move((1, 5))
        game.applymove((2, 3))

        self.assertTrue(game.check_legal_move((4, 5)))
        self.assertEqual((2, 3), game.get_player_location(game._active_player))
示例#23
0
    def test_alphabeta_valid(self):
        test_start = self.time_millis()
        time_left = lambda: 1000 - (self.time_millis() - test_start)

        alphabeta = AlphaBetaPlayer()
        board = Board(alphabeta, RandomPlayer())

        # Play two moves to make legal moves array much smaller
        board.apply_move(random.choice(board.get_legal_moves()))
        board.apply_move(random.choice(board.get_legal_moves()))

        self.assertIn(alphabeta.get_move(board, time_left),
                      board.get_legal_moves(alphabeta))
示例#24
0
def test6():
    player1 = AlphaBetaPlayer(search_depth=1, score_fn=custom_score)
    player2 = AlphaBetaPlayer(search_depth=1, score_fn=custom_score_3)
    game = isolation.Board(player1, player2, height=5, width=5)
    game.apply_move((0, 3))
    print(game.to_string())
    game.apply_move((4, 4))
    print(game.to_string())
    game.apply_move((3, 2))
    print(game.to_string())
    game.apply_move((1, 1))
    game.apply_move((2, 0))
    game.apply_move((3, 0))
    game.apply_move((1, 2))

    print(game.to_string())
    print(custom_score(game, game.active_player))
    print(custom_score(game, game.inactive_player))
    print(custom_score_2(game, game.active_player))
    print(custom_score_2(game, game.inactive_player))
    print(custom_score_3(game, game.active_player))
    print(custom_score_3(game, game.inactive_player))
    print(improved_score(game, game.active_player))
    print(improved_score(game, game.inactive_player))
示例#25
0
def main():

    # Define two agents to compare -- these agents will play from the same
    # starting position against the same adversaries in the tournament
    test_agents = [
        Agent(AlphaBetaPlayer(score_fn=improved_score), "AB_Improved"),
        Agent(AlphaBetaPlayer(score_fn=my_moves_heuristic),
              "my_moves_heuristic"),
        Agent(AlphaBetaPlayer(score_fn=maximise_player_moves),
              "maximise_player_moves"),
        Agent(AlphaBetaPlayer(score_fn=minimise_opponent_moves),
              "minimise_opponent_moves"),
        Agent(
            AlphaBetaPlayer(
                score_fn=maximise_ratio_of_player_to_opponent_moves),
            "maximise_ratio_of_player_to_opponent_moves"),
        Agent(
            AlphaBetaPlayer(
                score_fn=minimise_ratio_of_player_to_opponent_moves),
            "minimise_ratio_of_player_to_opponent_moves")
    ]

    # Define a collection of agents to compete against the test agents
    cpu_agents = [
        Agent(RandomPlayer(), "Random"),
        Agent(MinimaxPlayer(score_fn=open_move_score), "MM_Open"),
        Agent(MinimaxPlayer(score_fn=center_score), "MM_Center"),
        Agent(MinimaxPlayer(score_fn=improved_score), "MM_Improved"),
        Agent(AlphaBetaPlayer(score_fn=open_move_score), "AB_Open"),
        Agent(AlphaBetaPlayer(score_fn=center_score), "AB_Center"),
        Agent(AlphaBetaPlayer(score_fn=improved_score), "AB_Improved")
    ]

    print(DESCRIPTION)
    print("{:^74}".format("*************************"))
    print("{:^74}".format("Playing Matches"))
    print("{:^74}".format("*************************"))
    print()
    play_matches(cpu_agents, test_agents, NUM_MATCHES)
示例#26
0
def optimize():

    cpu_agents = [
        Agent(RandomPlayer(), "Random"),
        Agent(MinimaxPlayer(score_fn=open_move_score), "MM_Open"),
        Agent(MinimaxPlayer(score_fn=center_score), "MM_Center"),
        Agent(MinimaxPlayer(score_fn=improved_score), "MM_Improved"),
        Agent(AlphaBetaPlayer(score_fn=open_move_score), "AB_Open"),
        Agent(AlphaBetaPlayer(score_fn=center_score), "AB_Center"),
        Agent(AlphaBetaPlayer(score_fn=improved_score), "AB_Improved")
    ]

    def fitness(a, b):
        score_func = generate_score_function(a, b)
        test_agent = Agent(AlphaBetaPlayer(score_fn=score_func), "AB_Custom")

        results = play_matches(cpu_agents, [test_agent], NUM_MATCHES)

        win_ratio = results[test_agent]
        error = 100. / win_ratio

        return error

    param_stack = twiddle(fitness)

    _, best_params1 = param_stack.pop()
    _, best_params2 = param_stack.pop()
    _, best_params3 = param_stack.pop()

    print(best_params1)
    print(best_params2)
    print(best_params3)

    score_func1 = generate_score_function(*best_params1)
    score_func2 = generate_score_function(*best_params2)
    score_func3 = generate_score_function(*best_params3)

    test_agents = [
        Agent(AlphaBetaPlayer(score_fn=improved_score), "AB_Improved"),
        Agent(AlphaBetaPlayer(score_fn=score_func1), "AB_Custom_1"),
        Agent(AlphaBetaPlayer(score_fn=score_func2), "AB_Custom_2"),
        Agent(AlphaBetaPlayer(score_fn=score_func3), "AB_Custom_3"),
    ]

    print("{:^74}".format("*************************"))
    print("{:^74}".format("Playing Matches"))
    print("{:^74}".format("*************************"))
    tournament_play_matches(cpu_agents, test_agents, NUM_MATCHES)
示例#27
0
def main():

    # Define two agents to compare -- these agents will play from the same
    # starting position against the same adversaries in the tournament
    test_agents = [
        Agent(AlphaBetaPlayer(score_fn=improved_score), "AB_Improved"),
        Agent(AlphaBetaPlayer(score_fn=custom_score), "AB_Custom"),
        Agent(AlphaBetaPlayer(score_fn=custom_score_2), "AB_Custom_2"),
        Agent(AlphaBetaPlayer(score_fn=custom_score_3), "AB_Custom_3")
    ]

    # Define a collection of agents to compete against the test agents
    cpu_agents = [
        Agent(RandomPlayer(), "Random"),
        Agent(MinimaxPlayer(score_fn=open_move_score), "MM_Open"),
        Agent(MinimaxPlayer(score_fn=center_score), "MM_Center"),
        Agent(MinimaxPlayer(score_fn=improved_score), "MM_Improved"),
        Agent(AlphaBetaPlayer(score_fn=open_move_score), "AB_Open"),
        Agent(AlphaBetaPlayer(score_fn=center_score), "AB_Center"),
        Agent(AlphaBetaPlayer(score_fn=improved_score), "AB_Improved")
    ]

    print(DESCRIPTION)
    print("{:^74}".format("*************************"))
    print("{:^74}".format("Playing Matches"))
    print("{:^74}".format("*************************"))

    results = []
    for i in range(5):

        print("{:^74}".format("*************************"))
        print("{:^74}".format("Playing Tournament N° {}".format(i + 1)))
        print("{:^74}".format("*************************"))

        tournament_results = play_matches(cpu_agents, test_agents, NUM_MATCHES)
        results.append(tournament_results)

    print("{:^74}".format("*************************"))
    print("{:^74}".format("Final results"))
    print("{:^74}".format("*************************"))
    print(results)

    with open(RESULTS, "w") as output:
        count = 1
        for result in results:
            print("Tournament N° {}: {}".format(count, result))
            output.write("Tournament N° {}".format(count) + str(result) + "\n")
            count += 1
示例#28
0
def main():

    # Define two agents to compare -- these agents will play from the same
    # starting position against the same adversaries in the tournament
    test_agents = [
        # Agent(MinimaxPlayer(score_fn=custom_score), "MM_Custom"),
        # Agent(MinimaxPlayer(score_fn=custom_score_2), "MM_Custom_2"),
        # Agent(MinimaxPlayer(score_fn=custom_score_3), "MM_Custom_3"),
        Agent(AlphaBetaPlayer(score_fn=custom_score), "AB_Custom"),
        Agent(AlphaBetaPlayer(score_fn=custom_score_2), "AB_Custom_2"),
        Agent(AlphaBetaPlayer(score_fn=custom_score_3), "AB_Custom_3"),
        Agent(AlphaBetaPlayer(score_fn=custom_score_4), "AB_Custom_4"),
        Agent(AlphaBetaPlayer(score_fn=custom_score_5), "AB_Custom_5"),
        # Agent(AlphaBetaPlayer(score_fn=custom_score_6), "AB_Custom_6"),
        # Agent(AlphaBetaPlayer(score_fn=open_move_score), "AB_Open"),
        # Agent(AlphaBetaPlayer(score_fn=center_score), "AB_Center"),
        Agent(AlphaBetaPlayer(score_fn=improved_score), "AB_Improved"),
        # Agent(RandomPlayer(), "Random")
    ]

    # Define a collection of agents to compete against the test agents
    cpu_agents = [
        # Agent(RandomPlayer(), "Random"),
        # Agent(MinimaxPlayer(score_fn=open_move_score), "MM_Open"),
        # Agent(MinimaxPlayer(score_fn=center_score), "MM_Center"),
        # Agent(MinimaxPlayer(score_fn=improved_score), "MM_Improved"),
        # Agent(AlphaBetaPlayer(score_fn=open_move_score), "AB_Open"),
        # Agent(AlphaBetaPlayer(score_fn=center_score), "AB_Center"),
        Agent(AlphaBetaPlayer(score_fn=improved_score), "AB_Improved")
    ]

    print(DESCRIPTION)
    print("{:^74}".format("*************************"))
    print("{:^74}".format("Playing Matches"))
    print("{:^74}".format("*************************"))

    test_scores = defaultdict(list)
    for i in range(NUM_REPEATS):
        print(" " * 74)
        print("{:>37}{:d}".format("Sample ", i + 1))
        print("-" * 74)
        wins = play_matches(cpu_agents, test_agents, NUM_MATCHES)
        for a in test_agents:
            test_scores[a.name].append(wins[a.player] / NUM_MATCHES)
    return wins, test_scores
示例#29
0
def main():

    # Define two agents to compare -- these agents will play from the same
    # starting position against the same adversaries in the tournament
    test_agent = \
        Agent(AlphaBetaPlayer(score_fn=custom_score_2), "AB_Custom_2")
    #        Agent(AlphaBetaPlayer(score_fn=improved_score), "AB_Improved"),
    #        Agent(AlphaBetaPlayer(score_fn=custom_score), "AB_Custom")
    #        Agent(AlphaBetaPlayer(score_fn=custom_score_3), "AB_Custom_3")

    # Define a collection of agents to compete against the test agents
    cpu_agent = \
        Agent(MinimaxPlayer(score_fn=center_score), "MM_Center")
    #        Agent(MinimaxPlayer(score_fn=open_move_score), "MM_Open")
    #        Agent(RandomPlayer(), "Random"),
    #        Agent(MinimaxPlayer(score_fn=improved_score), "MM_Improved"),
    #        Agent(AlphaBetaPlayer(score_fn=open_move_score), "AB_Open"),
    #        Agent(AlphaBetaPlayer(score_fn=center_score), "AB_Center"),
    #        Agent(AlphaBetaPlayer(score_fn=improved_score), "AB_Improved")

    play_round(cpu_agent, test_agent)
示例#30
0
def main():

    # Define two agents to compare -- these agents will play from the same
    # starting position against the same adversaries in the tournament
    test_agents = [
        Agent(AlphaBetaPlayer(score_fn=improved_score), "AB_Improved"),
        Agent(AlphaBetaPlayer(score_fn=custom_score), "AB_Custom"),
        Agent(AlphaBetaPlayer(score_fn=custom_score_2), "AB_Custom_2"),
        Agent(AlphaBetaPlayer(score_fn=custom_score_3), "AB_Custom_3")
    ]

    """
    Uncomment to add grid search function agents to test_agents
    """
    # print("{} grid search functions".format(len(gs_funcs)))
    # for name, func in gs_funcs.items():
    #     test_agents.append(Agent(AlphaBetaPlayer(score_fn=func), "AB_{}".format(name)))

    # print("{} grid search2 functions".format(len(gs2_funcs)))
    # for name, func in gs2_funcs.items():
    #     test_agents.append(Agent(AlphaBetaPlayer(score_fn=func), "AB_GS2_{}".format(name)))

    # Define a collection of agents to compete against the test agents
    cpu_agents = [
        Agent(RandomPlayer(), "Random"),
        Agent(MinimaxPlayer(score_fn=open_move_score), "MM_Open"),
        Agent(MinimaxPlayer(score_fn=center_score), "MM_Center"),
        Agent(MinimaxPlayer(score_fn=improved_score), "MM_Improved"),
        Agent(AlphaBetaPlayer(score_fn=open_move_score), "AB_Open"),
        Agent(AlphaBetaPlayer(score_fn=center_score), "AB_Center"),
        Agent(AlphaBetaPlayer(score_fn=improved_score), "AB_Improved")
    ]

    print(DESCRIPTION)
    print("{:^74}".format("*************************"))
    print("{:^74}".format("Playing Matches"))
    print("{:^74}".format("*************************"))
    play_matches(cpu_agents, test_agents, NUM_MATCHES)