def main(str_optimizer_method_gp, str_mlm_method, str_ms_method, int_bo, int_iter, int_init):    
    int_dim = 2

    bounds = utils_benchmarks.get_bounds(INFO_TARGET, int_dim)
    
    list_Y = []
    list_time = []
    for ind_bo in range(0, int_bo):
        print('BO Iteration', ind_bo)
        model_bo = bo.BO(bounds, str_optimizer_method_gp=str_optimizer_method_gp, debug=False)
        X_final, Y_final, time_final = utils_bo.optimize_many_with_random_init(model_bo, fun_target, int_init, int_iter, str_initial_method_bo='uniform', str_initial_method_ao='uniform', int_samples_ao=100, str_mlm_method=str_mlm_method, str_modelselection_method=str_ms_method, int_seed=77*(ind_bo+1))
        list_Y.append(Y_final)
        list_time.append(time_final)

    arr_Y = np.array(list_Y)
    if int_bo == 1:
        arr_Y = np.expand_dims(np.squeeze(arr_Y), axis=0)
    else:
        arr_Y = np.squeeze(arr_Y)
    arr_Y = np.expand_dims(arr_Y, axis=0)
    arr_time = np.array(list_time)
    arr_time = np.expand_dims(arr_time, axis=0)
    print(np.array2string(arr_Y, separator=','))
    print(np.array2string(arr_time, separator=','))
    utils_plotting.plot_minimum(arr_Y, [STR_FUN_TARGET], int_init, True, path_save=None, str_postfix=None)
    utils_plotting.plot_minimum_time(arr_time, arr_Y, [STR_FUN_TARGET], int_init, True, path_save=None, str_postfix=None)
    return arr_Y, arr_time
Example #2
0
def test_optimize_str_modelselection_method():
    np.random.seed(42)
    arr_range_1 = np.array([
        [0.0, 10.0],
        [-2.0, 2.0],
        [-5.0, 5.0],
    ])
    dim_X = arr_range_1.shape[0]
    num_X = 5
    X = np.random.randn(num_X, dim_X)
    Y = np.random.randn(num_X, 1)

    model_bo = bo.BO(arr_range_1, str_modelselection_method='loocv')
    next_point, next_points, acquisitions, cov_X_X, inv_cov_X_X, hyps, times = model_bo.optimize(
        X, Y)
    assert isinstance(next_point, np.ndarray)
    assert isinstance(next_points, np.ndarray)
    assert isinstance(acquisitions, np.ndarray)
    assert isinstance(cov_X_X, np.ndarray)
    assert isinstance(inv_cov_X_X, np.ndarray)
    assert isinstance(hyps, dict)
    assert isinstance(times, dict)
    assert len(next_point.shape) == 1
    assert len(next_points.shape) == 2
    assert len(acquisitions.shape) == 1
    assert next_point.shape[0] == dim_X
    assert next_points.shape[1] == dim_X
    assert next_points.shape[0] == acquisitions.shape[0]
def main():
    # (alpha, )
    num_init = 1

    model_bo = bo.BO(np.array([[0.1, 2]]), debug=True)
    list_Y = []
    list_time = []
    for _ in range(0, 10):
        X_final, Y_final, time_final, _, _ = wrappers_bo_function.run_single_round(
            model_bo,
            fun_target,
            num_init,
            10,
            str_initial_method_bo='sobol',
            str_sampling_method_ao='sobol',
            num_samples_ao=100)
        list_Y.append(Y_final)
        list_time.append(time_final)
    arr_Y = np.array(list_Y)
    arr_Y = np.expand_dims(np.squeeze(arr_Y), axis=0)
    arr_time = np.array(list_time)
    arr_time = np.expand_dims(arr_time, axis=0)

    utils_plotting.plot_minimum_vs_iter(arr_Y, ['ridge'],
                                        num_init,
                                        True,
                                        path_save=PATH_SAVE,
                                        str_postfix='ridge')
    utils_plotting.plot_minimum_vs_time(arr_time,
                                        arr_Y, ['ridge'],
                                        num_init,
                                        True,
                                        path_save=PATH_SAVE,
                                        str_postfix='ridge')
def main():
    int_bo = 5
    int_iter = 50
    int_init = 3
    
    int_dim = 2

    bounds = utils_benchmarks.get_bounds(INFO_TARGET, int_dim)
    model_bo = bo.BO(bounds, debug=True)
    list_Y = []
    list_time = []
    for ind_bo in range(0, int_bo):
        print('BO Iteration', ind_bo)
        X_final, Y_final, time_final = utils_bo.optimize_many_with_random_init(model_bo, fun_target, int_init, int_iter, str_initial_method_bo='uniform', str_initial_method_ao='uniform', int_samples_ao=100)
        print(X_final)
        print(Y_final)
        print(time_final)
        list_Y.append(Y_final)
        list_time.append(time_final)

    arr_Y = np.array(list_Y)
    arr_Y = np.expand_dims(np.squeeze(arr_Y), axis=0)
    arr_time = np.array(list_time)
    arr_time = np.expand_dims(arr_time, axis=0)
    utils_plotting.plot_minimum(arr_Y, [STR_FUN_TARGET], int_init, True, path_save=PATH_SAVE, str_postfix=STR_FUN_TARGET)
    utils_plotting.plot_minimum_time(arr_time, arr_Y, [STR_FUN_TARGET], int_init, True, path_save=PATH_SAVE, str_postfix=STR_FUN_TARGET)
