PineForge HPO 0.1.0
Native hyperparameter optimization for PineForge strategies
Loading...
Searching...
No Matches
sampler.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <cstdint>
4#include <memory>
5#include <optional>
6#include <random>
7#include <vector>
8
10
11namespace pineforge::hpo {
12
14class Sampler {
15public:
16 virtual ~Sampler() = default;
17
19 virtual std::optional<Candidate> next() = 0;
21 virtual void reset() = 0;
23 virtual std::uint64_t generated() const noexcept = 0;
24};
25
27class GridSampler final : public Sampler {
28public:
30 explicit GridSampler(SearchSpace space);
31
33 std::optional<Candidate> next() override;
35 void reset() override;
37 std::uint64_t generated() const noexcept override { return generated_; }
39 std::uint64_t total_candidates() const noexcept { return total_candidates_; }
40
41private:
42 SearchSpace space_;
43 std::uint64_t total_candidates_ = 0;
44 std::uint64_t generated_ = 0;
45};
46
51class RandomSampler final : public Sampler {
52public:
54 RandomSampler(SearchSpace space, std::uint64_t seed, std::uint64_t max_candidates = 0);
55
57 std::optional<Candidate> next() override;
59 void reset() override;
61 std::uint64_t generated() const noexcept override { return generated_; }
63 std::uint64_t seed() const noexcept { return seed_; }
64
65private:
66 SearchSpace space_;
67 std::uint64_t seed_;
68 std::uint64_t max_candidates_;
69 std::uint64_t generated_ = 0;
70 std::mt19937_64 engine_;
71};
72
75 Maximize,
76 Minimize,
77};
78
88
90const char* candidate_policy_name(CandidatePolicy policy) noexcept;
91
95 std::uint64_t startup_trials = 10;
96
101 std::uint64_t ei_candidates = 24;
102
104 double gamma_fraction = 0.10;
109 std::uint64_t gamma_cap = 25;
110
112 double prior_weight = 1.0;
113
119 bool constant_liar = true;
120};
121
132class TpeSampler final : public Sampler {
133public:
140 std::uint64_t seed,
141 ObjectiveDirection direction = ObjectiveDirection::Maximize,
142 std::uint64_t max_candidates = 0,
143 TpeSamplerConfig config = {},
144 CandidatePolicy candidate_policy = CandidatePolicy::SamplerDefault);
145 ~TpeSampler() override;
146
147 TpeSampler(const TpeSampler&) = delete;
148 TpeSampler& operator=(const TpeSampler&) = delete;
150 TpeSampler& operator=(TpeSampler&&) noexcept;
151
153 std::optional<Candidate> next() override;
154
158 std::optional<Candidate> ask();
159
162 void tell(std::uint64_t candidate_id, double objective_value);
163
166 void abandon(std::uint64_t candidate_id);
167
172 void reset() override;
174 std::uint64_t generated() const noexcept override;
176 std::uint64_t completed() const noexcept;
178 std::uint64_t outstanding() const noexcept;
180 std::uint64_t duplicate_proposals_skipped() const noexcept;
182 std::uint64_t seed() const noexcept { return seed_; }
184 ObjectiveDirection direction() const noexcept { return direction_; }
186 const TpeSamplerConfig& config() const noexcept { return config_; }
188 CandidatePolicy candidate_policy() const noexcept { return candidate_policy_; }
189
190private:
191 class Impl;
192
193 SearchSpace space_;
194 std::uint64_t seed_;
195 ObjectiveDirection direction_;
196 std::uint64_t max_candidates_;
197 TpeSamplerConfig config_;
198 CandidatePolicy candidate_policy_;
199 std::unique_ptr<Impl> impl_;
200};
201
208class DlibGlobalSampler final : public Sampler {
209public:
216 std::uint64_t seed,
217 ObjectiveDirection direction = ObjectiveDirection::Maximize,
218 std::uint64_t max_candidates = 0);
220
224 DlibGlobalSampler& operator=(DlibGlobalSampler&&) noexcept;
225
227 std::optional<Candidate> next() override;
228
230 std::optional<Candidate> ask();
231
236 void tell(std::uint64_t candidate_id, double objective_value);
237
240 void abandon(std::uint64_t candidate_id);
241
243 void reset() override;
245 std::uint64_t generated() const noexcept override;
247 std::uint64_t completed() const noexcept;
249 std::uint64_t outstanding() const noexcept;
251 std::uint64_t seed() const noexcept { return seed_; }
253 ObjectiveDirection direction() const noexcept { return direction_; }
254
255private:
256 class Impl;
257
258 SearchSpace space_;
259 std::uint64_t seed_;
260 ObjectiveDirection direction_;
261 std::uint64_t max_candidates_;
262 std::unique_ptr<Impl> impl_;
263};
264
265} // namespace pineforge::hpo
Adaptive derivative-free optimizer backed by dlib::global_function_search.
Definition sampler.hpp:208
DlibGlobalSampler(const DlibGlobalSampler &)=delete
DlibGlobalSampler & operator=(const DlibGlobalSampler &)=delete
DlibGlobalSampler(DlibGlobalSampler &&) noexcept
ObjectiveDirection direction() const noexcept
Returns the configured optimization direction.
Definition sampler.hpp:253
DlibGlobalSampler(SearchSpace space, std::uint64_t seed, ObjectiveDirection direction=ObjectiveDirection::Maximize, std::uint64_t max_candidates=0)
Constructs a dlib global sampler; max_candidates == 0 means unbounded generation.
Lazy exhaustive sampler over a finite SearchSpace in mixed-radix order.
Definition sampler.hpp:27
std::optional< Candidate > next() override
Returns each finite candidate once, then std::nullopt.
std::uint64_t total_candidates() const noexcept
Returns the exact finite search-space cardinality.
Definition sampler.hpp:39
std::uint64_t generated() const noexcept override
Returns the number of candidates issued since construction or reset.
Definition sampler.hpp:37
GridSampler(SearchSpace space)
void reset() override
Rewinds enumeration to ordinal zero.
Seeded independent sampler with replacement.
Definition sampler.hpp:51
std::uint64_t seed() const noexcept
Returns the reproducibility seed.
Definition sampler.hpp:63
void reset() override
Reseeds the generator and restores the original sequence.
std::optional< Candidate > next() override
Samples one independent candidate, or returns std::nullopt at the configured limit.
std::uint64_t generated() const noexcept override
Returns the number of candidates issued since construction or reset.
Definition sampler.hpp:61
RandomSampler(SearchSpace space, std::uint64_t seed, std::uint64_t max_candidates=0)
Constructs a random sampler; max_candidates == 0 means unbounded generation.
Minimal pull-based interface shared by candidate samplers.
Definition sampler.hpp:14
virtual std::uint64_t generated() const noexcept=0
Returns the number of candidates issued since construction or the last reset.
virtual std::optional< Candidate > next()=0
Returns the next candidate, or std::nullopt when the configured budget is exhausted.
virtual ~Sampler()=default
virtual void reset()=0
Restores the sampler's seeded initial state.
Ordered product of named dimensions with validation and finite-space codecs.
Independent, single-objective Tree-structured Parzen Estimator sampler.
Definition sampler.hpp:132
TpeSampler(SearchSpace space, std::uint64_t seed, ObjectiveDirection direction=ObjectiveDirection::Maximize, std::uint64_t max_candidates=0, TpeSamplerConfig config={}, CandidatePolicy candidate_policy=CandidatePolicy::SamplerDefault)
Constructs a native TPE sampler; max_candidates == 0 means unbounded generation.
CandidatePolicy candidate_policy() const noexcept
Returns the configured uniqueness/coverage policy.
Definition sampler.hpp:188
TpeSampler & operator=(const TpeSampler &)=delete
TpeSampler(TpeSampler &&) noexcept
ObjectiveDirection direction() const noexcept
Returns the configured optimization direction.
Definition sampler.hpp:184
TpeSampler(const TpeSampler &)=delete
const TpeSamplerConfig & config() const noexcept
Returns the immutable TPE tuning configuration.
Definition sampler.hpp:186
ObjectiveDirection
Direction used to rank a scalar objective.
Definition sampler.hpp:74
@ Maximize
Larger finite values are better.
@ Minimize
Smaller finite values are better.
CandidatePolicy
Uniqueness and coverage contract applied to sampler proposals.
Definition sampler.hpp:83
@ SamplerDefault
Preserve native sampler behavior, including possible duplicates.
@ WithoutReplacement
Issue at most the requested number of unique finite candidates.
@ Exhaustive
Require a budget equal to cardinality and cover every candidate.
const char * candidate_policy_name(CandidatePolicy policy) noexcept
Returns the stable StudySpec spelling of policy.
Complete parameter assignment proposed by a sampler.
Definition types.hpp:36
Tuning parameters for the native product-density TPE implementation.
Definition sampler.hpp:93