40 if (genotype.size() != space.
size()) {
41 throw std::invalid_argument(
"DecodeGenotype: genotype.size() must equal space.size()");
44 for (
size_t i = 0; i < space.
parameters().size(); ++i) {
46 double gene = genotype[i];
47 if (gene < 0.0 || gene > 1.0) {
48 throw std::invalid_argument(
"DecodeGenotype: every gene must be in [0, 1]");
52 config[spec.name] = spec.lower + gene * (spec.upper - spec.lower);
55 double log_lower = std::log(spec.lower);
56 double log_upper = std::log(spec.upper);
57 config[spec.name] = std::exp(log_lower + gene * (log_upper - log_lower));
61 double interpolated = spec.lower + gene * (spec.upper - spec.lower);
62 int64_t rounded =
static_cast<int64_t
>(std::round(interpolated));
63 rounded = std::min(rounded,
static_cast<int64_t
>(spec.upper));
64 rounded = std::max(rounded,
static_cast<int64_t
>(spec.lower));
65 config[spec.name] = rounded;
69 size_t num_categories = spec.categories.size();
70 size_t index =
static_cast<size_t>(gene *
static_cast<double>(num_categories));
71 index = std::min(index, num_categories - 1);
72 config[spec.name] = spec.categories[index];
Describes a hyperparameter search space as an ordered list of named, typed parameters....
Definition search_space.hpp:54
size_t size() const
Number of parameters in this search space.
Definition search_space.hpp:119
const std::vector< ParameterSpec > & parameters() const
Every parameter, in the order added.
Definition search_space.hpp:116
Definition acquisition_functions.hpp:16
std::map< std::string, ConfigValue > Configuration
A concrete hyperparameter configuration: parameter name -> concrete value.
Definition search_space.hpp:46
Configuration DecodeGenotype(const SearchSpace &space, const std::vector< double > &genotype)
Decodes a unit-hypercube genotype into a Configuration using space's own declared bounds: Continuous ...
Definition hpo_genotype.hpp:39
Typed hyperparameter search-space description: named parameters, each continuous, log-uniform,...