Sequential Quantum Gate Decomposer  v1.9.3
Powerful decomposition of general unitarias into one- and two-qubit gates gates
Bayes_Opt.h
Go to the documentation of this file.
1 /*
2 Copyright 2020 Peter Rakyta, Ph.D.
3 
4 Licensed under the Apache License, Version 2.0 (the "License");
5 you may not use this file except in compliance with the License.
6 You may obtain a copy of the License at
7 
8  http://www.apache.org/licenses/LICENSE-2.0
9 
10 Unless required by applicable law or agreed to in writing, software
11 distributed under the License is distributed on an "AS IS" BASIS,
12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 See the License for the specific language governing permissions and
14 limitations under the License.
15 
16 */
17 
18 # ifndef __BAYES_OPT__H
19 # define __BAYES_OPT__H
20 
21 #include "matrix_real.h"
22 #include <vector>
23 #include <random>
24 #ifdef __cplusplus
25 extern "C"
26 {
27 #endif
28 int LAPACKE_dposv(int matrix_layout, char uplo, int n, int nrhs, double* A, int LDA, double* B, int LDB);
29 
30 #ifdef __cplusplus
31 }
32 #endif
33 
38 double HS_partial_optimization_problem( Matrix_real parameters, void* void_params);
39 
40 
46 
47 
52 void HS_partial_optimization_problem_combined( Matrix_real parameters, void* void_params, double* f0, Matrix_real& grad);
53 
54 
55 
59 class Bayes_Opt {
60  public:
62  double mu_0;
63 
66  protected:
69 
72 
74  double num_precision;
75 
77  double alpha0;
78 
80  double (*costfnc) (Matrix_real x, void * params);
81 
83  void* meta_data;
84 
86  std::vector<Matrix_real> x_prev;
87 
88 
89  //previous cost functions
90  std::vector<double> f_prev;
91 
92 
93  //current minimum
95 
96  //also known as n0
98 
99  std::mt19937 gen;
100  protected:
101 
102 
103 
104  static void optimization_problem_combined(Matrix_real x, void* void_instance, double* f0, Matrix_real& grad );
105 
106  static double optimization_problem(Matrix_real x_Powell, void* void_instance);
107 
108  double expected_improvement(double mu_n, double sigma_n);
109 
110  void expected_improvement_combined(double mu_n, double sigma_n, Matrix_real& grad_mu, Matrix_real& grad_sigma, double* f, Matrix_real& grad);
111 
112  void calculate_conditional_distribution(Matrix_real x, Matrix_real cov_x, double& mu_n, double& sigma2_n);
113 
114  void calculate_conditional_distribution_combined(Matrix_real x, Matrix_real cov_x, Matrix_real cov_x_grad, Matrix_real cov_self_grad, double& mu_n, double& sigma2_n, Matrix_real& grad_mu, Matrix_real& grad_sigma);
115 
116  double kernel(Matrix_real x0, Matrix_real x1);
117 
118  void kernel_combined(Matrix_real x0, Matrix_real x, double& f, Matrix_real& grad, int grad_var, bool self);
119 
120  double pdf(double mu, double sigma);
121 
122  double cdf(double mu, double sigma);
123 
124  double grad_pdf(double mu, double sigma, double grad_mu, double grad_sigma);
125 
126  void update_covariance(Matrix_real cov_new);
127 
128  public:
129  double Start_Optimization(Matrix_real& x, int max_iterations_in);
130 
131  Bayes_Opt(double (* f_pointer) (Matrix_real, void *), void* meta_data_in);
132 
133  ~Bayes_Opt();
134 };
135 
137  protected:
140 
143 
146 
148  double (*costfnc) (Matrix_real x, void * params);
149 
151  void* meta_data;
152 
153  //current minimum
155 
157 
158  int start;
159 
160  std::mt19937 gen;
161  protected:
162  static double optimization_problem(Matrix_real x_Beam, void* void_instance);
163  public:
164  Bayes_Opt_Beam(double (* f_pointer) (Matrix_real, void *), void* meta_data_in, int start_in, Matrix_real parameters_original_in);
165 
166  double Start_Optimization(Matrix_real& x, int max_iterations_in);
167 
168  ~Bayes_Opt_Beam();
169 
170 };
171 
172 # endif
std::vector< double > f_prev
Definition: Bayes_Opt.h:90
double current_maximum
Definition: Bayes_Opt.h:154
void HS_partial_optimization_problem_grad(Matrix_real parameters, void *void_params, Matrix_real &grad)
???????????????
Matrix_real covariance
covariance matrix
Definition: Bayes_Opt.h:65
long maximal_iterations
maximal count of iterations during the optimization
Definition: Bayes_Opt.h:142
double num_precision
numerical precision used in the calculations
Definition: Bayes_Opt.h:145
A class implementing the BayesOpt algorithm as seen in: https://browse.arxiv.org/pdf/1807.02811.pdf.
Definition: Bayes_Opt.h:59
double HS_partial_optimization_problem(Matrix_real parameters, void *void_params)
???????????????
double current_maximum
Definition: Bayes_Opt.h:94
void HS_partial_optimization_problem_combined(Matrix_real parameters, void *void_params, double *f0, Matrix_real &grad)
???????????????
std::mt19937 gen
Definition: Bayes_Opt.h:99
std::mt19937 gen
Definition: Bayes_Opt.h:160
double expected_improvement(double mu_n, double sigma_n)
double grad_pdf(double mu, double sigma, double grad_mu, double grad_sigma)
double Start_Optimization(Matrix_real &x, int max_iterations_in)
Matrix_real parameters
Definition: Bayes_Opt.h:156
int initial_samples
Definition: Bayes_Opt.h:97
double alpha0
amplitude of the kernel
Definition: Bayes_Opt.h:77
long maximal_iterations
maximal count of iterations during the optimization
Definition: Bayes_Opt.h:71
void * meta_data
additional data needed to evaluate the cost function
Definition: Bayes_Opt.h:151
double mu_0
constant for the mean function
Definition: Bayes_Opt.h:62
Bayes_Opt(double(*f_pointer)(Matrix_real, void *), void *meta_data_in)
Constructor of the class.
double kernel(Matrix_real x0, Matrix_real x1)
double num_precision
numerical precision used in the calculations
Definition: Bayes_Opt.h:74
int variable_num
number of independent variables in the problem
Definition: Bayes_Opt.h:139
void update_covariance(Matrix_real cov_new)
double(* costfnc)(Matrix_real x, void *params)
function pointer to evaluate the cost function and its gradient vector
Definition: Bayes_Opt.h:80
std::vector< Matrix_real > x_prev
previous parameters
Definition: Bayes_Opt.h:86
double cdf(double mu, double sigma)
double pdf(double mu, double sigma)
int LAPACKE_dposv(int matrix_layout, char uplo, int n, int nrhs, double *A, int LDA, double *B, int LDB)
~Bayes_Opt()
Destructor of the class.
void calculate_conditional_distribution(Matrix_real x, Matrix_real cov_x, double &mu_n, double &sigma2_n)
static void optimization_problem_combined(Matrix_real x, void *void_instance, double *f0, Matrix_real &grad)
void expected_improvement_combined(double mu_n, double sigma_n, Matrix_real &grad_mu, Matrix_real &grad_sigma, double *f, Matrix_real &grad)
void kernel_combined(Matrix_real x0, Matrix_real x, double &f, Matrix_real &grad, int grad_var, bool self)
int variable_num
number of independent variables in the problem
Definition: Bayes_Opt.h:68
void * meta_data
additional data needed to evaluate the cost function
Definition: Bayes_Opt.h:83
void calculate_conditional_distribution_combined(Matrix_real x, Matrix_real cov_x, Matrix_real cov_x_grad, Matrix_real cov_self_grad, double &mu_n, double &sigma2_n, Matrix_real &grad_mu, Matrix_real &grad_sigma)
Class to store data of complex arrays and its properties.
Definition: matrix_real.h:39
static double optimization_problem(Matrix_real x_Powell, void *void_instance)