def main():
    # (max_depth, n_estimators)
    int_init = 3
    model_bo = bo.BO(np.array([[1, 10], [100, 500]]), debug=True)
    list_Y = []
    list_time = []
    for _ in range(0, 5):
        X_final, Y_final, time_final = utils_bo.optimize_many_with_random_init(
            model_bo,
            fun_target,
            int_init,
            20,
            str_initial_method_bo='uniform',
            str_initial_method_ao='uniform',
            int_samples_ao=100)
        list_Y.append(Y_final)
        list_time.append(time_final)
    arr_Y = np.array(list_Y)
    arr_Y = np.expand_dims(np.squeeze(arr_Y), axis=0)
    arr_time = np.array(list_time)
    arr_time = np.expand_dims(arr_time, axis=0)

    utils_plotting.plot_minimum(arr_Y, ['xgboost'],
                                int_init,
                                True,
                                path_save=PATH_SAVE,
                                str_postfix='xgboost')
    utils_plotting.plot_minimum_time(arr_time,
                                     arr_Y, ['xgboost'],
                                     int_init,
                                     True,
                                     path_save=PATH_SAVE,
                                     str_postfix='xgboost')
Example #6
0
def test_optimize_str_optimize_method_bo():
    np.random.seed(42)
    arr_range_1 = np.array([
        [0.0, 10.0],
        [-2.0, 2.0],
        [-5.0, 5.0],
    ])
    dim_X = arr_range_1.shape[0]
    num_X = 5
    X = np.random.randn(num_X, dim_X)
    Y = np.random.randn(num_X, 1)

    model_bo = bo.BO(arr_range_1, str_optimizer_method_bo='L-BFGS-B')
    next_point, next_points, acquisitions, cov_X_X, inv_cov_X_X, hyps, times = model_bo.optimize(
        X, Y)
    assert isinstance(next_point, np.ndarray)
    assert isinstance(next_points, np.ndarray)
    assert isinstance(acquisitions, np.ndarray)
    assert isinstance(cov_X_X, np.ndarray)
    assert isinstance(inv_cov_X_X, np.ndarray)
    assert isinstance(hyps, dict)
    assert isinstance(times, dict)
    assert len(next_point.shape) == 1
    assert len(next_points.shape) == 2
    assert len(acquisitions.shape) == 1
    assert next_point.shape[0] == dim_X
    assert next_points.shape[1] == dim_X
    assert next_points.shape[0] == acquisitions.shape[0]

    # TODO: add DIRECT test, now it causes an error.

    model_bo = bo.BO(arr_range_1, str_optimizer_method_bo='CMA-ES')
    next_point, next_points, acquisitions, cov_X_X, inv_cov_X_X, hyps, times = model_bo.optimize(
        X, Y)
    assert isinstance(next_point, np.ndarray)
    assert isinstance(next_points, np.ndarray)
    assert isinstance(acquisitions, np.ndarray)
    assert isinstance(cov_X_X, np.ndarray)
    assert isinstance(inv_cov_X_X, np.ndarray)
    assert isinstance(hyps, dict)
    assert isinstance(times, dict)
    assert len(next_point.shape) == 1
    assert len(next_points.shape) == 2
    assert len(acquisitions.shape) == 1
    assert next_point.shape[0] == dim_X
    assert next_points.shape[1] == dim_X
    assert next_points.shape[0] == acquisitions.shape[0]
def main():
    num_points = 100
    is_fixed_noise = False
    bounds = obj_fun.get_bounds()

    model_bo = bo.BO(bounds, debug=True)
    X_init = model_bo.get_initial('uniform', fun_objective=fun_target, int_samples=num_points)
    X_test = bo.get_grid(bounds, 50)
    mu, sigma = gp.predict_optimized(X_init, fun_target(X_init), X_test, is_fixed_noise=is_fixed_noise, debug=True)
Example #8
0
def test_optimize():
    np.random.seed(42)
    arr_range_1 = np.array([
        [0.0, 10.0],
        [-2.0, 2.0],
        [-5.0, 5.0],
    ])
    dim_X = arr_range_1.shape[0]
    num_X = 5
    X = np.random.randn(num_X, dim_X)
    Y = np.random.randn(num_X, 1)
    model_bo = bo.BO(arr_range_1)

    with pytest.raises(AssertionError) as error:
        model_bo.optimize(1, Y)
    with pytest.raises(AssertionError) as error:
        model_bo.optimize(X, 1)
    with pytest.raises(AssertionError) as error:
        model_bo.optimize(np.random.randn(num_X), Y)
    with pytest.raises(AssertionError) as error:
        model_bo.optimize(np.random.randn(num_X, 1), Y)
    with pytest.raises(AssertionError) as error:
        model_bo.optimize(X, np.random.randn(num_X))
    with pytest.raises(AssertionError) as error:
        model_bo.optimize(X, np.random.randn(num_X, 2))
    with pytest.raises(AssertionError) as error:
        model_bo.optimize(X, np.random.randn(3, 1))
    with pytest.raises(AssertionError) as error:
        model_bo.optimize(X, Y, str_initial_method=1)
    with pytest.raises(AssertionError) as error:
        model_bo.optimize(X, Y, str_initial_method='abc')
    with pytest.raises(AssertionError) as error:
        model_bo.optimize(X, Y, str_mlm_method=1)
    with pytest.raises(AssertionError) as error:
        model_bo.optimize(X, Y, str_mlm_method='abc')
    with pytest.raises(AssertionError) as error:
        model_bo.optimize(X, Y, str_modelselection_method=1)
    with pytest.raises(AssertionError) as error:
        model_bo.optimize(X, Y, str_modelselection_method='abc')
    with pytest.raises(AssertionError) as error:
        model_bo.optimize(X, Y, int_samples='abc')
    with pytest.raises(AssertionError) as error:
        model_bo.optimize(X, Y, is_normalized='abc')

    next_point, next_points, acquisitions, cov_X_X, inv_cov_X_X, hyps = model_bo.optimize(X, Y)
    assert isinstance(next_point, np.ndarray)
    assert isinstance(next_points, np.ndarray)
    assert isinstance(acquisitions, np.ndarray)
    assert isinstance(cov_X_X, np.ndarray)
    assert isinstance(inv_cov_X_X, np.ndarray)
    assert isinstance(hyps, dict)
    assert len(next_point.shape) == 1
    assert len(next_points.shape) == 2
    assert len(acquisitions.shape) == 1
    assert next_point.shape[0] == dim_X
    assert next_points.shape[1] == dim_X
    assert next_points.shape[0] == acquisitions.shape[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, normalize_Y=False)
    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_sampling_method='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 = model_bo.compute_posteriors(
            X_train, Y_train, X_test, cov_X_X, inv_cov_X_X, hyps)
        acq_test = model_bo.compute_acquisitions(X_test, X_train, Y_train,
                                                 cov_X_X, inv_cov_X_X, hyps)

        mu_test = np.expand_dims(mu_test, axis=1)
        sigma_test = np.expand_dims(sigma_test, axis=1)
        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_),
                                    num_init=num_init)
        utils_plotting.plot_bo_step_with_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_),
            num_init=num_init)
