root/bdm/estim/merger.h @ 198

Revision 198, 2.8 kB (checked in by smidl, 16 years ago)

opravy + zavedeni studenta + zakomentovani debug v mergeru

Line 
1/*!
2  \file
3  \brief Mergers for combination of pdfs
4  \author Vaclav Smidl.
5
6  -----------------------------------
7  BDM++ - C++ library for Bayesian Decision Making under Uncertainty
8
9  Using IT++ for numerical operations
10  -----------------------------------
11*/
12
13#ifndef MER_H
14#define MER_H
15
16#include <itpp/itbase.h>
17#include "mixef.h"
18
19using namespace itpp;
20using std::string;
21
22/*!
23@brief Function for general combination of pdfs
24
25Mixtures of Gaussian densities are used internally. Switching to other densities should be trivial.
26*/
27
28class merger : public compositepdf, public epdf {
29protected:
30        //!Internal mixture of EF models
31        MixEF Mix;
32        //! Data link for each mpdf in mpdfs
33        Array<datalink_m2e*> dls;
34        //! Array of rvs that are not modelled by mpdfs at all (aux)
35        Array<RV> rvzs;
36        //! Data Links of rv0 mpdfs - these will be conditioned the (rv,rvc) of mpdfs
37        Array<datalink_m2e*> zdls;
38
39        //!Number of samples used in approximation
40        int Ns;
41        //!Number of components in a mixture
42        int Nc;
43        //!Prior on the log-normal merging model
44        double beta;
45public:
46//!Default constructor
47        merger ( const Array<mpdf*> &S ) :
48                        compositepdf ( S ), epdf ( getrv ( false ) ),
49                        Mix ( Array<BMEF*> ( 0 ),vec ( 0 ) ), dls ( n ), rvzs ( n ), zdls ( n ) {
50                RV ztmp;
51                // Extend rv by rvc!
52                RV rvc; setrvc ( rv,rvc );
53                rv.add ( rvc );
54                for ( int i=0;i<n;i++ ) {
55                        //Establich connection between mpdfs and merger
56                        dls ( i ) = new datalink_m2e ( mpdfs ( i )->_rv(), mpdfs ( i )->_rvc(), rv );
57                        // find out what is missing in each mpdf
58                        ztmp= mpdfs ( i )->_rv();
59                        ztmp.add ( mpdfs ( i )->_rvc() );
60                        rvzs ( i ) =rv.subt ( ztmp );
61                        zdls ( i ) = new datalink_m2e ( rvzs ( i ), ztmp, rv ) ;
62                };
63                //Set Default values of parameters
64                beta=2.0;
65                Ns=100;
66                Nc=10;
67                Mix.set_method ( EM );
68        }
69//! Set internal parameters used in approximation
70        void set_parameters ( double beta0, int Ns0, int Nc0 ) {        beta=beta0;Ns=Ns0;Nc=Nc0;}
71//!Initialize the proposal density. This function must be called before merge()!
72        void init() { ////////////// NOT FINISHED
73                Array<vec> Smps ( n );
74                //Gibbs sampling
75                for ( int i=0;i<n;i++ ) {Smps ( i ) =zeros ( 0 );}
76        }
77//!Create a mixture density using known proposal
78        void merge ( const epdf* g0 );
79//!Create a mixture density, make sure to call init() before the first call
80        void merge () {merge ( & ( Mix._epdf() ) );};
81
82//! Merge log-likelihood values
83        vec lognorm_merge ( mat &lW );
84//! sample from merged density
85//! weight w is a
86        vec sample ( ) const { return Mix._epdf().sample();}
87        double evalpdflog ( const vec &dt ) const {
88                vec dtf=ones ( dt.length() +1 );
89                dtf.set_subvector ( 0,dt );
90                return Mix.logpred ( dtf );
91        }
92        vec mean() const {return Mix._epdf().mean();}
93//! for future use
94        virtual ~merger() {
95                for ( int i=0; i<n; i++ ) {
96                        delete dls ( i );
97                        delete zdls ( i );
98                }
99        };
100
101//! Access function
102        MixEF& _Mix() {return Mix;}
103};
104
105
106
107#endif // MER_H
Note: See TracBrowser for help on using the browser.