def test_unique_id_negative_signflip(self): test_board = ProductGameBoard(AbstractTranspositionTable()) test_board.squares = numpy.array([[0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0], [0, 2, 2, 1, 1, 0], [0, 0, 2, 0, 1, 0], [0, 2, 0, 2, 2, 0], [0, 0, 0, 1, 1, 2]]) test_board.bottomFactor = 9 test_board.topFactor = 9 self.assertFalse(test_board.unique_id_int() < 0)
def test_four_square_value(self): test_board = ProductGameBoard(AbstractTranspositionTable()) self.assertEqual( 5, test_board.fourSquareValue([NegamarkBoard.OPEN, NegamarkBoard.X, NegamarkBoard.X, NegamarkBoard.OPEN])) self.assertEqual( -1000, test_board.fourSquareValue([NegamarkBoard.O, NegamarkBoard.O, NegamarkBoard.O, NegamarkBoard.O]))
def test_unique_id_int_harder(self): test_board = ProductGameBoard(AbstractTranspositionTable()) test_board.make_move(ProductGameMove(3, 6)) #that's i=2 j=2, flat 14 test_board.make_move(ProductGameMove(6, 6)) #that's i=4 j=0, flat 24 self.assertEqual((NegamarkBoard.X * 3 ** (4 + 14)) + (NegamarkBoard.O * 3 ** (4 + 24)) + (9 * (6 - 1)) + (6 - 1), test_board.unique_id_int()) self.assertEqual(test_board.unique_id_int(), test_board.unique_id_faster)
def test_unique_id_faster(self): test_board = ProductGameBoard(AbstractTranspositionTable()) test_board.make_move(ProductGameMove(6, 3)) test_board.make_move(ProductGameMove(7, 3)) test_board.make_move(ProductGameMove(7, 4)) test_board.make_move(ProductGameMove(8, 4)) test_board.make_move(ProductGameMove(8, 6)) test_board.make_move(ProductGameMove(7, 6)) test_board.make_move(ProductGameMove(5, 6)) test_board.make_move(ProductGameMove(6, 6)) self.assertEqual(test_board.unique_id_int(), test_board.unique_id_faster)
def test_heuristic(self): test_board = ProductGameBoard(AbstractTranspositionTable()) test_board.make_move(ProductGameMove(3, 6)) test_board.make_move(ProductGameMove(3, 3)) test_board.make_move(ProductGameMove(3, 9)) test_board.make_move(ProductGameMove(3, 4)) test_board.make_move(ProductGameMove(4, 9)) test_board.make_move(ProductGameMove(2, 4)) test_board.make_move(ProductGameMove(2, 5)) self.assertEqual(-2000, test_board.heuristic())
def main(): mark_amy = ProductGameBoard(StormTranspositionTable("sqlite:product_game_storm.db")) mark_amy.make_move(ProductGameMove(6, 3)) # A mark_amy.make_move(ProductGameMove(7, 3)) mark_amy.make_move(ProductGameMove(7, 4)) mark_amy.make_move(ProductGameMove(8, 4)) mark_amy.make_move(ProductGameMove(8, 6)) mark_amy.ai_deadline = 60 mark_amy.is_automated[NegamarkBoard.X] = False mark_amy.is_automated[NegamarkBoard.O] = True # mark_amy.play_game() mark_amy.choose_ai_move()
def main(): mark_amy = ProductGameBoard( StormMySQLTranspositionTable('mysql://productgame@localhost/productgame')) mark_amy.make_move(ProductGameMove(6, 3)) #A # mark_amy.make_move(ProductGameMove(7, 3)) # mark_amy.make_move(ProductGameMove(7, 4)) # mark_amy.make_move(ProductGameMove(8, 4)) # mark_amy.make_move(ProductGameMove(8, 6)) # mark_amy.make_move(ProductGameMove(7, 6)) # mark_amy.make_move(ProductGameMove(5, 6)) # After this point O thinks he will lose by move 15 # mark_amy.make_move(ProductGameMove(6, 6)) # mark_amy.make_move(ProductGameMove(6, 9)) # mark_amy.make_move(ProductGameMove(9, 9)) # mark_amy.make_move(ProductGameMove(9, 8)) # mark_amy.make_move(ProductGameMove(1, 8)) # mark_amy.make_move(ProductGameMove(2, 8)) # mark_amy.make_move(ProductGameMove(2, 6)) # mark_amy.make_move(ProductGameMove(4, 6)) # After this point O thinks he will lose by move 29 # mark_amy.make_move(ProductGameMove(4, 1)) # mark_amy.make_move(ProductGameMove(5, 1)) # mark_amy.make_move(ProductGameMove(5, 9)) # mark_amy.make_move(ProductGameMove(5, 8)) # mark_amy.make_move(ProductGameMove(5, 4)) # mark_amy.make_move(ProductGameMove(5, 2)) # mark_amy.make_move(ProductGameMove(1, 2)) # mark_amy.make_move(ProductGameMove(1, 3)) mark_amy.ai_deadline=60*3 mark_amy.is_automated[NegamarkBoard.X] = False mark_amy.is_automated[NegamarkBoard.O] = True mark_amy.choose_ai_move()
def test_unique_id_copied(self): test_board = ProductGameBoard(AbstractTranspositionTable()) test_board.make_move(ProductGameMove(1, 1)) self.assertEqual(test_board.unique_id_int(), test_board.unique_id_faster) copied_board = test_board.copy_board() self.assertEqual(copied_board.unique_id_faster, test_board.unique_id_faster) self.assertEqual(copied_board.unique_id_int(), test_board.unique_id_int()) self.assertEqual(copied_board.unique_id_int(), copied_board.unique_id_faster) new_board = test_board.new_board_from_move(ProductGameMove(1, 2)) self.assertEqual(new_board.unique_id_int(), new_board.unique_id_faster)
def main(): mark_amy = ProductGameBoard( StormMySQLTranspositionTable('mysql://productgame@localhost/productgame')) mark_amy.make_move(ProductGameMove(6, 3)) #A # mark_amy.make_move(ProductGameMove(7, 3)) # mark_amy.make_move(ProductGameMove(7, 4)) # mark_amy.make_move(ProductGameMove(8, 4)) # mark_amy.make_move(ProductGameMove(8, 6)) mark_amy.ai_deadline=60*60*24*7 mark_amy.minimum_search_move = 0 mark_amy.minimum_info_interval = 300 mark_amy.is_automated[NegamarkBoard.X] = False mark_amy.is_automated[NegamarkBoard.O] = True mark_amy.play_game()
def main(): my_board = ProductGameBoard( <<<<<<< Updated upstream StormMySQLTranspositionTable('mysql://[email protected]:3307/productgame')) # RedisTranspositionTable('localhost')) # AbstractTranspositionTable()) my_board.make_move(ProductGameMove(4, 4)) my_board.ai_deadline=999999 my_board.minimum_search_move = 24 my_board.max_transposition_table_move = 12
def test_unique_id_int(self): test_board = ProductGameBoard(AbstractTranspositionTable()) test_board.make_move(ProductGameMove(3, 6)) #that's i=2 j=2, flat 14 self.assertEqual((NegamarkBoard.X * 3 ** (4 + 14)) + (9 * 2) + 5, test_board.unique_id_int())
def test_all_legal_moves_start(self): board = ProductGameBoard(AbstractTranspositionTable()) self.assertEqual(sum(range(1,10)), len(board.all_legal_moves()))
def test_all_legal_moves(self): test_board = ProductGameBoard(AbstractTranspositionTable()) test_board.make_move(ProductGameMove(1, 3)) test_board.make_move(ProductGameMove(1, 4)) test_board.make_move(ProductGameMove(1, 5)) test_board.make_move(ProductGameMove(1, 6)) test_board.make_move(ProductGameMove(1, 7)) test_board.make_move(ProductGameMove(1, 9)) test_board.make_move(ProductGameMove(2, 9)) test_board.make_move(ProductGameMove(2, 8)) test_board.make_move(ProductGameMove(2, 7)) test_board.make_move(ProductGameMove(2, 6)) test_board.make_move(ProductGameMove(2, 5)) test_board.make_move(ProductGameMove(2, 1)) # okay, all multiples of 1 and 2 are taken except 1 and 8 self.assertEqual(3, len(test_board.all_legal_moves()))
def test_methods_implemented(self): test_board = ProductGameBoard(AbstractTranspositionTable()) self.assertTrue(test_board.verify_subclass())
def test_unique_id_negative(self): test_board = ProductGameBoard(AbstractTranspositionTable()) test_board.bottomFactor = 9 test_board.topFactor = 9 self.assertEqual(80, test_board.unique_id_int())
def test_endgame(self): test_board = ProductGameBoard(AbstractTranspositionTable()) test_board.make_move(ProductGameMove(3, 6)) test_board.make_move(ProductGameMove(3, 3)) test_board.make_move(ProductGameMove(3, 9)) test_board.make_move(ProductGameMove(3, 4)) test_board.make_move(ProductGameMove(4, 4)) test_board.make_move(ProductGameMove(4, 8)) test_board.make_move(ProductGameMove(5, 8)) test_board.make_move(ProductGameMove(5, 5)) test_board.make_move(ProductGameMove(2, 5)) deadline = datetime.datetime.now() + datetime.timedelta(seconds=7200) outcome_from_two = test_board.negamark(current_depth=1, path='', max_depth=3, deadline=deadline, alpha=Outcome(Outcome.LOSS, 0), beta=Outcome(Outcome.WIN, 0)) self.assertEqual(outcome_from_two.value, Outcome.LOSS)
def test_another_scenario(self): test_board = ProductGameBoard(AbstractTranspositionTable()) test_board.make_move(ProductGameMove(6, 3)) #A test_board.make_move(ProductGameMove(7, 3)) test_board.make_move(ProductGameMove(7, 4)) test_board.make_move(ProductGameMove(8, 4)) test_board.make_move(ProductGameMove(8, 6)) test_board.make_move(ProductGameMove(7, 6)) test_board.make_move(ProductGameMove(5, 6)) test_board.make_move(ProductGameMove(6, 6)) test_board.make_move(ProductGameMove(6, 9)) test_board.make_move(ProductGameMove(9, 9)) test_board.make_move(ProductGameMove(9, 8)) test_board.make_move(ProductGameMove(1, 8)) test_board.make_move(ProductGameMove(2, 8)) test_board.make_move(ProductGameMove(2, 6)) test_board.make_move(ProductGameMove(4, 6)) test_board.make_move(ProductGameMove(4, 1)) test_board.make_move(ProductGameMove(5, 1)) test_board.make_move(ProductGameMove(5, 9)) test_board.make_move(ProductGameMove(5, 8)) test_board.make_move(ProductGameMove(5, 4)) test_board.make_move(ProductGameMove(5, 2)) test_board.make_move(ProductGameMove(1, 2)) test_board.make_move(ProductGameMove(1, 3)) # amy's last move test_board.make_move(ProductGameMove(3, 3)) # my theoretical suicide #This is move 24 # 1 O X O X 6 # 7 O 9 X O 14 # 15 X X O O X # 25 27 X X O 35 # O X O O X 49 # X 56 63 64 X O #Top marker is on 1 #Bottom marker is on 3 self.assertEqual(Outcome.LOSS, test_board.first_pass().value)