Example #10
0
def test_optimize_many():
    np.random.seed(42)
    arr_range = np.array([
        [-5.0, 5.0],
    ])
    dim_X = arr_range.shape[0]
    num_X = 3
    num_iter = 10
    X = np.random.randn(num_X, dim_X)
    fun_target = lambda x: x**2 - 2.0 * x + 1.0
    model_bo = bo.BO(arr_range)

    with pytest.raises(AssertionError) as error:
        utils_bo.optimize_many(1, fun_target, X, num_iter)
    with pytest.raises(AssertionError) as error:
        utils_bo.optimize_many(model_bo, 1, X, num_iter)
    with pytest.raises(AssertionError) as error:
        utils_bo.optimize_many(model_bo, fun_target, 1, num_iter)
    with pytest.raises(AssertionError) as error:
        utils_bo.optimize_many(model_bo, fun_target, X, 1.2)
    with pytest.raises(AssertionError) as error:
        utils_bo.optimize_many(model_bo, fun_target, np.random.randn(num_X),
                               num_iter)
    with pytest.raises(AssertionError) as error:
        utils_bo.optimize_many(model_bo,
                               fun_target,
                               X,
                               num_iter,
                               str_initial_method_ao=1)
    with pytest.raises(AssertionError) as error:
        utils_bo.optimize_many(model_bo,
                               fun_target,
                               X,
                               num_iter,
                               str_initial_method_ao='abc')
    with pytest.raises(AssertionError) as error:
        utils_bo.optimize_many(model_bo,
                               fun_target,
                               X,
                               num_iter,
                               int_samples_ao='abc')

    X_final, Y_final, time_all_final, time_gp_final, time_acq_final = utils_bo.optimize_many(
        model_bo, fun_target, X, num_iter)
    assert len(X_final.shape) == 2
    assert len(Y_final.shape) == 2
    assert len(time_all_final.shape) == 1
    assert len(time_gp_final.shape) == 1
    assert len(time_acq_final.shape) == 1
    assert X_final.shape[1] == dim_X
    assert X_final.shape[0] == Y_final.shape[0] == time_all_final.shape[
        0] == num_X + num_iter
    assert Y_final.shape[1] == 1
    assert time_gp_final.shape[0] == time_acq_final.shape[0]
Example #11
0
def main():
    str_acq = 'ei'
    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.ei(mu_test.flatten(), sigma_test.flatten(),
                                  Y_train)
        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)
def main():
    num_points = 100
    is_fixed_noise = False
    model_bo = bo.BO(INFO_TARGET.get('bounds'), debug=True)
    X_init = model_bo.get_initial('uniform',
                                  fun_objective=fun_target,
                                  int_samples=num_points)
    X_test = bo.get_grid(INFO_TARGET.get('bounds'), 50)
    mu, sigma = gp.predict_optimized(X_init,
                                     np.expand_dims(fun_target(X_init),
                                                    axis=1),
                                     X_test,
                                     is_fixed_noise=is_fixed_noise,
                                     debug=True)
