Esempio n. 1
0
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])
Esempio n. 2
0
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...')
Esempio n. 3
0
    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}')