50 std::default_random_engine&
rng_;
79 std::normal_distribution<double>
distN_{0.0, 1.0};
80 std::uniform_real_distribution<double>
distU_{0.0, 1.0};
92 void leapfrog(Eigen::VectorXd& q, Eigen::VectorXd& p, Eigen::VectorXd& grad,
double epsilon,
const gradient_t& getGradient)
const;
140 TreeState build_tree(
const Eigen::VectorXd& q,
const Eigen::VectorXd& p,
const Eigen::VectorXd& grad,
double log_u,
int v,
int j,
double epsilon,
const score_t& getScore,
const gradient_t& getGradient);
173 return cov_ /
static_cast<double>(std::max(
nSteps_ - 1, (
size_t)1));
Implements the Hamiltonian Monte Carlo (HMC) algorithm with the No-U-Turn Sampler (NUTS) and Dual Ave...
Definition hmc.h:48
double currentScore_
The current log-posterior score value.
Definition hmc.h:54
double epsilon_
Step size for the leapfrog integrator.
Definition hmc.h:61
double sumAcceptanceProb_
Sum of acceptance probabilities for step size adaptation.
Definition hmc.h:64
void step(const score_t &getScore, const gradient_t &getGradient, bool adapt=false)
Perform a single MCMC step using the NUTS algorithm.
Definition hmc.cpp:136
std::uniform_real_distribution< double > distU_
Uniform generator helper for transition accept checks.
Definition hmc.h:80
void update()
Definition hmc.cpp:22
void info() const
Definition hmc.cpp:266
size_t getSteps() const
Definition hmc.cpp:259
double getAcceptanceRatio() const
Definition hmc.cpp:262
Eigen::MatrixXd getCovariance() const
Definition hmc.h:172
Eigen::VectorXd mean_
Running mean of the parameter samples.
Definition hmc.h:58
Eigen::MatrixXd cov_
Running covariance of the parameter samples.
Definition hmc.h:59
double kappa_
Adaptation exponential decay parameter.
Definition hmc.h:70
double gamma_
Adaptation shrinkage parameter.
Definition hmc.h:68
double log_epsilon_bar_
Log of the adapted step size.
Definition hmc.h:74
Eigen::VectorXd getMean() const
Definition hmc.h:168
std::default_random_engine & rng_
Reference to the random number generator.
Definition hmc.h:50
double mu_
Target value for log step size.
Definition hmc.h:67
double getStepSize() const
Definition hmc.h:164
double H_bar_
Running average of difference between target and accept probability.
Definition hmc.h:73
Eigen::VectorXd currentMomentum_
The current momentum auxiliary variable.
Definition hmc.h:53
double target_accept_
Target acceptance probability.
Definition hmc.h:75
std::normal_distribution< double > distN_
Normal generator helper for momentum initialization.
Definition hmc.h:79
TreeState build_tree(const Eigen::VectorXd &q, const Eigen::VectorXd &p, const Eigen::VectorXd &grad, double log_u, int v, int j, double epsilon, const score_t &getScore, const gradient_t &getGradient)
Build a binary tree for the NUTS algorithm.
Definition hmc.cpp:53
size_t nSteps_
Number of steps taken in the Markov chain.
Definition hmc.h:63
size_t dim_
Dimension of the parameter space.
Definition hmc.h:55
Eigen::VectorXd currentPosition_
The current position (parameter state).
Definition hmc.h:52
double t0_
Adaptation stabilization parameter.
Definition hmc.h:69
void leapfrog(Eigen::VectorXd &q, Eigen::VectorXd &p, Eigen::VectorXd &grad, double epsilon, const gradient_t &getGradient) const
Perform a single leapfrog step.
Definition hmc.cpp:5
Eigen::VectorXd getCurrent() const
Definition hmc.cpp:256
void reset()
Definition hmc.cpp:248
std::function< double(const Eigen::VectorXd &)> score_t
The score_t type A function that takes a const reference to an Eigen::VectorXd and returns a double A...
Definition cmp_defines.h:82
std::function< Eigen::VectorXd(const Eigen::Ref< const Eigen::VectorXd > &)> gradient_t
Definition cmp_defines.h:83
Eigen::VectorXd p_plus
Momentum at the rightmost leaf.
Definition hmc.h:112
size_t n
Number of valid states in the subtree.
Definition hmc.h:116
Eigen::VectorXd p_minus
Momentum at the leftmost leaf.
Definition hmc.h:108
Eigen::VectorXd q_plus
Position at the rightmost leaf.
Definition hmc.h:111
Eigen::VectorXd grad_minus
Gradient at the leftmost leaf.
Definition hmc.h:109
int s
Trajectory validity flag (0 = U-turn/divergence, 1 = valid).
Definition hmc.h:117
size_t n_alpha
Number of states for calculating average acceptance probability.
Definition hmc.h:119
double alpha
Accumulated acceptance probabilities in subtree.
Definition hmc.h:118
Eigen::VectorXd grad_plus
Gradient at the rightmost leaf.
Definition hmc.h:113
Eigen::VectorXd q_prime
Proposed next sample position.
Definition hmc.h:115
Eigen::VectorXd q_minus
Position at the leftmost leaf.
Definition hmc.h:107