AutoPas  3.0.0
Loading...
Searching...
No Matches
FeatureVectorEncoder.h
Go to the documentation of this file.
1
7#pragma once
8
9#include <Eigen/Core>
10#include <numeric>
11#include <optional>
12#include <vector>
13
14#include "FeatureVector.h"
16
17namespace autopas {
18
26 enum class DiscreteIndices { containerTraversalEstimator, dataLayout, newton3, vecPattern, TOTALNUMBER };
27
31 enum class ContinuousIndices { cellSizeFactor, TOTALNUMBER };
32
33 public:
37 static constexpr size_t tunableDiscreteDims{static_cast<size_t>(DiscreteIndices::TOTALNUMBER)};
38
42 static constexpr size_t tunableContinuousDims{static_cast<size_t>(ContinuousIndices::TOTALNUMBER)};
43
44 private:
49 using DiscreteDimensionType = std::array<int, tunableDiscreteDims>;
54 using ContinuousDimensionType = std::array<double, tunableContinuousDims>;
55
56 public:
61
72 const std::vector<FeatureVector::ContainerTraversalEstimatorOption> &containerTraversalEstimatorOptions,
73 const std::vector<DataLayoutOption> &dataLayoutOptions, const std::vector<Newton3Option> &newton3Options,
74 const NumberSet<double> &cellSizeFactors, const InteractionTypeOption &interactionType,
75 const std::vector<VectorizationPatternOption> &vecPatternOptions);
76
78
88 const std::vector<FeatureVector::ContainerTraversalEstimatorOption> &containerTraversalEstimatorOptions,
89 const std::vector<DataLayoutOption> &dataLayoutOptions, const std::vector<Newton3Option> &newton3Options,
90 const NumberSet<double> &cellSizeFactors, const std::vector<VectorizationPatternOption> &vecPatternOptions);
91
96 [[nodiscard]] size_t getOneHotDims() const;
97
102 [[nodiscard]] const std::array<int, tunableDiscreteDims> &getDiscreteRestrictions() const;
103
109 [[nodiscard]] Eigen::VectorXd oneHotEncode(const FeatureVector &vec) const;
110
116 [[nodiscard]] FeatureVector oneHotDecode(const Eigen::VectorXd &vec);
117
126 [[nodiscard]] std::pair<Eigen::VectorXi, Eigen::VectorXd> convertToCluster(const FeatureVector &vec,
127 double iteration) const;
128
135 [[nodiscard]] FeatureVector convertFromCluster(const std::pair<Eigen::VectorXi, Eigen::VectorXd> &vec);
136
143 [[nodiscard]] std::vector<std::pair<Eigen::VectorXi, double>> clusterNeighboursManhattan1(
144 const Eigen::VectorXi &target);
145
152 [[nodiscard]] std::vector<std::pair<Eigen::VectorXi, double>> clusterNeighboursManhattan1Container(
153 const Eigen::VectorXi &target);
154
161 std::vector<FeatureVector> lhsSampleFeatures(size_t n, Random &rng) const;
162
171 std::vector<Eigen::VectorXd> lhsSampleFeatureCluster(size_t n, Random &rng, double iteration) const;
172
173 private:
182 [[nodiscard]] std::pair<DiscreteDimensionType, ContinuousDimensionType> convertToTunable(
183 const FeatureVector &vec) const;
184
192 [[nodiscard]] FeatureVector convertFromTunable(const DiscreteDimensionType &discreteValues,
193 const ContinuousDimensionType &continuousValues) const;
194
201 template <typename T>
202 static size_t getIndex(const std::vector<T> &list, const T &value) {
203 for (size_t i = 0; i < list.size(); ++i) {
204 if (list[i] == value) return i;
205 }
206
207 utils::ExceptionHandler::exception("FeatureVectorEncoder.getIndex: Value not allowed!");
208 return list.size();
209 }
210
211 std::vector<FeatureVector::ContainerTraversalEstimatorOption> _containerTraversalEstimatorOptions{};
212 std::vector<DataLayoutOption> _dataLayoutOptions{};
213 std::vector<Newton3Option> _newton3Options{};
214 std::vector<VectorizationPatternOption> _vecPatternOptions{};
215 InteractionTypeOption _interactionType;
219 std::array<int, tunableDiscreteDims> _discreteRestrictions{};
220
224 std::array<std::unique_ptr<NumberSet<double>>, tunableContinuousDims> _continuousRestrictions{};
225
229 size_t _oneHotDims{0};
230};
231
232} // namespace autopas
Encoder to convert FeatureVector from and to Eigen::Vector.
Definition: FeatureVectorEncoder.h:22
static constexpr size_t tunableContinuousDims
Number of tunable continuous dimensions.
Definition: FeatureVectorEncoder.h:42
FeatureVector oneHotDecode(const Eigen::VectorXd &vec)
Decode one-hot-encoded VectorXd to FeatureVector.
Definition: FeatureVectorEncoder.cpp:73
std::vector< Eigen::VectorXd > lhsSampleFeatureCluster(size_t n, Random &rng, double iteration) const
Create n latin-hypercube-samples from the continuous featureSpace and append a value representing the...
Definition: FeatureVectorEncoder.cpp:245
Eigen::VectorXd oneHotEncode(const FeatureVector &vec) const
Encode FeatureVector to Eigen::VectorXd using one-hot-encoding.
Definition: FeatureVectorEncoder.cpp:52
std::pair< Eigen::VectorXi, Eigen::VectorXd > convertToCluster(const FeatureVector &vec, double iteration) const
Convert Feature vector to cluster representation for GaussianCluster.
Definition: FeatureVectorEncoder.cpp:115
std::vector< std::pair< Eigen::VectorXi, double > > clusterNeighboursManhattan1Container(const Eigen::VectorXi &target)
Get cluster-encoded neighbours of given target.
Definition: FeatureVectorEncoder.cpp:173
size_t getOneHotDims() const
Get the dimensions of a one-hot encoded vector.
Definition: FeatureVectorEncoder.cpp:45
FeatureVector convertFromCluster(const std::pair< Eigen::VectorXi, Eigen::VectorXd > &vec)
Inverse of convertToCluster.
Definition: FeatureVectorEncoder.cpp:130
std::vector< std::pair< Eigen::VectorXi, double > > clusterNeighboursManhattan1(const Eigen::VectorXi &target)
Get cluster-encoded neighbours of given target with fixed weight.
Definition: FeatureVectorEncoder.cpp:147
static constexpr size_t tunableDiscreteDims
Number of tunable discrete dimensions.
Definition: FeatureVectorEncoder.h:37
const std::array< int, tunableDiscreteDims > & getDiscreteRestrictions() const
Get the number of allowed options of each discrete dimension.
Definition: FeatureVectorEncoder.cpp:48
FeatureVectorEncoder()
Default Constructor.
void setAllowedOptions(const std::vector< FeatureVector::ContainerTraversalEstimatorOption > &containerTraversalEstimatorOptions, const std::vector< DataLayoutOption > &dataLayoutOptions, const std::vector< Newton3Option > &newton3Options, const NumberSet< double > &cellSizeFactors, const std::vector< VectorizationPatternOption > &vecPatternOptions)
Set allowed options.
Definition: FeatureVectorEncoder.cpp:23
std::vector< FeatureVector > lhsSampleFeatures(size_t n, Random &rng) const
Create n latin-hypercube-samples from given featureSpace.
Definition: FeatureVectorEncoder.cpp:212
FeatureVector representation of a Configuration.
Definition: FeatureVector.h:21
Virtual class describing a finite or infinite set of numbers.
Definition: NumberSet.h:22
Class for random algorithms.
Definition: Random.h:22
static void exception(const Exception e)
Handle an exception derived by std::exception.
Definition: ExceptionHandler.h:64
This is the main namespace of AutoPas.
Definition: AutoPasDecl.h:34