Deterministic Gaussian Sampling
Loading...
Searching...
No Matches
gsl_minimizer.h
1#ifndef GSL_MINIMIZER_H
2#define GSL_MINIMIZER_H
3
4#include <cassert>
5#include <chrono>
6#include <cmath>
7#include <iostream>
8
9#include "gsl/gsl_multimin.h"
10#include "gsl/gsl_vector.h"
11
19 public:
20 GslMinimizerOptimizationParams(size_t L, size_t N) : L(L), N(N) {
21 assert(L > 0);
22 assert(N > 0);
23 }
24
25 size_t L;
26 size_t N;
27};
28
33 double initalStepSize = 0.00;
34 double stepTolerance = 0.00;
35 double lastXtolAbs = 0.00;
36 double lastXtolRel = 0.00;
37 double lastFtolAbs = 0.00;
38 double lastFtolRel = 0.00;
39 double lastGtol = 0.00;
40 double xtolAbs = 0.00;
41 double xtolRel = 0.00;
42 double ftolAbs = 0.00;
43 double ftolRel = 0.00;
44 double gtol = 0.00;
45 size_t iterations = 0;
46 size_t maxIterations = 0;
47 size_t elapsedTimeMicro = 0;
48};
49std::ostream& operator<<(std::ostream& os, const GslminimizerResult& s);
50
56 public:
72 gsl_minimizer(size_t maxIterations, double xtolAbs, double xtolRel,
73 double ftolAbs, double ftolRel, double gtol,
74 GslMinimizerOptimizationParams* optimiziationParams,
75 double (*f)(const gsl_vector* x, void* params),
76 void (*df)(const gsl_vector* x, void* params, gsl_vector* df),
77 void (*fdf)(const gsl_vector* x, void* params, double* f,
78 gsl_vector* df))
79 : maxIterations(maxIterations),
80 xtolAbs(xtolAbs),
81 xtolRel(xtolRel),
82 ftolAbs(ftolAbs),
83 ftolRel(ftolRel),
84 gtol(gtol) {
85 objectiveFunctionDefs.f = f;
86 objectiveFunctionDefs.df = df;
87 objectiveFunctionDefs.fdf = fdf;
88 setOptimiziationParams(optimiziationParams);
89 }
90
96 void setMaxIterations(size_t iterations);
97
104 void setFtol(double ftolAbs, double ftolRel);
105
112 void setXtol(double xtolAbs, double xtolRel);
113
119 void setGtol(double gtol);
120
127 GslMinimizerOptimizationParams* optimiziationParams);
128
135 int minimize(gsl_vector* x, GslminimizerResult* result = nullptr,
136 bool verbose = false);
137
138 protected:
140 const double xtolAbs, const double xtolRel,
142 int checkFtol(const gsl_multimin_fdfminimizer* minimizer, double* prevF,
143 const double ftolAbs, const double ftolRel,
145 int checkGtol(const gsl_multimin_fdfminimizer* minimizer, const double gtol,
147
148 GslMinimizerOptimizationParams* optimiziationParams;
149 gsl_multimin_function_fdf objectiveFunctionDefs;
150
151 size_t maxIterations;
152 double xtolAbs, xtolRel;
153 double ftolAbs, ftolRel;
154 double gtol;
155};
156
157#endif // GSL_MINIMIZER_H
Definition dirac_to_dirac_approx_short.h:9
helper class to use GSL fdf minimizer
Definition gsl_minimizer.h:55
void setFtol(double ftolAbs, double ftolRel)
set the absolute and relative tolerance for x
Definition gsl_minimizer.cpp:57
gsl_minimizer(size_t maxIterations, double xtolAbs, double xtolRel, double ftolAbs, double ftolRel, double gtol, GslMinimizerOptimizationParams *optimiziationParams, double(*f)(const gsl_vector *x, void *params), void(*df)(const gsl_vector *x, void *params, gsl_vector *df), void(*fdf)(const gsl_vector *x, void *params, double *f, gsl_vector *df))
Construct a new gsl minimizer object.
Definition gsl_minimizer.h:72
void setGtol(double gtol)
set the tolerance for gradient-norm
Definition gsl_minimizer.cpp:67
void setMaxIterations(size_t iterations)
set the maximum number of iterations to run
Definition gsl_minimizer.cpp:53
void setOptimiziationParams(GslMinimizerOptimizationParams *optimiziationParams)
set the optimization passed to the f/df/fdf-functions
Definition gsl_minimizer.cpp:69
void setXtol(double xtolAbs, double xtolRel)
set the absolute and relative tolerance for x
Definition gsl_minimizer.cpp:62
int minimize(gsl_vector *x, GslminimizerResult *result=nullptr, bool verbose=false)
minimize the function f with the given parameters
Definition gsl_minimizer.cpp:77
base struct minimizer needs to be setup with
Definition gsl_minimizer.h:18
struct to hold the result of the minimization
Definition gsl_minimizer.h:32