Example #13
0
def test_run_single_round_with_all_initial_information():
    np.random.seed(42)
    arr_range = np.array([
        [-5.0, 5.0],
    ])
    dim_X = arr_range.shape[0]
    num_X = 3
    num_iter = 10
    X = np.random.randn(num_X, dim_X)
    Y = np.random.randn(num_X, 1)
    fun_target = lambda x: 2.0 * x + 1.0
    model_bo = bo.BO(arr_range)

    with pytest.raises(AssertionError) as error:
        package_target.run_single_round_with_all_initial_information(1, fun_target, X, Y, num_iter)
    with pytest.raises(AssertionError) as error:
        package_target.run_single_round_with_all_initial_information(model_bo, 1, X, Y, num_iter)
    with pytest.raises(AssertionError) as error:
        package_target.run_single_round_with_all_initial_information(model_bo, fun_target, 1, Y, num_iter)
    with pytest.raises(AssertionError) as error:
        package_target.run_single_round_with_all_initial_information(model_bo, fun_target, X, 1, num_iter)
    with pytest.raises(AssertionError) as error:
        package_target.run_single_round_with_all_initial_information(model_bo, fun_target, X, Y, 'abc')
    with pytest.raises(AssertionError) as error:
        package_target.run_single_round_with_all_initial_information(model_bo, fun_target, np.random.randn(num_X), Y, num_iter)
    with pytest.raises(AssertionError) as error:
        package_target.run_single_round_with_all_initial_information(model_bo, fun_target, X, np.random.randn(num_X), num_iter)
    with pytest.raises(AssertionError) as error:
        package_target.run_single_round_with_all_initial_information(model_bo, fun_target, np.random.randn(2, dim_X), Y, num_iter)
    with pytest.raises(AssertionError) as error:
        package_target.run_single_round_with_all_initial_information(model_bo, fun_target, X, np.random.randn(num_X, 2), num_iter)
    with pytest.raises(AssertionError) as error:
        package_target.run_single_round_with_all_initial_information(model_bo, fun_target, X, Y, num_iter, str_sampling_method_ao=1)
    with pytest.raises(AssertionError) as error:
        package_target.run_single_round_with_all_initial_information(model_bo, fun_target, X, Y, num_iter, str_sampling_method_ao='abc')
    with pytest.raises(AssertionError) as error:
        package_target.run_single_round_with_all_initial_information(model_bo, fun_target, X, Y, num_iter, num_samples_ao='abc')

    X_final, Y_final, time_all_final, time_surrogate_final, time_acq_final = package_target.run_single_round_with_all_initial_information(model_bo, fun_target, X, Y, num_iter)
    assert len(X_final.shape) == 2
    assert len(Y_final.shape) == 2
    assert len(time_all_final.shape) == 1
    assert len(time_surrogate_final.shape) == 1
    assert len(time_acq_final.shape) == 1
    assert X_final.shape[1] == dim_X
    assert X_final.shape[0] == Y_final.shape[0] == num_X + num_iter
    assert time_all_final.shape[0] == num_iter
    assert Y_final.shape[1] == 1
    assert time_surrogate_final.shape[0] == time_acq_final.shape[0]
Example #14
0
def test_get_initial():
    np.random.seed(42)
    arr_range = np.array([
        [0.0, 10.0],
        [-2.0, 2.0],
        [-5.0, 5.0],
    ])
    dim_X = arr_range.shape[0]
    num_X = 5
    X = np.random.randn(num_X, dim_X)
    Y = np.random.randn(num_X, 1)
    fun_objective = lambda X: np.sum(X)
    model_bo = bo.BO(arr_range)

    with pytest.raises(AssertionError) as error:
        model_bo.get_initial(1)
    with pytest.raises(AssertionError) as error:
        model_bo.get_initial('grid', fun_objective=None)
    with pytest.raises(AssertionError) as error:
        model_bo.get_initial('uniform', fun_objective=1)
    with pytest.raises(AssertionError) as error:
        model_bo.get_initial('uniform', int_samples='abc')
    with pytest.raises(AssertionError) as error:
        model_bo.get_initial('uniform', int_seed='abc')
    with pytest.raises(NotImplementedError) as error:
        model_bo.get_initial('abc')

    arr_initials = model_bo.get_initial('grid', fun_objective=fun_objective)
    truth_arr_initials = np.array([
        [0.0, -2.0, -5.0],
    ])
    assert (np.abs(arr_initials - truth_arr_initials) < TEST_EPSILON).all()

    arr_initials = model_bo.get_initial('sobol', int_samples=3)
    arr_initials = model_bo.get_initial('sobol', int_samples=3, int_seed=42)
    truth_arr_initials = np.array([
        [4.84375, 1.3125, 0.46875],
        [3.59375, -0.1875, -0.78125],
        [8.59375, 1.8125, 4.21875],
    ])
    assert (np.abs(arr_initials - truth_arr_initials) < TEST_EPSILON).all()

    arr_initials = model_bo.get_initial('uniform', int_samples=3, int_seed=42)
    truth_arr_initials = np.array([
        [3.74540119, 1.80285723, 2.31993942],
        [5.98658484, -1.37592544, -3.4400548],
        [0.58083612, 1.46470458, 1.01115012],
    ])
    assert (np.abs(arr_initials - truth_arr_initials) < TEST_EPSILON).all()
def main():
    num_points = 100
    fix_noise = False
    bounds = obj_fun.get_bounds()

    model_bo = bo.BO(bounds, debug=True)
    X_init = model_bo.get_initials('uniform', num_points)
    X_test = utils_common.get_grids(bounds, 50)
    mu, sigma, Sigma = gp.predict_with_optimized_hyps(
        X_init,
        fun_target(X_init),
        X_test,
        str_optimizer_method='Nelder-Mead',
        fix_noise=fix_noise,
        debug=True)
