@@ -45,6 +45,36 @@ auto dynamics = [](const vec& x, const vec& u) -> vec {
45
45
return xx;
46
46
};
47
47
48
+ // / Custom PDF function, change this to the PDF function desired that will be integrated over with Monte Carlo integration
49
+ double customPDF (double *x, size_t dim, void *params){
50
+ // custom PDF parameters that are passed in (not all need to be used)
51
+ customParams *p = reinterpret_cast <customParams*>(params);
52
+ vec mean = p-> mean;
53
+ vec state_start = p->state_start ;
54
+ function<vec (const vec&,const vec&)> dynamics2 = p-> dynamics2;
55
+ vec input = p-> input;
56
+ vec lb = p-> lb;
57
+ vec ub = p-> ub;
58
+ vec eta = p-> eta;
59
+ /* Other parameters of struct unused in the ex_custom_distribution example:*/
60
+ // function<vec(const vec&)> dynamics1 = p->dynamics1;
61
+ // function<vec(const vec&,const vec&)> dynamics3 = p-> dynamics3;
62
+ // vec disturb = p-> disturb;
63
+
64
+ // multivariate normal PDF example:
65
+ double cov_det = 0.5625 ;
66
+ mat inv_cov = {{1.3333 , 0 },{0 , 1.3333 }};
67
+ double norm = 1.0 / (pow (2 * M_PI, dim / 2.0 ) * sqrt (cov_det));
68
+
69
+ double exponent = 0.0 ;
70
+ for (size_t i = 0 ; i < dim; ++i) {
71
+ for (size_t j = 0 ; j < dim; ++j) {
72
+ exponent -= 0.5 * (x[i] - mean[i]) * (x[j] - mean[j]) * inv_cov (i,j);
73
+ }
74
+ }
75
+ return norm * exp (exponent);
76
+ };
77
+
48
78
/*
49
79
################################# MAIN FUNCTION ##############################################
50
80
*/
@@ -69,7 +99,7 @@ int main() {
69
99
/* ###### set dynamics and noise ######*/
70
100
mdp.setDynamics (dynamics);
71
101
mdp.setNoise (NoiseType::CUSTOM);
72
- mdp.setCustomDistribution (1000 );
102
+ mdp.setCustomDistribution (customPDF, 1000 ); // note this is updated from the original IMPaCT release
73
103
74
104
/* ###### calculate abstraction for target vectors ######*/
75
105
mdp.targetTransitionVectorBounds ();
0 commit comments