19 template<
typename HYP>
26 typename HYP::data_t*
data;
29 HillClimbing(HYP& h0,
typename HYP::data_t* d,
size_t n=1,
size_t is=100) : N(n), inner_samples(is), data(d) {
33 h0.compute_posterior(*data);
40 CERR "# Warning: HillClimbing without restarts is probably a bad idea because it will only climb once." ENDL;
44 size_t steps_since_improvement = 0;
48 if(ctl.
steps > 0 and samples > ctl.
steps)
break;
54 steps_since_improvement = 0;
57 auto current = top.
best().restart();
59 current.compute_posterior(*data);
60 if(current.posterior == -
infinity)
continue;
66 top = std::move(newTop);
76 for(
auto& h : top.
sorted(
false)) {
84 size_t mysamples = std::ceil(inner_samples /
double(N));
87 if(mysamples == 0)
break;
91 for(
size_t i=0;i<mysamples;i++) {
93 if(ctl.
steps > 0 and samples++ > ctl.
steps)
break;
96 auto pr = h.propose();
99 auto [proposal, fb] = pr.value();
103 proposal.compute_posterior(*data);
111 if(proposal.posterior > top.
best().posterior) {
112 steps_since_improvement = 0;
115 steps_since_improvement++;
123 top = std::move(newTop);
unsigned long steps
Definition: Control.h:24
size_t N
Definition: HillClimbing.h:24
std::vector< T > sorted(bool increasing=true) const
Sorted values.
Definition: TopN.h:266
const T & best() const
Definition: TopN.h:219
generator< HYP & > run(Control ctl)
Definition: HillClimbing.h:37
void set_size(size_t n)
Definition: TopN.h:78
double T
Definition: HillClimbing.h:27
void start()
Definition: Control.h:54
constexpr double infinity
Definition: Numerics.h:20
Definition: generator.hpp:21
HYP::data_t * data
Definition: HillClimbing.h:26
#define CERR
Definition: IO.h:23
TopN< HYP > top
Definition: HillClimbing.h:23
#define ENDL
Definition: IO.h:21
bool running()
Definition: Control.h:63
size_t inner_samples
Definition: HillClimbing.h:25
bool empty() const
Definition: TopN.h:103
unsigned long restart
Definition: Control.h:27
HillClimbing(HYP &h0, typename HYP::data_t *d, size_t n=1, size_t is=100)
Definition: HillClimbing.h:29
Definition: HillClimbing.h:20