32 std::uniform_real_distribution<double> dist(spec.lower, spec.upper);
33 config[spec.name] = dist(rng);
37 std::uniform_real_distribution<double> dist(std::log(spec.lower), std::log(spec.upper));
38 config[spec.name] = std::exp(dist(rng));
42 std::uniform_int_distribution<int64_t> dist(
static_cast<int64_t
>(spec.lower),
43 static_cast<int64_t
>(spec.upper));
44 config[spec.name] = dist(rng);
48 std::uniform_int_distribution<size_t> dist(0, spec.categories.size() - 1);
49 config[spec.name] = spec.categories[dist(rng)];
72 size_t points_per_continuous_dimension) {
73 if (points_per_continuous_dimension < 2) {
74 throw std::invalid_argument(
"GridSample: points_per_continuous_dimension must be >= 2");
77 std::vector<std::vector<ConfigValue>> axis_values;
78 axis_values.reserve(space.
parameters().size());
80 std::vector<ConfigValue> values;
81 const double n_minus_1 =
static_cast<double>(points_per_continuous_dimension - 1);
84 for (
size_t i = 0; i < points_per_continuous_dimension; ++i) {
85 double t =
static_cast<double>(i) / n_minus_1;
86 values.push_back(spec.lower + t * (spec.upper - spec.lower));
91 double log_lower = std::log(spec.lower);
92 double log_upper = std::log(spec.upper);
93 for (
size_t i = 0; i < points_per_continuous_dimension; ++i) {
94 double t =
static_cast<double>(i) / n_minus_1;
95 values.push_back(std::exp(log_lower + t * (log_upper - log_lower)));
100 for (int64_t v =
static_cast<int64_t
>(spec.lower); v <= static_cast<int64_t>(spec.upper); ++v) {
106 for (
const auto& category : spec.categories) {
107 values.push_back(category);
112 axis_values.push_back(std::move(values));
115 std::vector<Configuration> grid;
117 for (
size_t param_idx = 0; param_idx < space.
parameters().size(); ++param_idx) {
118 const auto& name = space.
parameters()[param_idx].name;
119 const auto& values = axis_values[param_idx];
120 std::vector<Configuration> next_grid;
121 next_grid.reserve(grid.size() * values.size());
122 for (
const auto& partial : grid) {
123 for (
const auto& value : values) {
125 extended[name] = value;
126 next_grid.push_back(std::move(extended));
129 grid = std::move(next_grid);
const std::vector< ParameterSpec > & parameters() const
Every parameter, in the order added.
Definition search_space.hpp:116
std::vector< Configuration > GridSample(const SearchSpace &space, size_t points_per_continuous_dimension)
Enumerates the full cartesian-product grid over space.
Definition hpo_sampling.hpp:71
std::map< std::string, ConfigValue > Configuration
A concrete hyperparameter configuration: parameter name -> concrete value.
Definition search_space.hpp:46
Configuration RandomSample(const SearchSpace &space, RNG &rng)
Draws one configuration uniformly at random from space: Continuous parameters uniform over [lower,...
Definition hpo_sampling.hpp:27