Exemple #1
0
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
Exemple #2
0
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))
Exemple #3
0
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)
Exemple #4
0
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)