1 #ifndef STAN_MCMC_HMC_STATIC_BASE_STATIC_HMC_HPP
2 #define STAN_MCMC_HMC_STATIC_BASE_STATIC_HMC_HPP
7 #include <boost/math/special_functions/fpclassify.hpp>
19 template <
class Model,
20 template<
class,
class>
class Hamiltonian,
21 template<
class>
class Integrator,
24 :
public base_hmc<Model, Hamiltonian, Integrator, BaseRNG> {
27 :
base_hmc<Model, Hamiltonian, Integrator, BaseRNG>(model, rng),
49 for (
int i = 0; i <
L_; ++i)
50 this->
integrator_.evolve(this->z_, this->hamiltonian_,
52 info_writer, error_writer);
55 if (boost::math::isnan(h)) h = std::numeric_limits<double>::infinity();
57 double acceptProb = std::exp(H0 - h);
60 this->
z_.ps_point::operator=(z_init);
62 acceptProb = acceptProb > 1 ? 1 : acceptProb;
65 return sample(this->
z_.q, - this->hamiltonian_.V(this->z_), acceptProb);
69 names.push_back(
"stepsize__");
70 names.push_back(
"int_time__");
71 names.push_back(
"energy__");
76 values.push_back(this->
T_);
77 values.push_back(this->
energy_);
124 L_ = L_ < 1 ? 1 :
L_;
Hamiltonian< Model, BaseRNG >::PointType z_
void sample(stan::mcmc::base_mcmc *sampler, int num_warmup, int num_samples, int num_thin, int refresh, bool save, stan::services::sample::mcmc_writer< Model, SampleRecorder, DiagnosticRecorder, MessageRecorder > &mcmc_writer, stan::mcmc::sample &init_s, Model &model, RNG &base_rng, const std::string &prefix, const std::string &suffix, std::ostream &o, StartTransitionCallback &callback, interface_callbacks::writer::base_writer &info_writer, interface_callbacks::writer::base_writer &error_writer)
Probability, optimization and sampling library.
void set_nominal_stepsize_and_T(const double e, const double t)
void set_nominal_stepsize_and_L(const double e, const int l)
void set_nominal_stepsize(const double e)
Point in a generic phase space.
double cont_params(int k) const
base_writer is an abstract base class defining the interface for Stan writer callbacks.
Hamiltonian Monte Carlo implementation using the endpoint of trajectories with a static integration t...
void get_sampler_param_names(std::vector< std::string > &names)
void seed(const Eigen::VectorXd &q)
void get_sampler_params(std::vector< double > &values)
boost::uniform_01< BaseRNG & > rand_uniform_
base_static_hmc(const Model &model, BaseRNG &rng)
Hamiltonian< Model, BaseRNG > hamiltonian_
sample transition(sample &init_sample, interface_callbacks::writer::base_writer &info_writer, interface_callbacks::writer::base_writer &error_writer)
Integrator< Hamiltonian< Model, BaseRNG > > integrator_
void set_T(const double t)