Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
bef2b07
Merge branch 'develop' of https://github.com/stan-dev/stan into develop
mitzimorris Feb 4, 2025
dc17597
Merge branch 'develop' of https://github.com/stan-dev/stan into develop
mitzimorris Feb 19, 2025
cb727ce
Merge branch 'develop' of https://github.com/stan-dev/stan into develop
mitzimorris Mar 3, 2025
31dbf30
Merge branch 'develop' of https://github.com/stan-dev/stan into develop
mitzimorris Mar 8, 2025
d6ebc25
Merge branch 'develop' of https://github.com/stan-dev/stan into develop
mitzimorris Apr 25, 2025
7986886
unit tests for bug
mitzimorris Apr 27, 2025
7f8a51f
bugfix
mitzimorris Apr 27, 2025
82ed384
[Jenkins] auto-formatting by clang-format version 10.0.0-4ubuntu1
stan-buildbot Apr 27, 2025
6593970
do-over
mitzimorris Apr 28, 2025
79c9505
merge fix
mitzimorris Apr 28, 2025
cf93461
[Jenkins] auto-formatting by clang-format version 10.0.0-4ubuntu1
stan-buildbot Apr 28, 2025
953e948
add test
mitzimorris Apr 28, 2025
7303d64
Merge branch 'issue/3023-term-buffer-0' of https://github.com/stan-de…
mitzimorris Apr 28, 2025
8a3e0ad
add test
mitzimorris Apr 28, 2025
c4740c4
add test
mitzimorris Apr 28, 2025
6d7b77e
refactor windowed adaptation; fix stepsize_adaptation bug
mitzimorris Apr 30, 2025
fdbf660
Merge commit '1c10b0423ca4de08233c18b6a3b95c5f03c60e26' into HEAD
yashikno Apr 30, 2025
1965478
[Jenkins] auto-formatting by clang-format version 10.0.0-4ubuntu1
stan-buildbot Apr 30, 2025
c6a2737
update all hmc adapt dense, diag objects
mitzimorris Apr 30, 2025
fec56a7
Merge branch 'issue/3023-term-buffer-0' of https://github.com/stan-de…
mitzimorris Apr 30, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 3 additions & 13 deletions src/stan/mcmc/covar_adaptation.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,11 @@ class covar_adaptation : public windowed_adaptation {
explicit covar_adaptation(int n)
: windowed_adaptation("covariance"), estimator_(n) {}

bool learn_covariance(Eigen::MatrixXd& covar, const Eigen::VectorXd& q) {
if (adaptation_window())
void learn_covariance(Eigen::MatrixXd& covar, const Eigen::VectorXd& q) {
if (in_phase2_window())
estimator_.add_sample(q);

if (end_adaptation_window()) {
compute_next_window();

if (end_phase2_window()) {
estimator_.sample_covariance(covar);

double n = static_cast<double>(estimator_.num_samples());
Expand All @@ -35,15 +33,7 @@ class covar_adaptation : public windowed_adaptation {
"unconstrained space; this may happen when the posterior density "
"function is too wide or improper. "
"There may be problems with your model specification.");

estimator_.restart();

++adapt_window_counter_;
return true;
}

++adapt_window_counter_;
return false;
}

protected:
Expand Down
11 changes: 7 additions & 4 deletions src/stan/mcmc/hmc/nuts/adapt_dense_e_nuts.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,15 +29,18 @@ class adapt_dense_e_nuts : public dense_e_nuts<Model, BaseRNG>,
this->stepsize_adaptation_.learn_stepsize(this->nom_epsilon_,
s.accept_stat());

bool update = this->covar_adaptation_.learn_covariance(
this->z_.inv_e_metric_, this->z_.q);
if (this->covar_adaptation_.in_phase2_window()) {
this->covar_adaptation_.learn_covariance(this->z_.inv_e_metric_,
this->z_.q);
}

if (update) {
if (this->covar_adaptation_.end_phase2_window()) {
this->init_stepsize(logger);

this->stepsize_adaptation_.set_mu(log(10 * this->nom_epsilon_));
this->stepsize_adaptation_.restart();
this->covar_adaptation_.compute_next_window();
}
this->covar_adaptation_.cur_iter_++;
}
return s;
}
Expand Down
11 changes: 7 additions & 4 deletions src/stan/mcmc/hmc/nuts/adapt_diag_e_nuts.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,15 +29,18 @@ class adapt_diag_e_nuts : public diag_e_nuts<Model, BaseRNG>,
this->stepsize_adaptation_.learn_stepsize(this->nom_epsilon_,
s.accept_stat());

bool update = this->var_adaptation_.learn_variance(this->z_.inv_e_metric_,
this->z_.q);
if (this->var_adaptation_.in_phase2_window()) {
this->var_adaptation_.learn_variance(this->z_.inv_e_metric_,
this->z_.q);
}

if (update) {
if (this->var_adaptation_.end_phase2_window()) {
this->init_stepsize(logger);

this->stepsize_adaptation_.set_mu(log(10 * this->nom_epsilon_));
this->stepsize_adaptation_.restart();
this->var_adaptation_.compute_next_window();
}
this->var_adaptation_.cur_iter_++;
}
return s;
}
Expand Down
11 changes: 7 additions & 4 deletions src/stan/mcmc/hmc/nuts_classic/adapt_dense_e_nuts_classic.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,15 +29,18 @@ class adapt_dense_e_nuts_classic : public dense_e_nuts_classic<Model, BaseRNG>,
this->stepsize_adaptation_.learn_stepsize(this->nom_epsilon_,
s.accept_stat());

bool update = this->covar_adaptation_.learn_covariance(
this->z_.inv_e_metric_, this->z_.q);
if (this->covar_adaptation_.in_phase2_window()) {
this->covar_adaptation_.learn_covariance(this->z_.inv_e_metric_,
this->z_.q);
}

if (update) {
if (this->covar_adaptation_.end_phase2_window()) {
this->init_stepsize(logger);

this->stepsize_adaptation_.set_mu(log(10 * this->nom_epsilon_));
this->stepsize_adaptation_.restart();
this->covar_adaptation_.compute_next_window();
}
this->covar_adaptation_.cur_iter_++;
}
return s;
}
Expand Down
11 changes: 7 additions & 4 deletions src/stan/mcmc/hmc/nuts_classic/adapt_diag_e_nuts_classic.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -30,15 +30,18 @@ class adapt_diag_e_nuts_classic : public diag_e_nuts_classic<Model, BaseRNG>,
this->stepsize_adaptation_.learn_stepsize(this->nom_epsilon_,
s.accept_stat());

