1 #ifndef HGaussianProcessSupport
2 #define HGaussianProcessSupport
3 
4 #include "GaussianProcess.hpp"
5 #include "BlackBoxData.hpp"
6 #include "VectorOperations.hpp"
7 #include <vector>
8 #include <float.h>
9 #include <cmath>
10 #include <iomanip>
11 #include <assert.h>
12 
13 class GaussianProcessSupport : protected VectorOperations {
14   private:
15     double *delta;
16     bool do_parameter_estimation = false;
17     int number_processes;
18     int nb_values = 0;
19     std::vector<int> update_at_evaluations;
20     int update_interval_length;
21     int next_update = 0;
22     int last_included = 0;
23     int best_index;
24     double delta_tmp;
25     double variance, mean;
26     double weight;
27     std::vector<double> gaussian_process_values;
28     std::vector<double> gaussian_process_noise;
29     std::vector< std::vector<double> > gaussian_process_nodes;
30     std::vector<int> gaussian_process_active_index;
31     std::vector<std::shared_ptr<GaussianProcess>> gaussian_processes;
32     std::vector<double> rescaled_node;
33 
34     std::vector<std::vector<double>> best_index_analytic_information;
35 
36     bool use_approx_gaussian_process = false;
37     bool approx_gaussian_process_active = false;
38     bool use_analytic_smoothing = false;
39     const double u_ratio = 0.15;
40     const int min_nb_u = 2;
41     int cur_nb_u_points = 0;
42     double gaussian_process_delta_factor = 3.;
43     std::vector<double> bootstrap_estimate;
44     int smoothing_ctr;
45 
46 private:
47 
48     int NOEXIT;
49 
50     void update_gaussian_processes_for_agp( BlackBoxData&);
51 
52     static double fill_width_objective(std::vector<double> const &x,
53                                        std::vector<double> &grad,
54                                        void *data);
55     static void ball_constraint(unsigned int m, double* c, unsigned n, const double *x, double *grad, void *data);
56 
57     //void do_resample_u(); //TODO check if able to remove this one
58 
59  protected:
60     virtual double compute_fill_width(BlackBoxData& evaluations);
61     void update_gaussian_processes ( BlackBoxData& );
62     void update_gaussian_processes_for_gp (BlackBoxData&);
63 
64   public:
65     void initialize ( const int, const int, double&, BlackBoxBaseClass *blackbox,
66                       std::vector<int> const&, int , const std::string, const int exitconst, const bool use_analytic_smoothing);
67 
68     int smooth_data ( BlackBoxData& );
69 
70     double evaluate_objective ( BlackBoxData const& );
71 
72     void evaluate_gaussian_process_at(const int&, std::vector<double> const&, double&, double&);
73 
74     const std::vector<std::vector<double>> &get_nodes_at(const int&) const;
75 
76     void get_induced_nodes_at(const int idx, std::vector<std::vector<double>> &induced_nodes);
77 
78     void set_constraint_ball_center(const std::vector<double>& center);
79 
80     void set_constraint_ball_radius(const double& radius);
81 
82     const std::vector<std::vector<double>> &getBest_index_analytic_information() const;
83 
84     void set_gaussian_process_delta(double gaussian_process_delta);
85 };
86 
87 #endif
88