def main():
    num_bo = 5
    num_iter = 10
    num_init = 5

    bounds = obj_fun.get_bounds()
    model_bo = bo.BO(bounds, debug=True)
    list_Y = []
    list_time = []
    for ind_bo in range(0, num_bo):
        print('BO Round', ind_bo + 1)
        X_final, Y_final, time_final, _, _ = wrappers.run_single_round(
            model_bo,
            fun_target,
            num_init,
            num_iter,
            str_initial_method_bo='gaussian',
            str_sampling_method_ao='gaussian',
            num_samples_ao=100,
            seed=42 * (ind_bo + 1))
        print(X_final)
        print(Y_final)
        print(time_final)
        list_Y.append(Y_final)
        list_time.append(time_final)

        bx_best, y_best = utils_bo.get_best_acquisition_by_history(
            X_final, Y_final)
        print(bx_best, y_best)

    arr_Y = np.array(list_Y)
    arr_Y = np.expand_dims(np.squeeze(arr_Y), axis=0)
    arr_time = np.array(list_time)
    arr_time = np.expand_dims(arr_time, axis=0)
    utils_plotting.plot_minimum_vs_iter(arr_Y, [STR_FUN_TARGET],
                                        num_init,
                                        True,
                                        path_save=PATH_SAVE,
                                        str_postfix=STR_FUN_TARGET)
    utils_plotting.plot_minimum_vs_time(arr_time,
                                        arr_Y, [STR_FUN_TARGET],
                                        num_init,
                                        True,
                                        path_save=PATH_SAVE,
                                        str_postfix=STR_FUN_TARGET)
Example #17
0
def main():
    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.]]))
    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, _, _, cov_X_X, inv_cov_X_X, hyps = model_bo.optimize(
            X_train, fun_target(X_train), str_initial_method='uniform')
        mu_test, sigma_test = gp.predict_test_(X_train, Y_train, X_test,
                                               cov_X_X, inv_cov_X_X, hyps)
        acq_test = acquisition.ei(mu_test.flatten(), sigma_test.flatten(),
                                  Y_train)
        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='basics_bo_' + 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='basics_bo_' + str(ind_),
                                        int_init=num_init,
                                        is_acq_axis_small=True)
Example #18
0
def test_run_single_round():
    np.random.seed(42)
    arr_range = np.array([
        [-5.0, 5.0],
    ])
    dim_X = arr_range.shape[0]
    num_X = 3
    num_iter = 10
    fun_target = lambda x: x**2 - 2.0 * x + 1.0
    model_bo = bo.BO(arr_range, debug=True)

    with pytest.raises(AssertionError) as error:
        package_target.run_single_round(1, fun_target, num_X, num_iter)
    with pytest.raises(AssertionError) as error:
        package_target.run_single_round(model_bo, 1, num_X, num_iter)
    with pytest.raises(AssertionError) as error:
        package_target.run_single_round(model_bo, fun_target, 1.2, num_iter)
    with pytest.raises(AssertionError) as error:
        package_target.run_single_round(model_bo, fun_target, num_X, 1.2)
    with pytest.raises(AssertionError) as error:
        package_target.run_single_round(model_bo, fun_target, num_X, num_iter, str_initial_method_bo=1)
    with pytest.raises(AssertionError) as error:
        package_target.run_single_round(model_bo, fun_target, num_X, num_iter, str_initial_method_bo='abc')
    with pytest.raises(AssertionError) as error:
        package_target.run_single_round(model_bo, fun_target, num_X, num_iter, str_initial_method_bo='grid')
    with pytest.raises(AssertionError) as error:
        package_target.run_single_round(model_bo, fun_target, num_X, num_iter, str_sampling_method_ao=1)
    with pytest.raises(AssertionError) as error:
        package_target.run_single_round(model_bo, fun_target, num_X, num_iter, str_sampling_method_ao='abc')
    with pytest.raises(AssertionError) as error:
        package_target.run_single_round(model_bo, fun_target, num_X, num_iter, seed=1.2)

    X_final, Y_final, time_all_final, time_surrogate_final, time_acq_final = package_target.run_single_round(model_bo, fun_target, num_X, num_iter, str_initial_method_bo='uniform')
    assert len(X_final.shape) == 2
    assert len(Y_final.shape) == 2
    assert len(time_all_final.shape) == 1
    assert len(time_surrogate_final.shape) == 1
    assert len(time_acq_final.shape) == 1
    assert X_final.shape[1] == dim_X
    assert X_final.shape[0] == Y_final.shape[0] == time_all_final.shape[0] == num_X + num_iter
    assert Y_final.shape[1] == 1
    assert time_surrogate_final.shape[0] == time_acq_final.shape[0]
Example #19
0
def test_optimize_str_modelselection_method():
    np.random.seed(42)
    arr_range_1 = np.array([
        [0.0, 10.0],
        [-2.0, 2.0],
        [-5.0, 5.0],
    ])
    dim_X = arr_range_1.shape[0]
    num_X = 5
    X = np.random.randn(num_X, dim_X)
    Y = np.random.randn(num_X, 1)

    model_bo = bo.BO(arr_range_1, str_modelselection_method='loocv')
    next_point, dict_info = model_bo.optimize(X, Y)
    next_points = dict_info['next_points']
    acquisitions = dict_info['acquisitions']
    cov_X_X = dict_info['cov_X_X']
    inv_cov_X_X = dict_info['inv_cov_X_X']
    hyps = dict_info['hyps']
    time_overall = dict_info['time_overall']
    time_gp = dict_info['time_gp']
    time_acq = dict_info['time_acq']

    assert isinstance(next_point, np.ndarray)
    assert isinstance(next_points, np.ndarray)
    assert isinstance(acquisitions, np.ndarray)
    assert isinstance(cov_X_X, np.ndarray)
    assert isinstance(inv_cov_X_X, np.ndarray)
    assert isinstance(hyps, dict)
    assert isinstance(time_overall, float)
    assert isinstance(time_gp, float)
    assert isinstance(time_acq, float)
    assert len(next_point.shape) == 1
    assert len(next_points.shape) == 2
    assert len(acquisitions.shape) == 1
    assert next_point.shape[0] == dim_X
    assert next_points.shape[1] == dim_X
    assert next_points.shape[0] == acquisitions.shape[0]
