Esempio n. 1
0
def test_pure_explore():
    with pytest.raises(AssertionError) as error:
        package_target.pure_explore('abc')
    with pytest.raises(AssertionError) as error:
        package_target.pure_explore(np.ones((10, 1)))

    val_acq = package_target.pure_explore(np.arange(0, 10))
    truth_val_acq = np.arange(0, 10)
    assert (np.abs(val_acq - truth_val_acq) < TEST_EPSILON).all()
Esempio n. 2
0
def main():
    str_acq = 'pure_explore'
    num_iter = 10
    X_train = np.array([
        [-5],
        [-1],
        [1],
        [2],
    ])
    num_init = X_train.shape[0]
    model_bo = bo.BO(np.array([[-6., 6.]]), str_acq=str_acq)
    X_test = np.linspace(-6, 6, 400)
    X_test = np.reshape(X_test, (400, 1))
    for ind_ in range(1, num_iter + 1):
        Y_train = fun_target(X_train)
        next_x, dict_info = model_bo.optimize(X_train,
                                              fun_target(X_train),
                                              str_initial_method_ao='uniform')
        cov_X_X = dict_info['cov_X_X']
        inv_cov_X_X = dict_info['inv_cov_X_X']
        hyps = dict_info['hyps']

        mu_test, sigma_test, Sigma_test = gp.predict_test_(
            X_train, Y_train, X_test, cov_X_X, inv_cov_X_X, hyps)
        acq_test = acquisition.pure_explore(sigma_test.flatten())
        acq_test = np.expand_dims(acq_test, axis=1)
        X_train = np.vstack((X_train, next_x))
        Y_train = fun_target(X_train)
        utils_plotting.plot_bo_step(X_train,
                                    Y_train,
                                    X_test,
                                    fun_target(X_test),
                                    mu_test,
                                    sigma_test,
                                    path_save=PATH_SAVE,
                                    str_postfix='bo_{}_'.format(str_acq) +
                                    str(ind_),
                                    int_init=num_init)
        utils_plotting.plot_bo_step_acq(X_train,
                                        Y_train,
                                        X_test,
                                        fun_target(X_test),
                                        mu_test,
                                        sigma_test,
                                        acq_test,
                                        path_save=PATH_SAVE,
                                        str_postfix='bo_{}_'.format(str_acq) +
                                        str(ind_),
                                        int_init=num_init)
Esempio n. 3
0
def choose_fun_acquisition(
    str_acq: str,
    noise: constants.TYPING_UNION_FLOAT_NONE = None
) -> constants.TYPING_CALLABLE:
    """
    It chooses and returns an acquisition function.

    :param str_acq: the name of acquisition function.
    :type str_acq: str.
    :param hyps: dictionary of hyperparameters for acquisition function.
    :type hyps: dict.

    :returns: acquisition function.
    :rtype: callable

    :raises: AssertionError

    """

    assert isinstance(str_acq, str)
    assert isinstance(noise, (float, constants.TYPE_NONE))
    assert str_acq in constants.ALLOWED_BO_ACQ

    if str_acq == 'pi':
        fun_acquisition = acquisition.pi
    elif str_acq == 'ei':
        fun_acquisition = acquisition.ei
    elif str_acq == 'ucb':
        fun_acquisition = acquisition.ucb
    elif str_acq == 'aei':
        assert noise is not None

        fun_acquisition = lambda pred_mean, pred_std, Y_train: acquisition.aei(
            pred_mean, pred_std, Y_train, noise)
    elif str_acq == 'pure_exploit':
        fun_acquisition = lambda pred_mean, pred_std, Y_train: acquisition.pure_exploit(
            pred_mean)
    elif str_acq == 'pure_explore':
        fun_acquisition = lambda pred_mean, pred_std, Y_train: acquisition.pure_explore(
            pred_std)
    else:
        raise NotImplementedError('_choose_fun_acquisition: allowed str_acq,\
            but it is not implemented.')

    return fun_acquisition
Esempio n. 4
0
def test_pure_explore():
    with pytest.raises(AssertionError) as error:
        acquisition.pure_explore('abc')
    with pytest.raises(AssertionError) as error:
        acquisition.pure_explore(np.ones((10, 1)))
    with pytest.raises(AssertionError) as error:
        acquisition.pure_explore(np.ones(10), pred_mean='abc')
    with pytest.raises(AssertionError) as error:
        acquisition.pure_explore(np.ones(10), Y_train='abc')
    with pytest.raises(AssertionError) as error:
        acquisition.pure_explore(np.ones(10), pred_mean=np.ones((10, 1)))
    with pytest.raises(AssertionError) as error:
        acquisition.pure_explore(np.ones(10), pred_mean=np.ones(20))
    with pytest.raises(AssertionError) as error:
        acquisition.pure_explore(np.ones(10), Y_train=np.ones(20))

    val_acq = acquisition.pure_explore(np.arange(0, 10))
    truth_val_acq = np.arange(0, 10)
    assert (np.abs(val_acq - truth_val_acq) < TEST_EPSILON).all()