bool update = this->var_adaptation_.learn_variance(this->z_.inv_e_metric_,
this->z_.q);
if (this->var_adaptation_.in_phase2_window()) {
this->var_adaptation_.learn_variance(this->z_.inv_e_metric_,
this->z_.q);
}

if (update) {
if (this->var_adaptation_.end_phase2_window()) {
this->init_stepsize(logger);

this->stepsize_adaptation_.set_mu(log(10 * this->nom_epsilon_));
this->stepsize_adaptation_.restart();
this->var_adaptation_.compute_next_window();
}
this->var_adaptation_.cur_iter_++;
}
return s;
}
Expand Down
11 changes: 6 additions & 5 deletions src/stan/mcmc/hmc/static/adapt_dense_e_static_hmc.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,16 +32,17 @@ class adapt_dense_e_static_hmc : public dense_e_static_hmc<Model, BaseRNG>,
s.accept_stat());
this->update_L_();

bool update = this->covar_adaptation_.learn_covariance(
this->z_.inv_e_metric_, this->z_.q);
if (this->covar_adaptation_.in_phase2_window())
this->covar_adaptation_.learn_covariance(this->z_.inv_e_metric_,
this->z_.q);

if (update) {
if (this->covar_adaptation_.end_phase2_window()) {
this->init_stepsize(logger);
this->update_L_();

this->stepsize_adaptation_.set_mu(log(10 * this->nom_epsilon_));
this->stepsize_adaptation_.restart();
this->covar_adaptation_.compute_next_window();
}
this->covar_adaptation_.cur_iter_++;
}
return s;
}
Expand Down
10 changes: 6 additions & 4 deletions src/stan/mcmc/hmc/static/adapt_diag_e_static_hmc.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,16 +32,18 @@ class adapt_diag_e_static_hmc : public diag_e_static_hmc<Model, BaseRNG>,
s.accept_stat());
this->update_L_();

bool update = this->var_adaptation_.learn_variance(this->z_.inv_e_metric_,
this->z_.q);
if (this->var_adaptation_.in_phase2_window())
this->var_adaptation_.learn_variance(this->z_.inv_e_metric_,
this->z_.q);

if (update) {
if (this->var_adaptation_.end_phase2_window()) {
this->init_stepsize(logger);
this->update_L_();

this->stepsize_adaptation_.set_mu(log(10 * this->nom_epsilon_));
this->stepsize_adaptation_.restart();
this->var_adaptation_.compute_next_window();
}
this->var_adaptation_.cur_iter_++;
}
return s;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,14 +31,18 @@ class adapt_dense_e_static_uniform
this->stepsize_adaptation_.learn_stepsize(this->nom_epsilon_,
s.accept_stat());

bool update = this->covar_adaptation_.learn_covariance(
this->z_.inv_e_metric_, this->z_.q);
if (this->covar_adaptation_.in_phase2_window()) {
this->covar_adaptation_.learn_covariance(this->z_.inv_e_metric_,
this->z_.q);
}

