class IsolationTest(unittest.TestCase): def setUp(self): # reload(game_agent) self.player1 = "Player1" self.player2 = "Player2" self.game = isolation.Board(self.player1, self.player2) self.player = MinimaxPlayer(self.game, SearchTimeout) self.player.minimax(self.game, 3) self.asserEqual(1, 1) def a(self): pass
class IsolationTest(unittest.TestCase): """Unit tests for isolation agents""" def setUp(self): reload(game_agent) self.player1 = "Player1" self.player2 = "Player2" self.game = isolation.Board(self.player1, self.player2) def test_CustomScore(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 = game_agent.custom_score self.player2.score = game_agent.custom_score self.game = isolation.Board(self.player1, self.player2, 9, 9) self.game.apply_move((3,3)) while True: # player2 best_move = self.player2.alphabeta(self.game, 1) if best_move == (-1, -1): break self.game.apply_move(best_move) # player1 best_move = self.player1.alphabeta(self.game, 1) if best_move == (-1, -1): break self.game.apply_move(best_move) assert(len(self.game.get_legal_moves())==0) def test_CustomScore2(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 = game_agent.custom_score_2 self.player2.score = game_agent.custom_score_2 self.game = isolation.Board(self.player1, self.player2, 9, 9) self.game.apply_move((3,3)) while True: # player2 best_move = self.player2.alphabeta(self.game, 1) if best_move == (-1, -1): break self.game.apply_move(best_move) # player1 best_move = self.player1.alphabeta(self.game, 1) if best_move == (-1, -1): break self.game.apply_move(best_move) assert(len(self.game.get_legal_moves())==0) def test_CustomScore3(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 = game_agent.custom_score_3 self.player2.score = game_agent.custom_score_3 self.game = isolation.Board(self.player1, self.player2, 9, 9) self.game.apply_move((3,3)) while True: # player2 best_move = self.player2.alphabeta(self.game, 1) if best_move == (-1, -1): break self.game.apply_move(best_move) # player1 best_move = self.player1.alphabeta(self.game, 1) if best_move == (-1, -1): break self.game.apply_move(best_move) assert(len(self.game.get_legal_moves())==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) def test_MinimaxFailCase1(self): self.player1 = MinimaxPlayer() self.player2 = MinimaxPlayer() 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.center_score self.player2.score = strategy.center_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, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 56] best_move = self.player1.minimax(self.game, 1) assert(best_move==(0,7))
class MinimaxPlayerTest(unittest.TestCase): """Unit tests for isolation agents""" def setUp(self): reload(game_agent) self.p1 = MinimaxPlayer() self.p2 = MinimaxPlayer() self.g = Board(self.p1, self.p2) self.small_g = Board(self.p1, self.p2, 4, 4) def test_minimax_no_plies(self): actual = self.p1.minimax(self.small_g, 1) expected = (1, 1) self.assertEqual(actual, expected) def test_minimax_one_ply(self): self.small_g.apply_move((1, 1)) actual = self.p2.minimax(self.small_g, 1) # There are other moves that will result in the same # heuristic score like (1,2) but this is the first # move of that max score that minimax() evaluates expected = (2, 1) # There are mul self.assertEqual(actual, expected) def test_minimax_two_plies(self): self.small_g.apply_move((1, 1)) self.small_g.apply_move((2, 1)) expected = (3, 2) actual = self.p1.minimax(self.small_g, 1) self.assertEqual(expected, actual) def test_minimax_more_than_one_ply(self): actual = self.p1.minimax(self.small_g, 1) expected = (1, 1) self.assertEqual(actual, expected) def test_custom_score_one_ply(self): self.small_g.apply_move((1, 1)) print(self.small_g.print_board()) actual = game_agent.custom_score(self.small_g, self.p1) #P1 has 4 possible moves from a middle square #P2 having not yet moved, can occupy any of the remaing 15 square expected = -11 self.assertEqual(actual, expected) def custom_score_no_plies(self): # In the initial state, each player has the same amount of possible moves actual = game_agent.custom_score(self.small_g, self.p1) expected = 0 #16 - 16 self.assertEqual(actual, expected) def custom_score_two_plies(self): self.small_g.apply_move((1, 1)) self.small_g.apply_move((0, 0)) actual = game_agent.custom_score(self.small_g, self.p1) expected = 2 #4 - 2 self.assertEqual(actual, expected)
from game_agent import MinimaxPlayer from sample_players import GreedyPlayer from isolation import isolation player1 = MinimaxPlayer() player2 = GreedyPlayer() game = isolation.Board(player1, player2) game.apply_move((5, 3)) game.apply_move((0, 0)) player1.time_left = lambda: 99 player1.minimax(game, 4)