Esempio n. 1
0
    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
Esempio n. 2
0
        # 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 = [