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
97 void setMaxIterations(size_t iterations);
98
105 void setFtol(double ftolAbs, double ftolRel);
106
113 void setXtol(double xtolAbs, double xtolRel);
114
120 void setGtol(double gtol);
121
128 GslMinimizerOptimizationParams* optimiziationParams);
129
136 int minimize(gsl_vector* x, GslminimizerResult* result = nullptr,
137 bool verbose = false);
138
139 protected:
141 const double xtolAbs, const double xtolRel,
143 int checkFtol(const gsl_multimin_fdfminimizer* minimizer, double* prevF,
144 const double ftolAbs, const double ftolRel,
146 int checkGtol(const gsl_multimin_fdfminimizer* minimizer, const double gtol,
148
149 GslMinimizerOptimizationParams* optimiziationParams;
150 gsl_multimin_function_fdf objectiveFunctionDefs;
151
152 size_t maxIterations;
153 double xtolAbs, xtolRel;
154 double ftolAbs, ftolRel;
155 double gtol;
156};
157
158#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 Value of "0" makes minimization continues until a stop cr...
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