AutoPas  3.0.0
Loading...
Searching...
No Matches
GaussianCluster.h
Go to the documentation of this file.
1
7#pragma once
8
9#include <Eigen/Core>
10#include <utility>
11
16#include "autopas/utils/Math.h"
21
22namespace autopas {
23
31 // number of samples to find optimal hyperparameters
32 static constexpr size_t hp_sample_size = 500;
33 // number of hyperparameters
34 static constexpr size_t hp_size = 25;
35
36 public:
55 };
56
67 GaussianCluster(const std::vector<int> &dimRestriction, size_t continuousDims, WeightFunction weightFun, double sigma,
69 const std::string &outputSuffix = "");
70
72
77 [[nodiscard]] const std::vector<int> &getDimensions() const;
78
84 void setDimensions(const std::vector<int> &newValue);
85
92 [[nodiscard]] const GaussianProcess &getCluster(size_t index1D) const;
93
97 void clear();
98
103 [[nodiscard]] size_t numEvidence() const;
104
112 void addEvidence(const GaussianModelTypes::VectorDiscrete &inputDiscrete,
113 const GaussianModelTypes::VectorContinuous &inputContinuous, double output);
114
121 void addEvidence(const GaussianModelTypes::VectorPairDiscreteContinuous &input, double output);
122
128
137 [[nodiscard]] std::vector<GaussianModelTypes::VectorAcquisition> sampleAcquisition(
138 AcquisitionFunctionOption af, const GaussianModelTypes::NeighbourFunction &neighbourFun,
139 const std::vector<GaussianModelTypes::VectorContinuous> &continuousSamples) const;
140
148 const std::vector<GaussianModelTypes::VectorContinuous> &continuousSamples) const;
154
164 AcquisitionFunctionOption af, const GaussianModelTypes::NeighbourFunction &neighbourFun,
165 const std::vector<GaussianModelTypes::VectorContinuous> &continuousSamples) const;
166
175 [[nodiscard]] std::vector<GaussianModelTypes::VectorPairDiscreteContinuous> sampleOrderedByAcquisition(
176 AcquisitionFunctionOption af, const GaussianModelTypes::NeighbourFunction &neighbourFun,
177 const std::vector<GaussianModelTypes::VectorContinuous> &continuousSamples) const;
178
186
187 private:
191 void initClusters();
192
198 [[nodiscard]] size_t getIndex(const GaussianModelTypes::VectorDiscrete &x) const;
199
208 void discreteIncrement(GaussianModelTypes::VectorDiscrete &x) const;
209
215 [[nodiscard]] std::tuple<std::vector<double>, std::vector<double>, std::vector<double>> precalculateDistributions(
216 const GaussianModelTypes::VectorContinuous &continuousTuple) const;
217
225 [[nodiscard]] std::vector<double> precalculateAcquisitions(AcquisitionFunctionOption af,
226 const std::vector<double> &means,
227 const std::vector<double> &vars) const;
228
234 [[nodiscard]] GaussianModelTypes::NeighboursWeights initNeighbourWeights(
235 const GaussianModelTypes::NeighbourFunction &neighbourFun) const;
236
245 void updateNeighbourWeights(GaussianModelTypes::NeighboursWeights &neighbourWeights, const std::vector<double> &means,
246 const std::vector<double> &vars, const std::vector<double> &stddevs) const;
247
251 std::vector<int> _dimRestriction;
255 const size_t _continuousDims;
256
260 std::vector<GaussianProcess> _clusters;
261
265 std::vector<GaussianModelTypes::VectorDiscrete> _discreteVectorMap;
266
270 WeightFunction _weightFun;
271
275 double _evidenceMinValue;
279 double _evidenceMaxValue;
287 size_t _numEvidence;
288
292 const double _sigma;
293
294 Random &_rng;
295
299 std::unique_ptr<GaussianClusterLogger> _logger;
300};
301} // namespace autopas
Model to predicts the output of a blackbox function f(x) for given input x.
Definition: GaussianCluster.h:30
void setDimensions(const std::vector< int > &newValue)
Change the number of cluster in all dimension.
Definition: GaussianCluster.cpp:30
std::vector< GaussianModelTypes::VectorPairDiscreteContinuous > sampleOrderedByAcquisition(AcquisitionFunctionOption af, const GaussianModelTypes::NeighbourFunction &neighbourFun, const std::vector< GaussianModelTypes::VectorContinuous > &continuousSamples) const
Generate all possible combinations of discrete tuples and continuous tuples in samples and order them...
Definition: GaussianCluster.cpp:205
const GaussianProcess & getCluster(size_t index1D) const
Get the underlying GaussianProcess of a cluster.
Definition: GaussianCluster.cpp:35
void setVectorToStringFun(const GaussianModelTypes::VectorToStringFun &fun)
Change the used function to convert from vector to string.
Definition: GaussianCluster.cpp:184
static std::string defaultVecToString(const GaussianModelTypes::VectorPairDiscreteContinuous &vec)
Default function used to convert vectors to readable strings.
Definition: GaussianCluster.cpp:229
void logDebugGraph(const GaussianModelTypes::NeighbourFunction &neighbourFun, const std::vector< GaussianModelTypes::VectorContinuous > &continuousSamples) const
Generate all possible combinations of discrete tuples and continuous tuples in samples and calculate ...
Definition: GaussianCluster.cpp:166
std::vector< GaussianModelTypes::VectorAcquisition > sampleAcquisition(AcquisitionFunctionOption af, const GaussianModelTypes::NeighbourFunction &neighbourFun, const std::vector< GaussianModelTypes::VectorContinuous > &continuousSamples) const
Generate all possible combinations of discrete tuples and continuous tuples in samples and calculate ...
Definition: GaussianCluster.cpp:116
GaussianModelTypes::VectorPairDiscreteContinuous getEvidenceMax() const
Get the evidence with the highest output value.
Definition: GaussianCluster.cpp:108
void clear()
Discard all evidence.
Definition: GaussianCluster.cpp:39
WeightFunction
Different weight functions between clusters.
Definition: GaussianCluster.h:40
@ evidenceMatchingProbabilityGM
geometric mean of probability densitiy over all evidence in neighbouring cluster if provided to the t...
Definition: GaussianCluster.h:45
@ wasserstein2
Wasserstein-2 distance of normal distributions of cluster given a continuous cluster.
Definition: GaussianCluster.h:54
@ evidenceMatchingScaledProbabilityGM
geometric mean of scaled probability densitiy over all evidence in neighbouring cluster if provided t...
Definition: GaussianCluster.h:50
void addEvidence(const GaussianModelTypes::VectorDiscrete &inputDiscrete, const GaussianModelTypes::VectorContinuous &inputContinuous, double output)
Provide a input-output pair as evidence.
Definition: GaussianCluster.cpp:48
const std::vector< int > & getDimensions() const
Get the number of clusters in each dimension.
Definition: GaussianCluster.cpp:28
size_t numEvidence() const
Get the number of evidence provided.
Definition: GaussianCluster.cpp:46
GaussianModelTypes::VectorAcquisition sampleAcquisitionMax(AcquisitionFunctionOption af, const GaussianModelTypes::NeighbourFunction &neighbourFun, const std::vector< GaussianModelTypes::VectorContinuous > &continuousSamples) const
Generate all possible combinations of discrete tuples and continuous tuples in samples and returns th...
Definition: GaussianCluster.cpp:188
Gaussian process is a stochastical model.
Definition: GaussianProcess.h:30
Class for random algorithms.
Definition: Random.h:22
std::pair< std::pair< VectorDiscrete, VectorContinuous >, double > VectorAcquisition
store pairs of vectors and corresponding acquisition
Definition: GaussianModelTypes.h:30
Eigen::VectorXd VectorContinuous
Type of a continuous tuple.
Definition: GaussianModelTypes.h:25
Eigen::VectorXi VectorDiscrete
Type of a discrete tuple.
Definition: GaussianModelTypes.h:21
std::vector< std::vector< std::tuple< size_t, double, double > > > NeighboursWeights
for each vector store a vector of all neighbours, their corresponding prior weight and final weight
Definition: GaussianModelTypes.h:40
std::function< std::string(const VectorPairDiscreteContinuous &)> VectorToStringFun
function to convert a vector to a string.
Definition: GaussianModelTypes.h:50
std::pair< VectorDiscrete, VectorContinuous > VectorPairDiscreteContinuous
Vector described by a discrete and a continuous part.
Definition: GaussianModelTypes.h:45
std::function< std::vector< std::pair< VectorDiscrete, double > >(VectorDiscrete)> NeighbourFunction
function that generate all neighbouring vectors of given vector with weights
Definition: GaussianModelTypes.h:35
This is the main namespace of AutoPas.
Definition: AutoPasDecl.h:32