48
48
StaticMH (d) = MetropolisHastings (StaticProposal (d))
49
49
RWMH (d) = MetropolisHastings (RandomWalkProposal (d))
50
50
51
+ # default function without RNG
52
+ propose (spl:: MetropolisHastings , args... ) = propose (Random. GLOBAL_RNG, spl, args... )
53
+
51
54
# Propose from a vector of proposals
52
55
function propose (
56
+ rng:: Random.AbstractRNG ,
53
57
spl:: MetropolisHastings{<:AbstractArray} ,
54
58
model:: DensityModel
55
59
)
56
- proposal = map (p -> propose (p, model), spl. proposal)
60
+ proposal = map (p -> propose (rng, p, model), spl. proposal)
57
61
return Transition (model, proposal)
58
62
end
59
63
60
64
function propose (
65
+ rng:: Random.AbstractRNG ,
61
66
spl:: MetropolisHastings{<:AbstractArray} ,
62
67
model:: DensityModel ,
63
68
params_prev:: Transition
64
69
)
65
70
proposal = map (spl. proposal, params_prev. params) do p, params
66
- propose (p, model, params)
71
+ propose (rng, p, model, params)
67
72
end
68
73
return Transition (model, proposal)
69
74
end
70
75
71
76
# Make a proposal from one Proposal struct.
72
77
function propose (
78
+ rng:: Random.AbstractRNG ,
73
79
spl:: MetropolisHastings{<:Proposal} ,
74
80
model:: DensityModel
75
81
)
76
- proposal = propose (spl. proposal, model)
82
+ proposal = propose (rng, spl. proposal, model)
77
83
return Transition (model, proposal)
78
84
end
79
85
80
86
function propose (
87
+ rng:: Random.AbstractRNG ,
81
88
spl:: MetropolisHastings{<:Proposal} ,
82
89
model:: DensityModel ,
83
90
params_prev:: Transition
84
91
)
85
- proposal = propose (spl. proposal, model, params_prev. params)
92
+ proposal = propose (rng, spl. proposal, model, params_prev. params)
86
93
return Transition (model, proposal)
87
94
end
88
95
89
96
# Make a proposal from a NamedTuple of Proposal.
90
97
function propose (
98
+ rng:: Random.AbstractRNG ,
91
99
spl:: MetropolisHastings{<:NamedTuple} ,
92
100
model:: DensityModel
93
101
)
94
102
proposal = map (spl. proposal) do p
95
- propose (p, model)
103
+ propose (rng, p, model)
96
104
end
97
105
return Transition (model, proposal)
98
106
end
99
107
100
108
function propose (
109
+ rng:: Random.AbstractRNG ,
101
110
spl:: MetropolisHastings{<:NamedTuple} ,
102
111
model:: DensityModel ,
103
112
params_prev:: Transition
104
113
)
105
114
proposal = map (spl. proposal, params_prev. params) do p, params
106
- propose (p, model, params)
115
+ propose (rng, p, model, params)
107
116
end
108
117
return Transition (model, proposal)
109
118
end
143
152
# beginning of sampling. Return the initial parameter used
144
153
# to define the sampler.
145
154
function AbstractMCMC. step! (
146
- rng:: AbstractRNG ,
155
+ rng:: Random. AbstractRNG ,
147
156
model:: DensityModel ,
148
157
spl:: MetropolisHastings ,
149
158
N:: Integer ,
@@ -152,7 +161,7 @@ function AbstractMCMC.step!(
152
161
kwargs...
153
162
)
154
163
if init_params === nothing
155
- return propose (spl, model)
164
+ return propose (rng, spl, model)
156
165
else
157
166
return Transition (model, init_params)
158
167
end
@@ -162,15 +171,15 @@ end
162
171
# either a new proposal (if accepted) or the previous proposal
163
172
# (if not accepted).
164
173
function AbstractMCMC. step! (
165
- rng:: AbstractRNG ,
174
+ rng:: Random. AbstractRNG ,
166
175
model:: DensityModel ,
167
176
spl:: MetropolisHastings ,
168
177
:: Integer ,
169
178
params_prev:: Transition ;
170
179
kwargs...
171
180
)
172
181
# Generate a new proposal.
173
- params = propose (spl, model, params_prev)
182
+ params = propose (rng, spl, model, params_prev)
174
183
175
184
# Calculate the log acceptance probability.
176
185
logα = logdensity (model, params) - logdensity (model, params_prev) +
0 commit comments