Exemplo n.º 1
0
    def test_action_go_to_boarder(self):
        configuration1 = Configuration(path=None)
        configuration1.generate_configuration_from_string("""Circle
MINIMAX
2
0,S2,0,0,0,0,0,0
0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,C1
0,0,0,0,0,0,S1,0
0,0,0,0,0,S1,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
10,20,30,40,50,60,70,80
        """)
        chess1 = Chess(path=None, configuration=configuration1)
        utility1 = minimax_decision(chess1.initial_state, chess1)
        self.assertEqual(2 * 80 + 2 * 60, -utility1[2])
        chess1.initial_state.to_move = configuration1.player
        utility2 = alphabeta_cutoff_search(chess1.initial_state,
                                           chess1,
                                           d=1024)
        self.assertEqual(utility1[0], utility2[0])
        self.assertEqual(utility1[1], utility2[1])
        self.assertEqual(utility1[2], utility2[2])
        self.assertGreaterEqual(utility1[3], utility2[3])
Exemplo n.º 2
0
    def test_tie_break_circle(self):
        configuration1 = Configuration(path=None)
        configuration1.generate_configuration_from_string("""Circle
MINIMAX
7
0,0,0,0,0,0,S1,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,0,0,0
0,0,0,0,0,0,0,0
0,0,C1,0,0,C1,0,0
0,0,0,0,0,0,0,0
10,20,30,40,52,70,90,1000
            """)
        chess1 = Chess(path=None, configuration=configuration1)
        utility1 = minimax_decision(chess1.initial_state, chess1, 1024)
        self.assertEqual((((6, 2), (7, 1))), utility1[0])
        self.assertEqual(1000 + 90 - 1000, utility1[1])  # myopic
        self.assertEqual(1000, utility1[2])
        self.assertEqual(utility1[3], 33)

        utility2 = alphabeta_cutoff_search(chess1.initial_state, chess1,
                                           configuration1.depth_limit)
        self.assertEqual(utility1[0], utility2[0])
        self.assertEqual(utility1[1], utility2[1])
        self.assertEqual(utility1[2], utility2[2])
        self.assertGreaterEqual(utility1[3], 33)
Exemplo n.º 3
0
    def test_depth_limit4(self):
        configuration1 = Configuration(path=None)
        configuration1.generate_configuration_from_string("""Star
MINIMAX
7
0,C1,0,C1,0,C1,0,C1
C1,0,C1,0,C1,0,C1,0
0,S1,0,S1,0,S1,0,S1
S1,0,S1,0,S1,0,S1,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,0,0,0
10,20,30,40,52,70,90,1000
            """)
        chess1 = Chess(path=None, configuration=configuration1)
        utility1 = minimax_decision(chess1.initial_state, chess1,
                                    configuration1.depth_limit)
        self.assertEqual((('Noop')), utility1[0])
        self.assertEqual(368, utility1[1])  # myopic
        self.assertEqual(368, utility1[2])
        self.assertGreaterEqual(utility1[3], 3)

        utility2 = alphabeta_cutoff_search(chess1.initial_state, chess1,
                                           configuration1.depth_limit)
        self.assertEqual(utility1[0], utility2[0])
        self.assertEqual(utility1[1], utility2[1])
        self.assertEqual(utility1[2], utility2[2])
        self.assertGreaterEqual(utility1[3], utility2[3])
Exemplo n.º 4
0
    def test_depth_limit3(self):
        configuration1 = Configuration(path=None)
        configuration1.generate_configuration_from_string("""Circle
MINIMAX
2
0,S2,0,0,0,0,0,0
S1,0,0,0,0,0,0,0
0,0,0,0,0,0,0,C1
0,0,0,0,0,0,S1,0
0,0,0,0,0,S1,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
10,20,30,40,50,60,70,80""")
        chess1 = Chess(path=None, configuration=configuration1)
        utility1 = minimax_decision(chess1.initial_state, chess1,
                                    configuration1.depth_limit)
        self.assertEqual('Noop', utility1[0])
        self.assertEqual(-290, utility1[1])  # myopic
        self.assertEqual(-300, utility1[2])
        self.assertEqual(5, utility1[3])
        chess1.initial_state.to_move = configuration1.player
        utility2 = alphabeta_cutoff_search(chess1.initial_state, chess1,
                                           configuration1.depth_limit)
        self.assertEqual(utility1[0], utility2[0])
        self.assertEqual(utility1[1], utility2[1])
        self.assertEqual(utility1[2], utility2[2])
        self.assertGreaterEqual(utility1[3], utility2[3])
