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
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')
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)
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)
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]
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)
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]
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)
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)
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]
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]
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
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
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]
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]
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]
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