Hyperiso 1.0.3
Modular flavour-physics calculations, Wilson coefficients and statistical inference
Loading...
Searching...
No Matches
optimization.h
Go to the documentation of this file.
1#ifndef OPTIMIZATION_H
2#define OPTIMIZATION_H
3
4#include <gsl/gsl_multimin.h>
5#include <gsl/gsl_min.h>
6#include "functions.h"
7#include "gsl_wrappers.h"
8
10 std::size_t simplex_max_iter {500};
11 std::size_t bfgs_max_iter {500};
12 double switch_tol {1e-3};
13 double final_tol {1e-5};
17};
18
20 int status;
21 std::vector<double> argmin;
22 double min;
23};
24
26 std::array<double, 2> bracket;
27 double start;
28 double tol {1e-3};
29 std::size_t max_iter {1000};
30 bool sorted {false};
31};
32
34 int status;
35 double argmin;
36 double min;
37};
38
39// MAJ : use GSL for consistency and make return type MinimizationResult
40bool find_bracket(const RealValuedFunction& f, double x_min, double x_max, double &a, double &b, int n_samples = 100);
41double brent_root(const RealValuedFunction& f, double a, double b, double xtol = 1e-6, double ftol = 1e-6, int max_it = 100);
42
43template<typename Container, typename U>
44std::size_t bisect_array(const Container& X, const U& x_0) {
45 auto it = std::lower_bound(X.begin(), X.end(), x_0);
46
47 if (it == X.begin()) return 0;
48 if (it == X.end()) return X.size() - 1;
49
50 return it - X.begin(); // faster than std::distance
51}
52
54
55MinimizationResult minimize_NM(RealValuedForm f, const std::vector<double>& x0, const std::vector<double>& scales, const MinimizationContext& context);
56MinimizationResult minimize_BFGS(RealValuedForm f, const std::vector<double>& x0, const std::vector<double>& scales, const MinimizationContext& context);
57MinimizationResult minimize_NM(ScaledForm f, const std::vector<double>& t0, const MinimizationContext& context);
58MinimizationResult minimize_BFGS(ScaledForm f, const std::vector<double>& t0, const MinimizationContext& context);
59MinimizationResult minimize_combined(RealValuedForm f, const std::vector<double>& x0, const std::vector<double>& scales, const MinimizationContext& context);
60
61#endif // OPTIMIZATION_H
std::function< double(double)> RealValuedFunction
Definition functions.h:10
std::function< double(std::vector< double >)> RealValuedForm
Definition functions.h:11
MinimizationResult minimize_NM(RealValuedForm f, const std::vector< double > &x0, const std::vector< double > &scales, const MinimizationContext &context)
MinimizationResult minimize_BFGS(RealValuedForm f, const std::vector< double > &x0, const std::vector< double > &scales, const MinimizationContext &context)
bool find_bracket(const RealValuedFunction &f, double x_min, double x_max, double &a, double &b, int n_samples=100)
ScalarMinimizationResult minimize_scalar(RealValuedFunction f, const ScalarMinimizationContext &context)
double brent_root(const RealValuedFunction &f, double a, double b, double xtol=1e-6, double ftol=1e-6, int max_it=100)
MinimizationResult minimize_combined(RealValuedForm f, const std::vector< double > &x0, const std::vector< double > &scales, const MinimizationContext &context)
std::size_t bisect_array(const Container &X, const U &x_0)
double f(double x)
Wilson special function f depending on x.
std::size_t bfgs_max_iter
std::size_t simplex_max_iter
double simplex_initial_step_size
double bfgs_initial_step_size
std::vector< double > argmin
std::array< double, 2 > bracket