Changeset 1064 for library/bdm/estim/particles.cpp
- Timestamp:
- 06/09/10 14:00:40 (14 years ago)
- Files:
-
- 1 modified
Legend:
- Unmodified
- Added
- Removed
-
library/bdm/estim/particles.cpp
r887 r1064 8 8 void PF::bayes_weights() { 9 9 // 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 10 double mlls = max ( lls ); 11 // compute weights 12 for ( int i = 0; i < n; i++ ) { 13 w ( i ) *= exp ( lls ( i ) - mlls ); // multiply w by likelihood 14 } 15 16 //renormalize 17 double sw = sum ( w ); 18 if ( !std::isfinite ( sw ) ) { 19 for ( int i = 0; i < n; i++ ) { 20 if ( !std::isfinite ( w ( i ) ) ) { 21 w ( i ) = 0; 22 } 23 } 24 sw = sum ( w ); 25 if ( !std::isfinite ( sw ) || sw == 0.0 ) { 26 bdm_error ( "Particle filter is lost; no particle is good enough." ); 27 } 28 } 29 w /= sw; 30 30 } 31 31 32 32 void PF::bayes ( const vec &yt, const vec &cond ) { 33 33 34 /* if (auxiliary){ 35 ... 36 }*/ 37 // weight them - data step 38 for (int i = 0; i < n; i++ ) { 39 particles(i)->bayes(yt,cond); 40 lls ( i ) = particles(i)->_ll(); //+= because lls may have something from gensmp! 41 } 42 43 bayes_weights(); 44 45 if ( do_resampling() ) { resample ( ); } 34 /* if (auxiliary){ 35 ... 36 }*/ 37 // weight them - data step 38 for (int i = 0; i < n; i++ ) { 39 particles(i)->bayes(yt,cond); 40 lls ( i ) = particles(i)->_ll(); //+= because lls may have something from gensmp! 41 } 42 43 bayes_weights(); 44 45 if ( do_resampling() ) { 46 resample ( ); 47 } 46 48 47 49 } … … 64 66 // return concat ( pf->posterior().mean(), pom ); 65 67 // } 66 // 68 // 67 69 // vec MPF::mpfepdf::variance() const { 68 70 // const vec &w = pf->posterior()._w(); 69 // 71 // 70 72 // vec pom = zeros ( BMs ( 0 )->posterior ().dimension() ); 71 73 // vec pom2 = zeros ( BMs ( 0 )->posterior ().dimension() ); 72 74 // vec mea; 73 // 75 // 74 76 // for ( int i = 0; i < w.length(); i++ ) { 75 77 // // save current mean … … 81 83 // return concat ( pf->posterior().variance(), pom2 - pow ( pom, 2 ) ); 82 84 // } 83 // 85 // 84 86 // void MPF::mpfepdf::qbounds ( vec &lb, vec &ub, double perc ) const { 85 87 // //bounds on particles … … 87 89 // vec ubp; 88 90 // pf->posterior().qbounds ( lbp, ubp ); 89 // 91 // 90 92 // //bounds on Components 91 93 // int dimC = BMs ( 0 )->posterior().dimension(); … … 99 101 // Lbc = std::numeric_limits<double>::infinity(); 100 102 // Ubc = -std::numeric_limits<double>::infinity(); 101 // 103 // 102 104 // for ( int i = 0; i < BMs.length(); i++ ) { 103 105 // // check Coms … … 116 118 // ub = concat ( ubp, Ubc ); 117 119 // } 118 // 119 // 120 // 120 // 121 // 122 // 121 123 // void MPF::bayes ( const vec &yt, const vec &cond ) { 122 124 // // follows PF::bayes in most places!!! … … 125 127 // vec &lls = pf->_lls(); 126 128 // Array<vec> &samples = pf->__samples(); 127 // 129 // 128 130 // // generate samples - time step 129 131 // pf->bayes_gensmp ( vec ( 0 ) ); … … 137 139 // lls ( i ) += BMs ( i )->_ll(); 138 140 // } 139 // 141 // 140 142 // pf->bayes_weights(); 141 // 143 // 142 144 // ivec ind; 143 145 // if ( pf->do_resampling() ) { 144 146 // pf->resample ( ind ); 145 // 147 // 146 148 // #pragma omp parallel for 147 149 // for ( i = 0; i < n; i++ ) { … … 153 155 // } 154 156 // }; 155 // 156 // 157 // 158 // 157 159 // void MPF_ARXg::bayes ( const vec &yt, const vec &cond ) { 158 160 // // follows PF::bayes in most places!!! … … 161 163 // vec &lls = pf->_lls(); 162 164 // Array<vec> &samples = pf->__samples(); 163 // 165 // 164 166 // // generate samples - time step 165 167 // for (int i =0;i<n; i++){ … … 177 179 // ooo.set_parameters(zeros(2),0.1*eye(2)); 178 180 // ooo.validate(); 179 // 181 // 180 182 // #pragma parallel for 181 183 // for ( i = 0; i < n; i++ ) { … … 187 189 // lls(i) = ooo.evallog_nn(yt); 188 190 // } 189 // 191 // 190 192 // pf->bayes_weights(); 191 // 193 // 192 194 // ivec ind; 193 195 // if ( pf->do_resampling() ) { 194 196 // pf->resample ( ind ); 195 // 197 // 196 198 // #pragma omp parallel for 197 199 // for ( i = 0; i < n; i++ ) { … … 205 207 // } 206 208 // }; 207 // 209 // 208 210 // void MPF_ARXg::from_setting(const libconfig::Setting& set) { 209 211 // BM::from_setting(set); 210 // 212 // 211 213 // pf = new PF; 212 214 // // prior must be set before BM 213 215 // pf->prior_from_set ( set ); 214 216 // pf->resmethod_from_set ( set ); 215 // 217 // 216 218 // // read functions g and h 217 219 // g=UI::build<fnc>(set,"g"); 218 220 // h=UI::build<fnc>(set,"h"); 219 // 221 // 220 222 // set_dim( g->dimension()); 221 223 // dimy = h->dimension(); 222 // 224 // 223 225 // shared_ptr<ARX> arxo=UI::build<ARX>(set,"arxo"); 224 226 // shared_ptr<ARX> arxp=UI::build<ARX>(set,"arxp"); … … 230 232 // BMsp(i)=arxp->_copy(); 231 233 // } 232 // 234 // 233 235 // yrv = arxo->_yrv(); 234 236 // //rvc = arxo->_rvc(); 235 // 237 // 236 238 // validate(); 237 // 239 // 238 240 // } 239 241