-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathParameterDouble.cpp
More file actions
39 lines (36 loc) · 1.28 KB
/
ParameterDouble.cpp
File metadata and controls
39 lines (36 loc) · 1.28 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include "ParameterDouble.hpp"
#include "Probability.hpp"
#include "RandomVariable.hpp"
ParameterDouble:: ParameterDouble(double prob, Model* M, std::string n, double min, double max): Parameter(prob, M, n), lowerbound(min), upperbound(max){
RandomVariable& rng=RandomVariable::randomVariableInstance();
double u = Probability::Uniform::rv(&rng, lowerbound, upperbound);
value.push_back(u);
value.push_back(u);
}
double ParameterDouble:: lnProbability (void){
return Probability::Beta::lnPdf(1, 1, value[0]);
}
void ParameterDouble:: print (void) {
}
double ParameterDouble:: update (void) {
double windowsize = 0.02;
double pMax = value[0] + windowsize;
double pMin = value[0] - windowsize;
RandomVariable& rng=RandomVariable::randomVariableInstance();
double pUpdate = Probability::Uniform::rv(&rng, pMin, pMax);
if (pUpdate < lowerbound) {
pUpdate = lowerbound + lowerbound - pUpdate;
}
else if (pUpdate > upperbound) {
pUpdate = (upperbound - (pUpdate - upperbound));
}
value[0] = pUpdate;
return 0.0;
//Update returns log of hastings ratio
}
void ParameterDouble:: UpdateForAcceptance (void) {
value[1] = value[0];
}
void ParameterDouble:: UpdateForRejection (void) {
value[0] = value[1];
}