def main(): if len(sys.argv) >= 2 and sys.argv[1] == 'predict': first = bitify(sys.argv[2]) second = bitify(sys,argv[3]) result = predict_mlp(first, second) print(str(result)) sys.exit(0) print("Gathering data in memory...") dbn_data, mlp_data, mlp_labels = gather_data() print("Gathering Data Done!") print("Splitting data in Training and Test Data...") X_train, X_test, Y_train, Y_test = train_test_split( mlp_data, mlp_labels, test_size=0.25 ) print("Splitting Done!") print("Training Deep Belief Network...") train_dbn(dbn_data) print("Training DBN Done!") print("Training Multi-Layer Perceptron...") train_mlp(X_train, Y_train) print("Training MLP Done!") print("Testing MLP...") print(f"Score = {test_mlp(X_test, Y_test)}")
def eval(board, alpha, beta, player): if ((player == chess.WHITE and alpha.turn == chess.WHITE and alpha.is_checkmate()) or (player == chess.BLACK and beta.turn == chess.BLACK and beta.is_checkmate())): return board if player == chess.WHITE and model.predict_mlp(utils.bitify(board.fen()), utils.bitify(alpha.fen()))[0] < 0.5: return alpha elif player == chess.BLACK and model.predict_mlp(utils.bitify(board.fen()), utils.bitify(beta.fen()))[0] < 0.5: return beta return board
def extract_mlp_data(data): returned_data = list() returned_labels = list() for data_point in data: first_position = bitify(data_point[0].split(';')[0]) second_position = bitify(data_point[1].split(';')[0]) returned_data.append((first_position, second_position)) returned_labels.append((1, 0)) returned_data.append((second_position, first_position)) returned_labels.append((0, 1)) return returned_data, returned_labels
def _hash_code(self, x): """ Returns the polynomial hash code for string x :param x: string to hash :return: hash code of x """ return sum(int(c) * self._z**k for k, c in enumerate(bitify(x)))
def alphabeta(board: chess.Board, depth: int, alpha: chess.Board, beta: chess.Board, player: chess.Color): if depth == 0: return eval(board, alpha, beta, player) if player == chess.WHITE: for move in board.generate_legal_moves(): new_board = board.copy() new_board.push(move) alpha = alphabeta(new_board, depth-1, alpha, beta, chess.BLACK) if model.predict_mlp(utils.bitify(beta.fen()), utils.bitify(alpha.fen()))[0] == 1: break return alpha else: for move in board.generate_legal_moves(): new_board = board.copy() new_board.push(move) beta = alphabeta(new_board, depth-1, alpha, beta, chess.WHITE) if model.predict_mlp(utils.bitify(beta.fen()), utils.bitify(alpha.fen()))[0] == 1: break return beta
def put(self, data, is_bits=False): if not is_bits: data = utils.bitify(data) self.obuffer += data
def extract_dbn_data(white_wins, black_wins): return np.concatenate(( [bitify(i.split(';')[0]) for i in white_wins], [bitify(i.split(';')[0]) for i in black_wins] ))