Example #20
0
def test_load_bo():
    # legitimate cases
    arr_range_1 = np.array([
        [0.0, 10.0],
        [-2.0, 2.0],
        [-5.0, 5.0],
    ])
    arr_range_2 = np.array([
        [0.0, 10.0],
        [2.0, 2.0],
        [5.0, 5.0],
    ])
    # wrong cases
    arr_range_3 = np.array([
        [20.0, 10.0],
        [-2.0, 2.0],
        [-5.0, 5.0],
    ])
    arr_range_4 = np.array([
        [20.0, 10.0],
        [4.0, 2.0],
        [10.0, 5.0],
    ])

    with pytest.raises(AssertionError) as error:
        model_bo = bo.BO(1)
    with pytest.raises(AssertionError) as error:
        model_bo = bo.BO(np.arange(0, 10))
    with pytest.raises(AssertionError) as error:
        model_bo = bo.BO(arr_range_3)
    with pytest.raises(AssertionError) as error:
        model_bo = bo.BO(arr_range_4)
    with pytest.raises(AssertionError) as error:
        model_bo = bo.BO(arr_range_1, str_cov=1)
    with pytest.raises(AssertionError) as error:
        model_bo = bo.BO(arr_range_1, str_cov='abc')
    with pytest.raises(AssertionError) as error:
        model_bo = bo.BO(arr_range_1, str_acq=1)
    with pytest.raises(AssertionError) as error:
        model_bo = bo.BO(arr_range_1, str_acq='abc')
    with pytest.raises(AssertionError) as error:
        model_bo = bo.BO(arr_range_1, is_ard='abc')
    with pytest.raises(AssertionError) as error:
        model_bo = bo.BO(arr_range_1, is_ard=1)
    with pytest.raises(AssertionError) as error:
        model_bo = bo.BO(arr_range_1, prior_mu=1)
    with pytest.raises(AssertionError) as error:
        model_bo = bo.BO(arr_range_1, str_optimizer_method_gp=1)
    with pytest.raises(AssertionError) as error:
        model_bo = bo.BO(arr_range_1, str_optimizer_method_gp='abc')
    with pytest.raises(AssertionError) as error:
        model_bo = bo.BO(arr_range_1, str_optimizer_method_bo=1)
    with pytest.raises(AssertionError) as error:
        model_bo = bo.BO(arr_range_1, str_optimizer_method_bo='abc')
    with pytest.raises(AssertionError) as error:
        model_bo = bo.BO(arr_range_1, str_modelselection_method=1)
    with pytest.raises(AssertionError) as error:
        model_bo = bo.BO(arr_range_1, str_modelselection_method='abc')
    with pytest.raises(AssertionError) as error:
        model_bo = bo.BO(arr_range_1, debug=1)

    model_bo = bo.BO(arr_range_1)
    model_bo = bo.BO(arr_range_2)
def _acquire_next_point(str_optimizer_method_bo, num_samples):
    model_bo = bo.BO(ranges, str_cov='matern52', str_acq='ei', str_optimizer_method_bo=str_optimizer_method_bo)
    next_point, _ = model_bo.optimize(X_train, Y_train, num_samples=num_samples)

    return next_point
Example #22
0
def _get_model_bo(str_optimizer_method_bo):
    model_bo = bo.BO(arr_range,
                     str_cov='matern52',
                     str_acq='ei',
                     str_optimizer_method_bo=str_optimizer_method_bo)
    return model_bo
Example #23
0
def test_optimize_is_normalized():
    np.random.seed(42)
    arr_range = np.array([
        [0.0, 10.0],
        [-2.0, 2.0],
        [-5.0, 5.0],
    ])
    dim_X = arr_range.shape[0]
    num_X = 1
    X = np.random.randn(num_X, dim_X)
    Y = np.random.randn(num_X, 1)

    model_bo = bo.BO(arr_range, str_acq='ei', is_normalized=True)
    next_point, dict_info = model_bo.optimize(X, Y)
    next_points = dict_info['next_points']
    acquisitions = dict_info['acquisitions']
    cov_X_X = dict_info['cov_X_X']
    inv_cov_X_X = dict_info['inv_cov_X_X']
    hyps = dict_info['hyps']
    time_overall = dict_info['time_overall']
    time_gp = dict_info['time_gp']
    time_acq = dict_info['time_acq']

    assert isinstance(next_point, np.ndarray)
    assert isinstance(next_points, np.ndarray)
    assert isinstance(acquisitions, np.ndarray)
    assert isinstance(cov_X_X, np.ndarray)
    assert isinstance(inv_cov_X_X, np.ndarray)
    assert isinstance(hyps, dict)
    assert isinstance(time_overall, float)
    assert isinstance(time_gp, float)
    assert isinstance(time_acq, float)
    assert len(next_point.shape) == 1
    assert len(next_points.shape) == 2
    assert len(acquisitions.shape) == 1
    assert next_point.shape[0] == dim_X
    assert next_points.shape[1] == dim_X
    assert next_points.shape[0] == acquisitions.shape[0]

    X = np.array([
        [3.0, 0.0, 1.0],
        [2.0, -1.0, 4.0],
        [9.0, 1.5, 3.0],
    ])
    Y = np.array([
        [100.0],
        [100.0],
        [100.0],
    ])

    model_bo = bo.BO(arr_range, str_acq='ei', is_normalized=True)
    next_point, dict_info = model_bo.optimize(X, Y)
    next_points = dict_info['next_points']
    acquisitions = dict_info['acquisitions']
    cov_X_X = dict_info['cov_X_X']
    inv_cov_X_X = dict_info['inv_cov_X_X']
    hyps = dict_info['hyps']
    time_overall = dict_info['time_overall']
    time_gp = dict_info['time_gp']
    time_acq = dict_info['time_acq']

    assert isinstance(next_point, np.ndarray)
    assert isinstance(next_points, np.ndarray)
    assert isinstance(acquisitions, np.ndarray)
    assert isinstance(cov_X_X, np.ndarray)
    assert isinstance(inv_cov_X_X, np.ndarray)
    assert isinstance(hyps, dict)
    assert isinstance(time_overall, float)
    assert isinstance(time_gp, float)
    assert isinstance(time_acq, float)
    assert len(next_point.shape) == 1
    assert len(next_points.shape) == 2
    assert len(acquisitions.shape) == 1
    assert next_point.shape[0] == dim_X
    assert next_points.shape[1] == dim_X
    assert next_points.shape[0] == acquisitions.shape[0]
