Stan
2.10.0
probability, sampling & optimization
Main Page
Namespaces
Classes
Files
File List
File Members
src
stan
mcmc
stepsize_adaptation.hpp
Go to the documentation of this file.
1
#ifndef STAN_MCMC_STEPSIZE_ADAPTATION_HPP
2
#define STAN_MCMC_STEPSIZE_ADAPTATION_HPP
3
4
#include <
stan/mcmc/base_adaptation.hpp
>
5
#include <cmath>
6
7
namespace
stan
{
8
9
namespace
mcmc {
10
11
class
stepsize_adaptation
:
public
base_adaptation
{
12
public
:
13
stepsize_adaptation
()
14
:
mu_
(0.5),
delta_
(0.5),
gamma_
(0.05),
15
kappa_
(0.75),
t0_
(10) {
16
restart
();
17
}
18
19
void
set_mu
(
double
m) {
20
mu_
= m;
21
}
22
23
void
set_delta
(
double
d) {
24
if
(d > 0 && d < 1)
25
delta_
= d;
26
}
27
28
void
set_gamma
(
double
g) {
29
if
(g > 0)
30
gamma_
= g;
31
}
32
33
void
set_kappa
(
double
k) {
34
if
(k > 0)
35
kappa_
= k;
36
}
37
void
set_t0
(
double
t) {
38
if
(t > 0)
39
t0_
= t;
40
}
41
42
double
get_mu
() {
43
return
mu_
;
44
}
45
46
double
get_delta
() {
47
return
delta_
;
48
}
49
50
double
get_gamma
() {
51
return
gamma_
;
52
}
53
54
double
get_kappa
() {
55
return
kappa_
;
56
}
57
58
double
get_t0
() {
59
return
t0_
;
60
}
61
62
void
restart
() {
63
counter_
= 0;
64
s_bar_
= 0;
65
x_bar_
= 0;
66
}
67
68
void
learn_stepsize
(
double
& epsilon,
double
adapt_stat) {
69
++
counter_
;
70
71
adapt_stat = adapt_stat > 1 ? 1 : adapt_stat;
72
73
// Nesterov Dual-Averaging of log(epsilon)
74
const
double
eta = 1.0 / (
counter_
+
t0_
);
75
76
s_bar_
= (1.0 - eta) *
s_bar_
+ eta * (
delta_
- adapt_stat);
77
78
const
double
x =
mu_
-
s_bar_
* std::sqrt(
counter_
) /
gamma_
;
79
const
double
x_eta = std::pow(
counter_
, -
kappa_
);
80
81
x_bar_
= (1.0 - x_eta) *
x_bar_
+ x_eta * x;
82
83
epsilon = std::exp(x);
84
}
85
86
void
complete_adaptation
(
double
& epsilon) {
87
epsilon = std::exp(
x_bar_
);
88
}
89
90
protected
:
91
double
counter_
;
// Adaptation iteration
92
double
s_bar_
;
// Moving average statistic
93
double
x_bar_
;
// Moving average parameter
94
double
mu_
;
// Asymptotic mean of parameter
95
double
delta_
;
// Target value of statistic
96
double
gamma_
;
// Adaptation scaling
97
double
kappa_
;
// Adaptation shrinkage
98
double
t0_
;
// Effective starting iteration
99
};
100
101
}
// mcmc
102
103
}
// stan
104
105
#endif
stan::mcmc::stepsize_adaptation::complete_adaptation
void complete_adaptation(double &epsilon)
Definition:
stepsize_adaptation.hpp:86
stan::mcmc::stepsize_adaptation::delta_
double delta_
Definition:
stepsize_adaptation.hpp:95
stan::mcmc::stepsize_adaptation::restart
void restart()
Definition:
stepsize_adaptation.hpp:62
base_adaptation.hpp
stan::mcmc::stepsize_adaptation
Definition:
stepsize_adaptation.hpp:11
stan::mcmc::stepsize_adaptation::counter_
double counter_
Definition:
stepsize_adaptation.hpp:91
stan::mcmc::stepsize_adaptation::set_t0
void set_t0(double t)
Definition:
stepsize_adaptation.hpp:37
stan
Probability, optimization and sampling library.
Definition:
base_interrupt.hpp:4
stan::mcmc::stepsize_adaptation::learn_stepsize
void learn_stepsize(double &epsilon, double adapt_stat)
Definition:
stepsize_adaptation.hpp:68
stan::mcmc::stepsize_adaptation::kappa_
double kappa_
Definition:
stepsize_adaptation.hpp:97
stan::mcmc::stepsize_adaptation::set_mu
void set_mu(double m)
Definition:
stepsize_adaptation.hpp:19
stan::mcmc::stepsize_adaptation::get_mu
double get_mu()
Definition:
stepsize_adaptation.hpp:42
stan::mcmc::stepsize_adaptation::mu_
double mu_
Definition:
stepsize_adaptation.hpp:94
stan::mcmc::stepsize_adaptation::get_kappa
double get_kappa()
Definition:
stepsize_adaptation.hpp:54
stan::mcmc::stepsize_adaptation::x_bar_
double x_bar_
Definition:
stepsize_adaptation.hpp:93
stan::mcmc::stepsize_adaptation::stepsize_adaptation
stepsize_adaptation()
Definition:
stepsize_adaptation.hpp:13
stan::mcmc::stepsize_adaptation::s_bar_
double s_bar_
Definition:
stepsize_adaptation.hpp:92
stan::mcmc::stepsize_adaptation::gamma_
double gamma_
Definition:
stepsize_adaptation.hpp:96
stan::mcmc::stepsize_adaptation::set_gamma
void set_gamma(double g)
Definition:
stepsize_adaptation.hpp:28
stan::mcmc::stepsize_adaptation::set_kappa
void set_kappa(double k)
Definition:
stepsize_adaptation.hpp:33
stan::mcmc::base_adaptation
Definition:
base_adaptation.hpp:8
stan::mcmc::stepsize_adaptation::get_t0
double get_t0()
Definition:
stepsize_adaptation.hpp:58
stan::mcmc::stepsize_adaptation::get_gamma
double get_gamma()
Definition:
stepsize_adaptation.hpp:50
stan::mcmc::stepsize_adaptation::get_delta
double get_delta()
Definition:
stepsize_adaptation.hpp:46
stan::mcmc::stepsize_adaptation::t0_
double t0_
Definition:
stepsize_adaptation.hpp:98
stan::mcmc::stepsize_adaptation::set_delta
void set_delta(double d)
Definition:
stepsize_adaptation.hpp:23
[
Stan Home Page
]
© 2011–2016, Stan Development Team.