Exemplo n.º 5
0
    def test_action_no_action(self):
        configuration1 = Configuration(path=None)
        configuration1.generate_configuration_from_string("""Star
MINIMAX
2
0,S1,0,0,0,0,0,0
0,0,0,0,0,0,0,0
0,0,0,S1,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,0,0,0,0,0,0
0,0,0,0,0,0,0,0
10,20,30,40,50,60,70,80
        """)
        chess1 = Chess(path=None, configuration=configuration1)
        utility1 = minimax_decision(chess1.initial_state, chess1)
        self.assertEqual(('Noop'), utility1[0])  # min action
        self.assertEqual(140, utility1[1])  # myopic
        self.assertEqual(140, utility1[2])  # farsighted
        self.assertEqual(1, utility1[3])  # total number

        chess1.initial_state.to_move = configuration1.player
        utility2 = alphabeta_cutoff_search(chess1.initial_state,
                                           chess1,
                                           d=1024)
        self.assertEqual(utility1[0], utility2[0])
        self.assertEqual(utility1[1], utility2[1])
        self.assertEqual(utility1[2], utility2[2])
        self.assertGreaterEqual(utility1[3], utility2[3])
Exemplo n.º 6
0
    def test_alphabeta_3(self):
        configuration1 = Configuration(path=None)
        configuration1.generate_configuration_from_string("""Circle
ALPHABETA
10
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,C1,0,0,0
0,0,0,0,0,0,0,0
S1,0,S1,0,S1,0,S1,0
0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,0
10,20,30,40,50,200,250,300
            """)
        chess1 = Chess(path=None, configuration=configuration1)
        utility1 = alphabeta_cutoff_search(chess1.initial_state, chess1,
                                           configuration1.depth_limit)
        print(chess1.translate(utility1))
Exemplo n.º 7
0
    def test_alphabeta_2(self):
        configuration1 = Configuration(path=None)
        configuration1.generate_configuration_from_string("""Circle
ALPHABETA
2
0,S2,0,0,0,0,0,0
S1,0,0,0,0,0,0,0
0,0,0,0,0,0,0,C1
0,0,0,0,0,0,S1,0
0,0,0,0,0,S1,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
10,20,30,40,50,60,70,80""")
        chess1 = Chess(path=None, configuration=configuration1)
        utility1 = alphabeta_cutoff_search(chess1.initial_state,
                                           chess1,
                                           d=configuration1.depth_limit)
        self.assertEqual(('Noop'), utility1[0])  # min action
        self.assertEqual(-290, utility1[1])  # myopic
        self.assertEqual(-300, utility1[2])  # farsighted
        self.assertEqual(5, utility1[3])  # total number
Exemplo n.º 8
0
    def test_action_no_action(self):
        configuration1 = Configuration(path=None)
        configuration1.generate_configuration_from_string("""Star
ALPHABETA
2
0,S1,0,0,0,0,0,0
0,0,C1,0,0,0,0,0
0,0,0,S1,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,0,0,0,0,0,0
0,0,0,0,0,0,0,0
10,20,30,40,50,60,70,80
        """)
        chess1 = Chess(path=None, configuration=configuration1)
        utility1 = alphabeta_cutoff_search(chess1.initial_state,
                                           chess1,
                                           d=configuration1.depth_limit)
        self.assertEqual(((2, 3), (0, 1)), utility1[0])  # min action
        self.assertEqual(160, utility1[1])  # myopic
        self.assertEqual(160, utility1[2])  # farsighted
        self.assertEqual(4, utility1[3])  # total number
Exemplo n.º 9
0
    def test_tie_break(self):
        configuration1 = Configuration(path=None)
        configuration1.generate_configuration_from_string("""Star
MINIMAX
2
0,0,0,0,0,0,0,0
0,S1,0,0,0,0,0,0
0,0,0,0,S1,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,0,0,0,0,0
0,0,0,0,0,0,C1,0
10,20,30,40,50,60,70,80
        """)
        chess1 = Chess(path=None, configuration=configuration1)
        utility1 = minimax_decision(chess1.initial_state, chess1)
        self.assertEqual(((1, 1), (0, 0)), utility1[0])
        self.assertEqual(80, utility1[2])
        chess1.initial_state.to_move = configuration1.player
        utility2 = alphabeta_cutoff_search(chess1.initial_state,
                                           chess1,
                                           d=1024)
        self.assertEqual(utility1[0], utility2[0])
Exemplo n.º 10
0
    def test_action_go_to_boarder4(self):
        configuration1 = Configuration(path=None)
        configuration1.generate_configuration_from_string("""Star
MINIMAX
2
0,C1,0,0,0,0,0,S1
C1,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,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
10,20,30,40,50,60,70,80
    """)
        chess1 = Chess(path=None, configuration=configuration1)
        # utility1 = minimax_decision(chess1.initial_state, chess1)
        # self.assertEqual(80, -utility1[2])

        chess1.initial_state.to_move = configuration1.player
        utility2 = alphabeta_cutoff_search(chess1.initial_state,
                                           chess1,
                                           d=1024)
        self.assertEqual(-80, utility2[2])