Changeset 270 for bdm/estim/libPF.h
- Timestamp:
- 02/16/09 10:02:08 (15 years ago)
- Files:
-
- 1 modified
Legend:
- Unmodified
- Added
- Removed
-
bdm/estim/libPF.h
r267 r270 17 17 #include "../stat/libEF.h" 18 18 19 namespace bdm {19 namespace bdm { 20 20 21 21 /*! … … 36 36 Array<vec> &_samples; 37 37 //! Parameter evolution model 38 mpdf ∥38 mpdf *par; 39 39 //! Observation model 40 mpdf &obs;40 mpdf *obs; 41 41 public: 42 //! Default constructor 43 PF ( const RV &rv0, mpdf &par0, mpdf &obs0, int n0 ) :BM ( rv0 ), 44 n ( n0 ),est ( rv0,n ),_w ( est._w() ),_samples ( est._samples() ), 45 par ( par0 ), obs ( obs0 ) {}; 46 42 //! \name Constructors 43 //!@{ 44 PF ( ) :est(), _w ( est._w() ),_samples ( est._samples() ) {}; 45 PF( mpdf *par0, mpdf *obs0, epdf *epdf0, int n0 ) : 46 est ( ),_w ( est._w() ),_samples ( est._samples() ) 47 { par = par0; obs=obs0; est.set_parameters ( ones(n0),epdf0 ); }; 48 void set_parameters ( mpdf *par0, mpdf *obs0, int n0 ) 49 { par = par0; obs=obs0; n=n0; }; 50 void set_statistics (const vec w0, epdf *epdf0){est.set_parameters ( w0,epdf0 );}; 51 //!@} 47 52 //! Set posterior density by sampling from epdf0 48 53 void set_est ( const epdf &epdf0 ); 49 54 void bayes ( const vec &dt ); 50 55 //!access function 51 vec* __w() {return &_w;}56 vec* __w() {return &_w;} 52 57 }; 53 58 … … 71 76 Array<const epdf*> Coms; 72 77 public: 73 mpfepdf ( eEmp &E0 , const RV &rvc) :74 epdf ( RV( )), E ( E0 ), _w ( E._w() ),78 mpfepdf ( eEmp &E0) : 79 epdf ( ), E ( E0 ), _w ( E._w() ), 75 80 Coms ( _w.length() ) { 76 rv.add ( E._rv() );77 rv.add ( rvc );78 81 }; 79 82 … … 83 86 vec mean() const { 84 87 // ugly 85 vec pom=zeros ( ( Coms ( 0 )->_rv() ).count() );88 vec pom=zeros ( Coms(0)->dimension() ); 86 89 for ( int i=0; i<_w.length(); i++ ) {pom += Coms ( i )->mean() * _w ( i );} 87 90 return concat ( E.mean(),pom ); … … 89 92 vec variance() const { 90 93 // ugly 91 vec pom=zeros ( ( Coms ( 0 )->_rv() ).count() );92 vec pom2=zeros ( ( Coms ( 0 )->_rv() ).count() );94 vec pom=zeros ( Coms ( 0 )->dimension() ); 95 vec pom2=zeros ( Coms ( 0 )->dimension() ); 93 96 for ( int i=0; i<_w.length(); i++ ) { 94 97 pom += Coms ( i )->mean() * _w ( i ); 95 pom2 += (Coms ( i )->variance() + pow(Coms(i)->mean(),2)) * _w ( i );} 96 return concat ( E.variance(),pom2-pow(pom,2) ); 98 pom2 += ( Coms ( i )->variance() + pow ( Coms ( i )->mean(),2 ) ) * _w ( i ); 99 } 100 return concat ( E.variance(),pom2-pow ( pom,2 ) ); 97 101 } 98 102 … … 107 111 public: 108 112 //! Default constructor. 109 MPF ( const RV &rvlin, const RV &rvpf, mpdf &par0, mpdf &obs0, int n, const BM_T &BMcond0 ) : PF ( rvpf ,par0,obs0,n ),jest ( est,rvlin ) { 113 MPF ( mpdf *par0, mpdf *obs0, int n, const BM_T &BMcond0 ) : PF (), jest ( est ) { 114 PF::set_parameters(par0,obs0,n); 110 115 // 111 116 //TODO test if rv and BMcond.rv are compatible. 112 rv.add ( rvlin );117 // rv.add ( rvlin ); 113 118 // 114 119 … … 137 142 138 143 //!Access function 139 BM* _BM (int i){return Bms[i];}144 BM* _BM ( int i ) {return Bms[i];} 140 145 }; 141 146 … … 148 153 double mlls=-std::numeric_limits<double>::infinity(); 149 154 150 151 for ( i=0;i<n;i++ ) { 155 #pragma omp parallel for 156 for ( i=0;i<n;i++ ) { 152 157 //generate new samples from paramater evolution model; 153 _samples ( i ) = par .samplecond ( _samples ( i ) );154 llsP ( i ) = par ._e()->evallog(_samples(i));158 _samples ( i ) = par->samplecond ( _samples ( i ) ); 159 llsP ( i ) = par->_e()->evallog ( _samples ( i ) ); 155 160 Bms[i]->condition ( _samples ( i ) ); 156 161 Bms[i]->bayes ( dt ); … … 161 166 double sum_w=0.0; 162 167 // compute weights 163 168 #pragma omp parallel for 164 169 for ( i=0;i<n;i++ ) { 165 170 _w ( i ) *= exp ( lls ( i ) - mlls ); // multiply w by likelihood 166 sum_w+=_w (i);171 sum_w+=_w ( i ); 167 172 } 168 173 169 174 if ( sum_w >0.0 ) { 170 175 _w /=sum_w; //? 171 } else { 176 } 177 else { 172 178 cout<<"sum(w)==0"<<endl; 173 179 } … … 179 185 // Resample Bms! 180 186 181 187 #pragma omp parallel for 182 188 for ( i=0;i<n;i++ ) { 183 189 if ( ind ( i ) !=i ) {//replace the current Bm by a new one