Sequential Quantum Gate Decomposer  v1.9.6
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 
53 
54 
60 
61 
66 void HS_partial_optimization_problem_combined( Matrix_real parameters, void* void_params, double* f0, Matrix_real& grad);
67 
68 
73 void HS_partial_optimization_problem_cos_combined( Matrix_real parameters, void* void_params, double* f0, Matrix_real& grad);
74 
75 
79 class Bayes_Opt {
80  public:
82  double mu_0;
83 
86  protected:
89 
92 
94  double num_precision;
95 
97  double alpha0;
98 
100  double (*costfnc) (Matrix_real x, void * params);
101 
103  void* meta_data;
104 
106  std::vector<Matrix_real> x_prev;
107 
108 
109  //previous cost functions
110  std::vector<double> f_prev;
111 
112 
113  //current minimum
115 
116  //also known as n0
118 
119  std::mt19937 gen;
120  protected:
121 
122 
123 
124  static void optimization_problem_combined(Matrix_real x, void* void_instance, double* f0, Matrix_real& grad );
125 
126  static double optimization_problem(Matrix_real x_Powell, void* void_instance);
127 
128  double expected_improvement(double mu_n, double sigma_n);
129 
130  void expected_improvement_combined(double mu_n, double sigma_n, Matrix_real& grad_mu, Matrix_real& grad_sigma, double* f, Matrix_real& grad);
131 
132  void calculate_conditional_distribution(Matrix_real x, Matrix_real cov_x, double& mu_n, double& sigma2_n);
133 
134  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);
135 
136  double kernel(Matrix_real x0, Matrix_real x1);
137 
138  void kernel_combined(Matrix_real x0, Matrix_real x, double& f, Matrix_real& grad, int grad_var, bool self);
139 
140  double pdf(double mu, double sigma);
141 
142  double cdf(double mu, double sigma);
143 
144  double grad_pdf(double mu, double sigma, double grad_mu, double grad_sigma);
145 
146  void update_covariance(Matrix_real cov_new);
147 
148  public:
149  double Start_Optimization(Matrix_real& x, int max_iterations_in);
150 
151  Bayes_Opt(double (* f_pointer) (Matrix_real, void *), void* meta_data_in);
152 
153  ~Bayes_Opt();
154 };
155 
157  protected:
160 
163 
166 
168  double (*costfnc) (Matrix_real x, void * params);
169 
171  void* meta_data;
172 
173  //current minimum
175 
177 
178  int start;
179 
180  std::mt19937 gen;
181  protected:
182  static double optimization_problem(Matrix_real x_Beam, void* void_instance);
183  public:
184  Bayes_Opt_Beam(double (* f_pointer) (Matrix_real, void *), void* meta_data_in, int start_in, Matrix_real parameters_original_in);
185 
186  double Start_Optimization(Matrix_real& x, int max_iterations_in);
187 
188  ~Bayes_Opt_Beam();
189 
190 };
191 
192 # endif
void HS_partial_optimization_problem_cos_combined(Matrix_real parameters, void *void_params, double *f0, Matrix_real &grad)
???????????????
std::vector< double > f_prev
Definition: Bayes_Opt.h:110
double current_maximum
Definition: Bayes_Opt.h:174
void HS_partial_optimization_problem_grad(Matrix_real parameters, void *void_params, Matrix_real &grad)
???????????????
Matrix_real covariance
covariance matrix
Definition: Bayes_Opt.h:85
long maximal_iterations
maximal count of iterations during the optimization
Definition: Bayes_Opt.h:162
double num_precision
numerical precision used in the calculations
Definition: Bayes_Opt.h:165
A class implementing the BayesOpt algorithm as seen in: https://browse.arxiv.org/pdf/1807.02811.pdf.
Definition: Bayes_Opt.h:79
double HS_partial_optimization_problem(Matrix_real parameters, void *void_params)
???????????????
double current_maximum
Definition: Bayes_Opt.h:114
void HS_partial_optimization_problem_combined(Matrix_real parameters, void *void_params, double *f0, Matrix_real &grad)
???????????????
std::mt19937 gen
Definition: Bayes_Opt.h:119
std::mt19937 gen
Definition: Bayes_Opt.h:180
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:176
int initial_samples
Definition: Bayes_Opt.h:117
double alpha0
amplitude of the kernel
Definition: Bayes_Opt.h:97
long maximal_iterations
maximal count of iterations during the optimization
Definition: Bayes_Opt.h:91
void * meta_data
additional data needed to evaluate the cost function
Definition: Bayes_Opt.h:171
double mu_0
constant for the mean function
Definition: Bayes_Opt.h:82
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:94
int variable_num
number of independent variables in the problem
Definition: Bayes_Opt.h:159
void update_covariance(Matrix_real cov_new)
list sigma
Definition: GQML_test.py:51
double(* costfnc)(Matrix_real x, void *params)
function pointer to evaluate the cost function and its gradient vector
Definition: Bayes_Opt.h:100
std::vector< Matrix_real > x_prev
previous parameters
Definition: Bayes_Opt.h:106
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.
double HS_partial_optimization_problem_cos(Matrix_real parameters, void *void_params)
???????????????
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:88
void * meta_data
additional data needed to evaluate the cost function
Definition: Bayes_Opt.h:103
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)
void HS_partial_optimization_problem_cos_grad(Matrix_real parameters, void *void_params, Matrix_real &grad)
???????????????
Class to store data of complex arrays and its properties.
Definition: matrix_real.h:41
static double optimization_problem(Matrix_real x_Powell, void *void_instance)