def play(location, option): model: tf.keras.Model = tf.keras.models.load_model(location) minimax = Minimax(model) logo.show() print('\n\n') side = None while side not in ['W', 'B']: side = input('Play as:\nWhite (W) | Black (B) | Random (R) > ') if side == 'R': side = 'W' if np.random.uniform() < 0.5 else 'B' side = side == 'W' szr = serializer.Serializer(None) if option == 'P': pgn = chess.pgn.read_game(io.StringIO(input('Paste PGN:\n> '))) for move in pgn.mainline_moves(): szr.board.push(move) while not szr.board.is_game_over(): logo.show() print('\n\n') display_board(szr.board, side) score = model.predict(np.expand_dims(szr.serialize(), 0)) print(f'ch0ss evaluation: {score}') if szr.board.turn == side: uci = None while not szr.board.is_legal(uci): if uci is not None: print('Illegal move') try: uci = chess.Move.from_uci(input('Type your move:\n > ')) except ValueError: print('Invalid move') uci = None if szr.board.is_legal(uci): szr.board.push(uci) else: print('Illegal move.') else: print('ch0ss is thinking...') move = minimax.search(szr.board, 3, side) szr.board.push(move[1])
def test(location): """ Evaluates a given FEN using the model at `location`. """ model = tf.keras.models.load_model(location) while True: logo.show() print('\n\n') fen = input('Paste FEN\n').split()[0] szr = serializer.Serializer(None) bitboard = szr.serialize_fen(fen) value = model.predict(np.expand_dims(bitboard, 0)) print(szr.board.unicode()) print(f'ch0ss evaluation: {value}\n\n\n') input('Press anything to continue...')
random = np.arange(n) np.random.shuffle(random) szr = serializer.Serializer(None) X = np.array(list(map(szr.serialize_fen, fens)), dtype=np.int8).reshape((n, 6, 8, 8))[ random] y = np.array(list(map(np.mean, results)), dtype=np.float)[random] assert(len(X) == len(y)) # split into train, test cutoff = int(n * split) return X[cutoff:], X[:cutoff], y[cutoff:], y[:cutoff] if __name__ == '__main__': logo.show() print('\n\n') if len(sys.argv) == 1 or not os.path.isfile(sys.argv[1]): print('Dataset file location not found. Pass as an argument:') print('\t> python parse_dataset.py ./dataset/raw/dataset.pgn\n') else: X_train, X_test, y_train, y_test, g = parse_dataset( sys.argv[1], 1500000) save_loc = f'./dataset/processed/dataset_{g}.npz' np.savez(save_loc, X_train=X_train, X_test=X_test, y_train=y_train, y_test=y_test) print(f'Saved dataset in {save_loc}')