Example #24
0
def test_optimize():
    np.random.seed(42)
    arr_range_1 = np.array([
        [0.0, 10.0],
        [-2.0, 2.0],
        [-5.0, 5.0],
    ])
    dim_X = arr_range_1.shape[0]
    num_X = 5
    X = np.random.randn(num_X, dim_X)
    Y = np.random.randn(num_X, 1)
    model_bo = bo.BO(arr_range_1)

    with pytest.raises(AssertionError) as error:
        model_bo.optimize(1, Y)
    with pytest.raises(AssertionError) as error:
        model_bo.optimize(X, 1)
    with pytest.raises(AssertionError) as error:
        model_bo.optimize(np.random.randn(num_X), Y)
    with pytest.raises(AssertionError) as error:
        model_bo.optimize(np.random.randn(num_X, 1), Y)
    with pytest.raises(AssertionError) as error:
        model_bo.optimize(X, np.random.randn(num_X))
    with pytest.raises(AssertionError) as error:
        model_bo.optimize(X, np.random.randn(num_X, 2))
    with pytest.raises(AssertionError) as error:
        model_bo.optimize(X, np.random.randn(3, 1))
    with pytest.raises(AssertionError) as error:
        model_bo.optimize(X, Y, str_initial_method_ao=1)
    with pytest.raises(AssertionError) as error:
        model_bo.optimize(X, Y, str_initial_method_ao='abc')
    with pytest.raises(AssertionError) as error:
        model_bo.optimize(X, Y, str_mlm_method=1)
    with pytest.raises(AssertionError) as error:
        model_bo.optimize(X, Y, str_mlm_method='abc')
    with pytest.raises(AssertionError) as error:
        model_bo.optimize(X, Y, int_samples='abc')

    next_point, dict_info = model_bo.optimize(X, Y)
    next_points = dict_info['next_points']
    acquisitions = dict_info['acquisitions']
    cov_X_X = dict_info['cov_X_X']
    inv_cov_X_X = dict_info['inv_cov_X_X']
    hyps = dict_info['hyps']
    time_overall = dict_info['time_overall']
    time_gp = dict_info['time_gp']
    time_acq = dict_info['time_acq']

    assert isinstance(next_point, np.ndarray)
    assert isinstance(next_points, np.ndarray)
    assert isinstance(acquisitions, np.ndarray)
    assert isinstance(cov_X_X, np.ndarray)
    assert isinstance(inv_cov_X_X, np.ndarray)
    assert isinstance(hyps, dict)
    assert isinstance(time_overall, float)
    assert isinstance(time_gp, float)
    assert isinstance(time_acq, float)
    assert len(next_point.shape) == 1
    assert len(next_points.shape) == 2
    assert len(acquisitions.shape) == 1
    assert next_point.shape[0] == dim_X
    assert next_points.shape[1] == dim_X
    assert next_points.shape[0] == acquisitions.shape[0]
