1 #ifndef __STAN__MCMC__ADAPTIVE_HMC_H__
2 #define __STAN__MCMC__ADAPTIVE_HMC_H__
9 #include <boost/random/mersenne_twister.hpp>
10 #include <boost/random/normal_distribution.hpp>
11 #include <boost/random/uniform_01.hpp>
12 #include <boost/random/variate_generator.hpp>
41 template <
class BaseRNG = boost::mt19937>
79 const std::vector<double>& params_r,
80 const std::vector<int>& params_i,
83 double epsilon_pm = 0.0,
84 bool epsilon_adapt =
true,
87 BaseRNG rand_int = BaseRNG(std::time(0)))
127 for (
size_t i = 0; i < m.size(); ++i)
131 std::vector<double> g_new(this->
_g);
132 std::vector<double> x_new(this->
_x);
133 double logp_new = -1e100;
139 double range = high - low;
143 for (
unsigned int l = 0; l < _L; ++l)
149 double dH = H_new - H;
153 this->
_logp = logp_new;
158 if (adapt_stat != adapt_stat)
161 double adapt_g = adapt_stat - this->
_delta;
162 std::vector<double> gvec(1, -adapt_g);
163 std::vector<double> result;
167 std::vector<double> result;
170 double avg_eta = 1.0 / this->
n_steps();
189 names.push_back(
"stepsize__");