MaCh3  2.8.0
Reference Guide
PSO.h
Go to the documentation of this file.
1 #pragma once
2 
3 // C++ includes
4 #include <algorithm>
5 #include <functional>
6 #include <numeric>
7 
8 // MaCh3 includes
10 
16 class particle{
17  public:
19  particle(const std::vector<double>& pos, const std::vector<double>& vel) : position(pos), velocity(vel){};
21  virtual ~particle() {};
22 
23  void set_position(const std::vector<double>& new_position) {
24  position = new_position;
25  };
26 
27  std::vector<double> get_position() {
28  return position;
29  };
30 
31  void set_personal_best_position(const std::vector<double>& new_pos){
32  personal_best_position = new_pos;
33  };
34 
35  std::vector<double> get_personal_best_position(){
37  };
38 
39  void set_personal_best_value(const double new_val){
40  personal_best_value = new_val;
41  };
42 
44  return personal_best_value;
45  };
46 
47  std::vector<double> get_velocity(){
48  return velocity;
49  };
50 
51  void set_velocity(const std::vector<double>& new_velocity){
52  velocity = new_velocity;
53  };
54 
55  double get_value(){
56  return curr_value;
57  };
58  void set_value(const double val){
59  curr_value = val;
60  };
61 
62  private:
63  std::vector<double> position;
64  std::vector<double> velocity;
66  double curr_value;
67  std::vector<double> personal_best_position;
68 };
69 
78 class PSO : public LikelihoodFit {
79  public:
81  PSO(Manager * const fitMan);
83  virtual ~PSO() {};
84 
86  return best_particle;
87  }
89  best_particle = n;
90  }
91 
92  std::vector<std::vector<double>> bisection(const std::vector<double>& position, const double minimum,
93  const double range, const double precision);
94  std::vector<std::vector<double>> calc_uncertainty(const std::vector<double>& position, const double minimum);
95  void init();
96  void uncertainty_check(const std::vector<double>& previous_pos);
97  void run();
98  void WriteOutput();
100  void RunMCMC() final;
101  double CalcChi2(const double* x) final;
103  double rastriginFunc(const double* x);
104  double swarmIterate();
105 
106  std::vector<double> vector_multiply(std::vector<double> velocity, const double mul){
107  // std::bind1st deprecated since C++11, removed in c++17
108  // transform(velocity.begin(),velocity.end(),velocity.begin(),std::bind1st(std::multiplies<double>(),mul));
109  std::transform(velocity.begin(), velocity.end(), velocity.begin(),
110  std::bind(std::multiplies<double>(), mul, std::placeholders::_1));
111  return velocity;
112  };
113 
114  std::vector<double> vector_add(const std::vector<double>& v1, const std::vector<double>& v2){
115  std::vector<double> v3;
116  transform(v1.begin(), v1.end(), v2.begin(), back_inserter(v3), std::plus<double>());
117  return v3;
118  };
119  std::vector<double> vector_subtract(const std::vector<double>& v1, const std::vector<double>& v2){
120  std::vector<double> v3 ;
121  transform(v1.begin(), v1.end(), v2.begin(), back_inserter(v3), std::minus<double>());
122  return v3;
123  };
124  std::vector<double> three_vector_addition(std::vector<double> vec1,
125  const std::vector<double>& vec2,
126  const std::vector<double>& vec3) {
127  for (size_t i = 0; i < vec1.size(); ++i) {
128  vec1[i] += vec2[i] + vec3[i];
129  }
130  return vec1;
131  };
132  std::vector<double> four_vector_addition(std::vector<double> vec1, const std::vector<double>& vec2,
133  const std::vector<double>& vec3, const std::vector<double>& vec4){
134  for (size_t i = 0; i < vec1.size(); ++i) {
135  vec1[i] += vec2[i] + vec3[i] + vec4[i];
136  }
137  return vec1;
138  };
139 
140  double CalcChi(std::vector<double> x){
141  double* a = &x[0];
142  return CalcChi2(a);
143  };
144 
145  private:
147  double fBestValue;
148  std::vector<double> prior;
149  std::vector<bool> fixed;
150  std::vector<double> ranges_max;
151  std::vector<double> ranges_min;
152  std::vector<std::unique_ptr<particle>> system;
153  double fInertia;
154  double fOne;
155  double fTwo;
156  double fConvergence;
159  std::vector<std::vector<double> > uncertainties;
160 
162  std::vector<std::vector<double>> paramlist;
163  constexpr static const int kMaxParticles = 10000;
165  int fDim;
166 };
167 
Manager * fitMan
The manager for configuration handling.
Definition: FitterBase.h:120
Implementation of base Likelihood Fit class, it is mostly responsible for likelihood calculation whil...
Definition: LikelihoodFit.h:6
The manager class is responsible for managing configurations and settings.
Definition: Manager.h:17
Class PSO, consist of a vector of object Class Particle and global best Takes in the size (number of ...
Definition: PSO.h:78
virtual ~PSO()
Destructor.
Definition: PSO.h:83
std::vector< std::unique_ptr< particle > > system
Definition: PSO.h:152
std::vector< double > ranges_max
Definition: PSO.h:150
double fConstriction
Definition: PSO.h:158
void init()
Definition: PSO.cpp:58
std::vector< double > vector_subtract(const std::vector< double > &v1, const std::vector< double > &v2)
Definition: PSO.h:119
std::vector< std::vector< double > > bisection(const std::vector< double > &position, const double minimum, const double range, const double precision)
Definition: PSO.cpp:158
double fTwo
Definition: PSO.h:155
std::vector< std::vector< double > > paramlist
Definition: PSO.h:162
std::vector< double > vector_multiply(std::vector< double > velocity, const double mul)
Definition: PSO.h:106
std::vector< double > four_vector_addition(std::vector< double > vec1, const std::vector< double > &vec2, const std::vector< double > &vec3, const std::vector< double > &vec4)
Definition: PSO.h:132
particle * get_best_particle()
Definition: PSO.h:85
std::vector< bool > fixed
Definition: PSO.h:149
double fInertia
Definition: PSO.h:153
int fParticles
Definition: PSO.h:161
double fOne
Definition: PSO.h:154
int fIterations
Definition: PSO.h:157
std::vector< std::vector< double > > calc_uncertainty(const std::vector< double > &position, const double minimum)
Definition: PSO.cpp:242
std::vector< double > three_vector_addition(std::vector< double > vec1, const std::vector< double > &vec2, const std::vector< double > &vec3)
Definition: PSO.h:124
particle * best_particle
Definition: PSO.h:143
void set_best_particle(particle *n)
Definition: PSO.h:88
double vel[kMaxParticles]
Definition: PSO.h:164
PSO(Manager *const fitMan)
constructor
Definition: PSO.cpp:6
constexpr static const int kMaxParticles
Definition: PSO.h:163
double fConvergence
Definition: PSO.h:156
double CalcChi(std::vector< double > x)
Definition: PSO.h:140
std::vector< double > vector_add(const std::vector< double > &v1, const std::vector< double > &v2)
Definition: PSO.h:114
double fBestValue
Definition: PSO.h:147
std::vector< std::vector< double > > uncertainties
Definition: PSO.h:159
std::vector< double > ranges_min
Definition: PSO.h:151
int fDim
Definition: PSO.h:165
void RunMCMC() final
Actual implementation of PSO Fit algorithm.
Definition: PSO.cpp:26
void run()
Definition: PSO.cpp:404
double CalcChi2(const double *x) final
Chi2 calculation over all included samples and syst objects.
Definition: PSO.cpp:536
void WriteOutput()
Definition: PSO.cpp:449
double swarmIterate()
Definition: PSO.cpp:344
double rastriginFunc(const double *x)
Evaluates the Rastrigin function for a given parameter values.
Definition: PSO.cpp:546
std::vector< double > prior
Definition: PSO.h:148
void uncertainty_check(const std::vector< double > &previous_pos)
Definition: PSO.cpp:306
Class particle - stores the position, velocity and personal best With functions which move particle a...
Definition: PSO.h:16
void set_personal_best_value(const double new_val)
Definition: PSO.h:39
std::vector< double > position
Definition: PSO.h:60
void set_personal_best_position(const std::vector< double > &new_pos)
Definition: PSO.h:31
double curr_value
Definition: PSO.h:66
std::vector< double > get_velocity()
Definition: PSO.h:47
virtual ~particle()
Destructor.
Definition: PSO.h:21
double get_personal_best_value()
Definition: PSO.h:43
particle(const std::vector< double > &pos, const std::vector< double > &vel)
Constructor.
Definition: PSO.h:19
std::vector< double > velocity
Definition: PSO.h:64
std::vector< double > personal_best_position
Definition: PSO.h:67
std::vector< double > get_personal_best_position()
Definition: PSO.h:35
double get_value()
Definition: PSO.h:55
std::vector< double > get_position()
Definition: PSO.h:27
void set_position(const std::vector< double > &new_position)
Definition: PSO.h:23
double personal_best_value
Definition: PSO.h:65
void set_velocity(const std::vector< double > &new_velocity)
Definition: PSO.h:51
void set_value(const double val)
Definition: PSO.h:58