pulsatrix
Loading...
Searching...
No Matches
search_space.hpp
Go to the documentation of this file.
1
10#pragma once
11
12#include <cstdint>
13#include <map>
14#include <stdexcept>
15#include <string>
16#include <variant>
17#include <vector>
18
19namespace pulsatrix {
20
23
31 std::string name;
33 double lower = 0.0;
34 double upper = 0.0;
35 std::vector<std::string> categories;
36};
37
43using ConfigValue = std::variant<double, int64_t, std::string>;
44
46using Configuration = std::map<std::string, ConfigValue>;
47
55public:
61 void AddContinuous(std::string name, double lower, double upper) {
62 ValidateNewName(name);
63 if (!(lower < upper)) {
64 throw std::invalid_argument("SearchSpace::AddContinuous: lower must be < upper");
65 }
66 parameters_.push_back(ParameterSpec{std::move(name), ParameterKind::Continuous, lower,
67 upper, {}});
68 }
69
76 void AddLogUniform(std::string name, double lower, double upper) {
77 ValidateNewName(name);
78 if (lower <= 0.0) {
79 throw std::invalid_argument("SearchSpace::AddLogUniform: lower must be > 0");
80 }
81 if (!(lower < upper)) {
82 throw std::invalid_argument("SearchSpace::AddLogUniform: lower must be < upper");
83 }
84 parameters_.push_back(ParameterSpec{std::move(name), ParameterKind::LogUniform, lower,
85 upper, {}});
86 }
87
92 void AddInteger(std::string name, int64_t lower, int64_t upper) {
93 ValidateNewName(name);
94 if (lower > upper) {
95 throw std::invalid_argument("SearchSpace::AddInteger: lower must be <= upper");
96 }
97 parameters_.push_back(ParameterSpec{std::move(name), ParameterKind::Integer,
98 static_cast<double>(lower),
99 static_cast<double>(upper), {}});
100 }
101
106 void AddCategorical(std::string name, std::vector<std::string> categories) {
107 ValidateNewName(name);
108 if (categories.empty()) {
109 throw std::invalid_argument("SearchSpace::AddCategorical: categories must be non-empty");
110 }
111 parameters_.push_back(
112 ParameterSpec{std::move(name), ParameterKind::Categorical, 0.0, 0.0, std::move(categories)});
113 }
114
116 [[nodiscard]] const std::vector<ParameterSpec>& parameters() const { return parameters_; }
117
119 [[nodiscard]] size_t size() const { return parameters_.size(); }
120
125 [[nodiscard]] const ParameterSpec& Get(const std::string& name) const {
126 for (const auto& p : parameters_) {
127 if (p.name == name) {
128 return p;
129 }
130 }
131 throw std::out_of_range("SearchSpace::Get: no parameter named '" + name + "'");
132 }
133
135 [[nodiscard]] bool Contains(const std::string& name) const {
136 for (const auto& p : parameters_) {
137 if (p.name == name) {
138 return true;
139 }
140 }
141 return false;
142 }
143
144private:
145 void ValidateNewName(const std::string& name) const {
146 if (Contains(name)) {
147 throw std::invalid_argument("SearchSpace: parameter name '" + name + "' already exists");
148 }
149 }
150
151 std::vector<ParameterSpec> parameters_;
152};
153
154} // namespace pulsatrix
Describes a hyperparameter search space as an ordered list of named, typed parameters....
Definition search_space.hpp:54
bool Contains(const std::string &name) const
Whether a parameter with this name exists.
Definition search_space.hpp:135
void AddCategorical(std::string name, std::vector< std::string > categories)
Adds a categorical parameter, one of categories.
Definition search_space.hpp:106
size_t size() const
Number of parameters in this search space.
Definition search_space.hpp:119
void AddLogUniform(std::string name, double lower, double upper)
Adds a log-uniform parameter sampled from [lower, upper] on a log scale (e.g. learning rates,...
Definition search_space.hpp:76
const std::vector< ParameterSpec > & parameters() const
Every parameter, in the order added.
Definition search_space.hpp:116
const ParameterSpec & Get(const std::string &name) const
Looks up a parameter by name.
Definition search_space.hpp:125
void AddContinuous(std::string name, double lower, double upper)
Adds a continuous parameter sampled from [lower, upper].
Definition search_space.hpp:61
void AddInteger(std::string name, int64_t lower, int64_t upper)
Adds an integer parameter sampled from [lower, upper] (inclusive both ends).
Definition search_space.hpp:92
Definition acquisition_functions.hpp:16
std::map< std::string, ConfigValue > Configuration
A concrete hyperparameter configuration: parameter name -> concrete value.
Definition search_space.hpp:46
std::variant< double, int64_t, std::string > ConfigValue
A concrete value for one parameter – a double (Continuous/LogUniform), an int64_t (Integer),...
Definition search_space.hpp:43
ParameterKind
Which family of values a named parameter draws from.
Definition search_space.hpp:22
One named parameter's description: its kind plus the bounds/categories that kind needs....
Definition search_space.hpp:30
std::string name
Definition search_space.hpp:31
std::vector< std::string > categories
Definition search_space.hpp:35
ParameterKind kind
Definition search_space.hpp:32
double upper
Definition search_space.hpp:34
double lower
Definition search_space.hpp:33