if (update) {
if (this->covar_adaptation_.end_phase2_window()) {
this->init_stepsize(logger);
this->stepsize_adaptation_.set_mu(log(10 * this->nom_epsilon_));
this->stepsize_adaptation_.restart();
this->covar_adaptation_.compute_next_window();
}
this->covar_adaptation_.cur_iter_++;
}
return s;
}
Expand Down
11 changes: 8 additions & 3 deletions src/stan/mcmc/hmc/static_uniform/adapt_diag_e_static_uniform.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -31,13 +31,18 @@ class adapt_diag_e_static_uniform
this->stepsize_adaptation_.learn_stepsize(this->nom_epsilon_,
s.accept_stat());

bool update = this->var_adaptation_.learn_variance(this->z_.inv_e_metric_,
this->z_.q);
if (update) {
if (this->var_adaptation_.in_phase2_window()) {
this->var_adaptation_.learn_variance(this->z_.inv_e_metric_,
this->z_.q);
}

if (this->var_adaptation_.end_phase2_window()) {
this->init_stepsize(logger);
this->stepsize_adaptation_.set_mu(log(10 * this->nom_epsilon_));
this->stepsize_adaptation_.restart();
this->var_adaptation_.compute_next_window();
}
this->var_adaptation_.cur_iter_++;
}
return s;
}
Expand Down
11 changes: 7 additions & 4 deletions src/stan/mcmc/hmc/xhmc/adapt_dense_e_xhmc.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,15 +29,18 @@ class adapt_dense_e_xhmc : public dense_e_xhmc<Model, BaseRNG>,
this->stepsize_adaptation_.learn_stepsize(this->nom_epsilon_,
s.accept_stat());

bool update = this->covar_adaptation_.learn_covariance(
this->z_.inv_e_metric_, this->z_.q);
if (this->covar_adaptation_.in_phase2_window()) {
this->covar_adaptation_.learn_covariance(this->z_.inv_e_metric_,
this->z_.q);
}

if (update) {
if (this->covar_adaptation_.end_phase2_window()) {
this->init_stepsize(logger);

this->stepsize_adaptation_.set_mu(log(10 * this->nom_epsilon_));
this->stepsize_adaptation_.restart();
this->covar_adaptation_.compute_next_window();
}
this->covar_adaptation_.cur_iter_++;
}
return s;
}
Expand Down
11 changes: 7 additions & 4 deletions src/stan/mcmc/hmc/xhmc/adapt_diag_e_xhmc.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,15 +29,18 @@ class adapt_diag_e_xhmc : public diag_e_xhmc<Model, BaseRNG>,
this->stepsize_adaptation_.learn_stepsize(this->nom_epsilon_,
s.accept_stat());

bool update = this->var_adaptation_.learn_variance(this->z_.inv_e_metric_,
this->z_.q);
if (this->var_adaptation_.in_phase2_window()) {
this->var_adaptation_.learn_variance(this->z_.inv_e_metric_,
this->z_.q);
}

if (update) {
if (this->var_adaptation_.end_phase2_window()) {
this->init_stepsize(logger);

this->stepsize_adaptation_.set_mu(log(10 * this->nom_epsilon_));
this->stepsize_adaptation_.restart();
this->var_adaptation_.compute_next_window();
}
this->var_adaptation_.cur_iter_++;
}
return s;
}
Expand Down
5 changes: 4 additions & 1 deletion src/stan/mcmc/stepsize_adaptation.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,10 @@ class stepsize_adaptation : public base_adaptation {
epsilon = std::exp(x);
}

void complete_adaptation(double& epsilon) { epsilon = std::exp(x_bar_); }
void complete_adaptation(double& epsilon) {
if (x_bar_ > 0)
epsilon = std::exp(x_bar_);
}

protected:
double counter_; // Adaptation iteration
Expand Down
16 changes: 3 additions & 13 deletions src/stan/mcmc/var_adaptation.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,11 @@ class var_adaptation : public windowed_adaptation {
explicit var_adaptation(int n)
: windowed_adaptation("variance"), estimator_(n) {}

bool learn_variance(Eigen::VectorXd& var, const Eigen::VectorXd& q) {
if (adaptation_window())
void learn_variance(Eigen::VectorXd& var, const Eigen::VectorXd& q) {
if (in_phase2_window())
estimator_.add_sample(q);

if (end_adaptation_window()) {
compute_next_window();

if (end_phase2_window()) {
estimator_.sample_variance(var);

double n = static_cast<double>(estimator_.num_samples());
Expand All @@ -34,15 +32,7 @@ class var_adaptation : public windowed_adaptation {
"unconstrained space; this may happen when the posterior density "
"function is too wide or improper. "
"There may be problems with your model specification.");

estimator_.restart();

++adapt_window_counter_;
return true;
}

++adapt_window_counter_;
return false;
}

protected:
Expand Down
Loading
Loading