Example #25
0
def test_optimize_str_acq():
    np.random.seed(42)
    arr_range_1 = np.array([
        [0.0, 10.0],
        [-2.0, 2.0],
        [-5.0, 5.0],
    ])
    dim_X = arr_range_1.shape[0]
    num_X = 5
    X = np.random.randn(num_X, dim_X)
    Y = np.random.randn(num_X, 1)

    model_bo = bo.BO(arr_range_1, str_acq='pi')
    next_point, next_points, acquisitions, cov_X_X, inv_cov_X_X, hyps = model_bo.optimize(X, Y)
    assert isinstance(next_point, np.ndarray)
    assert isinstance(next_points, np.ndarray)
    assert isinstance(acquisitions, np.ndarray)
    assert isinstance(cov_X_X, np.ndarray)
    assert isinstance(inv_cov_X_X, np.ndarray)
    assert isinstance(hyps, dict)
    assert len(next_point.shape) == 1
    assert len(next_points.shape) == 2
    assert len(acquisitions.shape) == 1
    assert next_point.shape[0] == dim_X
    assert next_points.shape[1] == dim_X
    assert next_points.shape[0] == acquisitions.shape[0]

    model_bo = bo.BO(arr_range_1, str_acq='ucb')
    next_point, next_points, acquisitions, cov_X_X, inv_cov_X_X, hyps = model_bo.optimize(X, Y)
    assert isinstance(next_point, np.ndarray)
    assert isinstance(next_points, np.ndarray)
    assert isinstance(acquisitions, np.ndarray)
    assert isinstance(cov_X_X, np.ndarray)
    assert isinstance(inv_cov_X_X, np.ndarray)
    assert isinstance(hyps, dict)
    assert len(next_point.shape) == 1
    assert len(next_points.shape) == 2
    assert len(acquisitions.shape) == 1
    assert next_point.shape[0] == dim_X
    assert next_points.shape[1] == dim_X
    assert next_points.shape[0] == acquisitions.shape[0]

    model_bo = bo.BO(arr_range_1, str_acq='aei')
    next_point, next_points, acquisitions, cov_X_X, inv_cov_X_X, hyps = model_bo.optimize(X, Y)
    assert isinstance(next_point, np.ndarray)
    assert isinstance(next_points, np.ndarray)
    assert isinstance(acquisitions, np.ndarray)
    assert isinstance(cov_X_X, np.ndarray)
    assert isinstance(inv_cov_X_X, np.ndarray)
    assert isinstance(hyps, dict)
    assert len(next_point.shape) == 1
    assert len(next_points.shape) == 2
    assert len(acquisitions.shape) == 1
    assert next_point.shape[0] == dim_X
    assert next_points.shape[1] == dim_X
    assert next_points.shape[0] == acquisitions.shape[0]

    model_bo = bo.BO(arr_range_1, str_acq='pure_exploit')
    next_point, next_points, acquisitions, cov_X_X, inv_cov_X_X, hyps = model_bo.optimize(X, Y)
    assert isinstance(next_point, np.ndarray)
    assert isinstance(next_points, np.ndarray)
    assert isinstance(acquisitions, np.ndarray)
    assert isinstance(cov_X_X, np.ndarray)
    assert isinstance(inv_cov_X_X, np.ndarray)
    assert isinstance(hyps, dict)
    assert len(next_point.shape) == 1
    assert len(next_points.shape) == 2
    assert len(acquisitions.shape) == 1
    assert next_point.shape[0] == dim_X
    assert next_points.shape[1] == dim_X
    assert next_points.shape[0] == acquisitions.shape[0]

    model_bo = bo.BO(arr_range_1, str_acq='pure_explore')
    next_point, next_points, acquisitions, cov_X_X, inv_cov_X_X, hyps = model_bo.optimize(X, Y)
    assert isinstance(next_point, np.ndarray)
    assert isinstance(next_points, np.ndarray)
    assert isinstance(acquisitions, np.ndarray)
    assert isinstance(cov_X_X, np.ndarray)
    assert isinstance(inv_cov_X_X, np.ndarray)
    assert isinstance(hyps, dict)
    assert len(next_point.shape) == 1
    assert len(next_points.shape) == 2
    assert len(acquisitions.shape) == 1
    assert next_point.shape[0] == dim_X
    assert next_points.shape[1] == dim_X
    assert next_points.shape[0] == acquisitions.shape[0]
Example #26
0
def test_optimize_many_with_random_init():
    np.random.seed(42)
    arr_range = np.array([
        [-5.0, 5.0],
    ])
    dim_X = arr_range.shape[0]
    num_X = 3
    num_iter = 10
    fun_target = lambda x: x**2 - 2.0 * x + 1.0
    model_bo = bo.BO(arr_range)

    with pytest.raises(AssertionError) as error:
        utils_bo.optimize_many_with_random_init(1, fun_target, num_X, num_iter)
    with pytest.raises(AssertionError) as error:
        utils_bo.optimize_many_with_random_init(model_bo, 1, num_X, num_iter)
    with pytest.raises(AssertionError) as error:
        utils_bo.optimize_many_with_random_init(model_bo, fun_target, 1.2,
                                                num_iter)
    with pytest.raises(AssertionError) as error:
        utils_bo.optimize_many_with_random_init(model_bo, fun_target, num_X,
                                                1.2)
    with pytest.raises(AssertionError) as error:
        utils_bo.optimize_many_with_random_init(model_bo,
                                                fun_target,
                                                num_X,
                                                num_iter,
                                                str_initial_method_bo=1)
    with pytest.raises(AssertionError) as error:
        utils_bo.optimize_many_with_random_init(model_bo,
                                                fun_target,
                                                num_X,
                                                num_iter,
                                                str_initial_method_bo='abc')
    with pytest.raises(AssertionError) as error:
        utils_bo.optimize_many_with_random_init(model_bo,
                                                fun_target,
                                                num_X,
                                                num_iter,
                                                str_initial_method_bo='grid')
    with pytest.raises(AssertionError) as error:
        utils_bo.optimize_many_with_random_init(model_bo,
                                                fun_target,
                                                num_X,
                                                num_iter,
                                                str_initial_method_ao=1)
    with pytest.raises(AssertionError) as error:
        utils_bo.optimize_many_with_random_init(model_bo,
                                                fun_target,
                                                num_X,
                                                num_iter,
                                                str_initial_method_ao='abc')
    with pytest.raises(AssertionError) as error:
        utils_bo.optimize_many_with_random_init(model_bo,
                                                fun_target,
                                                num_X,
                                                num_iter,
                                                int_seed=1.2)

    X_final, Y_final, time_final = utils_bo.optimize_many_with_random_init(
        model_bo, fun_target, num_X, num_iter, str_initial_method_bo='uniform')
    assert len(X_final.shape) == 2
    assert len(Y_final.shape) == 2
    assert len(time_final.shape) == 1
    assert X_final.shape[1] == dim_X
    assert X_final.shape[0] == Y_final.shape[0] == time_final.shape[
        0] == num_X + num_iter
    assert Y_final.shape[1] == 1