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, 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
71 const std::vector<FeatureVector::ContainerTraversalEstimatorOption> &containerTraversalEstimatorOptions,
72 const std::vector<DataLayoutOption> &dataLayoutOptions, const std::vector<Newton3Option> &newton3Options,
73 const NumberSet<double> &cellSizeFactors, const InteractionTypeOption &interactionType);
74
76
85 const std::vector<FeatureVector::ContainerTraversalEstimatorOption> &containerTraversalEstimatorOptions,
86 const std::vector<DataLayoutOption> &dataLayoutOptions, const std::vector<Newton3Option> &newton3Options,
87 const NumberSet<double> &cellSizeFactors);
88
93 [[nodiscard]] size_t getOneHotDims() const;
94
99 [[nodiscard]] const std::array<int, tunableDiscreteDims> &getDiscreteRestrictions() const;
100
106 [[nodiscard]] Eigen::VectorXd oneHotEncode(const FeatureVector &vec) const;
107
113 [[nodiscard]] FeatureVector oneHotDecode(const Eigen::VectorXd &vec);
114
123 [[nodiscard]] std::pair<Eigen::VectorXi, Eigen::VectorXd> convertToCluster(const FeatureVector &vec,
124 double iteration) const;
125
132 [[nodiscard]] FeatureVector convertFromCluster(const std::pair<Eigen::VectorXi, Eigen::VectorXd> &vec);
133
140 [[nodiscard]] std::vector<std::pair<Eigen::VectorXi, double>> clusterNeighboursManhattan1(
141 const Eigen::VectorXi &target);
142
149 [[nodiscard]] std::vector<std::pair<Eigen::VectorXi, double>> clusterNeighboursManhattan1Container(
150 const Eigen::VectorXi &target);
151
158 std::vector<FeatureVector> lhsSampleFeatures(size_t n, Random &rng) const;
159
168 std::vector<Eigen::VectorXd> lhsSampleFeatureCluster(size_t n, Random &rng, double iteration) const;
169
170 private:
179 [[nodiscard]] std::pair<DiscreteDimensionType, ContinuousDimensionType> convertToTunable(
180 const FeatureVector &vec) const;
181
189 [[nodiscard]] FeatureVector convertFromTunable(const DiscreteDimensionType &discreteValues,
190 const ContinuousDimensionType &continuousValues) const;
191
198 template <typename T>
199 static size_t getIndex(const std::vector<T> &list, const T &value) {
200 for (size_t i = 0; i < list.size(); ++i) {
201 if (list[i] == value) return i;
202 }
203
204 utils::ExceptionHandler::exception("FeatureVectorEncoder.getIndex: Value not allowed!");
205 return list.size();
206 }
207
208 std::vector<FeatureVector::ContainerTraversalEstimatorOption> _containerTraversalEstimatorOptions{};
209 std::vector<DataLayoutOption> _dataLayoutOptions{};
210 std::vector<Newton3Option> _newton3Options{};
211 InteractionTypeOption _interactionType;
215 std::array<int, tunableDiscreteDims> _discreteRestrictions{};
216
220 std::array<std::unique_ptr<NumberSet<double>>, tunableContinuousDims> _continuousRestrictions{};
221
225 size_t _oneHotDims{0};
226};
227
228} // 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:68
void setAllowedOptions(const std::vector< FeatureVector::ContainerTraversalEstimatorOption > &containerTraversalEstimatorOptions, const std::vector< DataLayoutOption > &dataLayoutOptions, const std::vector< Newton3Option > &newton3Options, const NumberSet< double > &cellSizeFactors)
Set allowed options.
Definition: FeatureVectorEncoder.cpp:21
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:240
Eigen::VectorXd oneHotEncode(const FeatureVector &vec) const
Encode FeatureVector to Eigen::VectorXd using one-hot-encoding.
Definition: FeatureVectorEncoder.cpp:47
std::pair< Eigen::VectorXi, Eigen::VectorXd > convertToCluster(const FeatureVector &vec, double iteration) const
Convert Feature vector to cluster representation for GaussianCluster.
Definition: FeatureVectorEncoder.cpp:110
std::vector< std::pair< Eigen::VectorXi, double > > clusterNeighboursManhattan1Container(const Eigen::VectorXi &target)
Get cluster-encoded neighbours of given target.
Definition: FeatureVectorEncoder.cpp:168
size_t getOneHotDims() const
Get the dimensions of a one-hot encoded vector.
Definition: FeatureVectorEncoder.cpp:40
FeatureVector convertFromCluster(const std::pair< Eigen::VectorXi, Eigen::VectorXd > &vec)
Inverse of convertToCluster.
Definition: FeatureVectorEncoder.cpp:125
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:142
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:43
FeatureVectorEncoder()
Default Constructor.
std::vector< FeatureVector > lhsSampleFeatures(size_t n, Random &rng) const
Create n latin-hypercube-samples from given featureSpace.
Definition: FeatureVectorEncoder.cpp:207
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:63
This is the main namespace of AutoPas.
Definition: AutoPasDecl.h:32