def suggest_sample(self, number_of_samples=1): """ Returns a suggested next point to evaluate. """ # Get current evaluations X_evaluated, Y_evaluated = self.model.get_XY() self.X_aux = X_evaluated self.Y_aux = Y_evaluated # Auxiliary Bayesian optimization model to run ParEGO weight = np.random.dirichlet( np.ones(len(self.Y_aux)) ) # self._sample_posterior_weight_for_chebyshev_scalarization() self.Y_aux = np.reshape(self.Y_aux, (len(self.Y_aux), self.Y_aux[0].shape[0])) scalarized_fX = chebyshev_scalarization(self.Y_aux, weight) scalarized_fX = np.reshape(scalarized_fX, (len(scalarized_fX), 1)) aux_model = MultiOutputGP(output_dim=1, exact_feval=[True], fixed_hyps=False) def aux_utility_func(y, parameter): return np.dot(parameter, y) def aux_utility_gradient(y, parameter): return parameter aux_utility_parameter_support = np.ones((1, 1)) aux_utility_parameter_prob_distribution = np.ones((1, )) aux_utility_param_distribution = UtilityDistribution( support=aux_utility_parameter_support, prob_dist=aux_utility_parameter_prob_distribution, utility_func=aux_utility_func) aux_utility = Utility( func=aux_utility_func, gradient=aux_utility_gradient, parameter_distribution=aux_utility_param_distribution, affine=True) aux_acquisition_optimizer = AcquisitionOptimizer( space=self.space, model=aux_model, utility=aux_utility, optimizer=self.optimizer, include_baseline_points=True) aux_acquisition = uEI_affine(aux_model, self.space, optimizer=aux_acquisition_optimizer, utility=aux_utility) aux_evaluator = GPyOpt.core.evaluators.Sequential(aux_acquisition) aux_sampling_policy = AcquisitionFunction(aux_model, self.space, aux_acquisition, aux_evaluator) bopl = BOPL(aux_model, self.space, sampling_policy=aux_sampling_policy, utility=aux_utility, X_init=self.X_aux, Y_init=[scalarized_fX], dynamic_utility_parameter_distribution=False) suggested_sample = bopl.suggest_next_points_to_evaluate() return suggested_sample
# True underlying utility true_underlying_utility_parameter = prior_sample_generator( 1, experiment_number)[0] print('True underlying utility parameter: {}'.format( true_underlying_utility_parameter)) def true_underlying_utility_func(y): return utility_func(y, true_underlying_utility_parameter) # Run full optimization loop bopl = BOPL(model, space, attributes, sampling_policy, utility, initial_design, true_underlying_utility_func=true_underlying_utility_func, dynamic_utility_parameter_distribution= dynamic_utility_parameter_distribution) bopl.run_optimization(max_iter=max_iter, filename=filename, report_evaluated_designs_only=True, utility_distribution_update_interval=1, compute_true_underlying_optimal_value=True, compute_integrated_optimal_values=False, compute_true_integrated_optimal_value=False) else: for i in range(1): experiment_number = i filename = [