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])
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)
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])
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])
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])
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))
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
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
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])
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])