def genmove(self, board): result, winner = board.check_game_end_gomoku(self) assert not result simulate_moves = board.get_empty_point() simulate_moves_num = len(simulate_moves) score = [0] * simulate_moves_num for i in range(simulate_moves_num): move = simulate_moves[i] score[i] = self.mc_simulate(board, move) best_move_index = score.index(max(score)) best_move = simulate_moves[best_move_index] assert best_move in simulate_moves return best_move
def solve_alphabeta(board: SimpleGoBoard, color: int, board_is_evaluated=False): result, winner = board.check_game_end_gomoku() if result: if winner == color: return 10*score.FIVE, None else: return -10*score.FIVE, None # print('ok') alpha, beta = -10*score.FIVE, 10*score.FIVE if not board_is_evaluated: evaluate_board(board) moves = gen_possible_moves(board, color) print(list(map(lambda t: (t[0], gtp_connection.format_point( gtp_connection.point_to_coord(t[0], board.size)), t[1], t[2]), moves))) if len(moves) == 0: return 0, None if (gtp_connection.total_steps == 0 or gtp_connection.total_steps == 1) and board.board[36] == EMPTY: return 1, 36 # best_move = None global best_move best_move = PASS for m in moves: move = m[0] # move_coord = gtp_connection.point_to_coord(move, board.size) # move_as_string = gtp_connection.format_point(move_coord) board.board[move] = color update_board(board, move) result = -alphabeta_search(board, move, GoBoardUtil.opponent(color), 40, -beta, -alpha) # print("trying move:", move_as_string, "score:", result) board.board[move] = EMPTY update_board(board, move) if result > alpha: alpha = result best_move = move if result >= beta: return beta, move return alpha, best_move