Changeset 283 for doprava

Show
Ignore:
Timestamp:
02/24/09 14:14:01 (15 years ago)
Author:
smidl
Message:

get rid of BMcond + adaptation in doprava/

Location:
doprava
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • doprava/k1.cpp

    r278 r283  
    1212 
    1313 
    14 #include <stat/libFN.h> 
    1514#include <estim/ekf_templ.h> 
    16 #include <stat/loggers.h> 
     15#include <stat/loggers_ui.h> 
     16#include <stat/libDS_ui.h> 
    1717 
    1818//include dopravni model 
     
    2121using namespace bdm; 
    2222 
    23 int main() { 
    24         // Pocet dat 
    25         int Ndat = 900; 
    26  
    27         // Objekt pro ukladani vysledku 
    28         memlog L(Ndat); 
    29  
     23int main( int argc, char* argv[] ) { 
     24/*      const char *fname; 
     25        if ( argc>1 ) {fname = argv[1]; } 
     26        else { fname = "k1.cfg"; } 
     27        UIFile F ( fname ); //protected by exceptions, should complain if not found*/ 
     28         
     29        FileDS DS("data.it","Data");            // Data Source 
     30        int ndat = DS.ndat();                           // number of data 
     31        memlog L(ndat);                                         // Logger 
     32        string resfile="k1_results.it";         // name of output file 
     33        vec dQ="0.1 0.1"; 
     34        vec dR="0.2 0.2";                                       // TODO: read from config file <== broken on windows 
     35         
    3036        //model vyvoje stavu 
    3137        IMk1 fxu; 
     
    3743 
    3844        // ESTIMATOR --- EKF 
    39         vec mu0= "0.0 0.0 0.0 0.0"; 
    4045        // Priprava covariancnich matic pro EKF 
    41         vec Qdiag ( "1.0 10. 10 10" );  
    42         vec Rdiag ( "1 1" ); //var(diff(xth)) = "0.034 0.034" 
    43         mat Q =diag( Qdiag ); 
    44         mat R =diag ( Rdiag ); 
    45         EKFfull Efix ( RVstav,RVpozor,RVut ); 
    46         // pocatecni podminky 
    47         Efix.set_est ( mu0, 1*eye ( 4 )  ); // nulova  
    48         // nastaveni modelu pro EKF 
    49         Efix.set_parameters ( &fxu,&hxu,Q,R); 
     46        EKFCh Efix;                                                             //Extended KF s fix. variancemi 
     47        Efix.set_parameters ( &fxu,&hxu,diag(dQ),diag(dR)); 
     48        Efix.set_statistics ( zeros(fxu.dimension()), 100*eye ( fxu.dimension() )  ); // nulova  
    5049 
    51         int L_xt = L.add(RVstav, "xt"); // Tady se rika jak velky vektor (pomoci obj. RV) se bude logovat  
    52                                                                                 // A jak se bude jsmenovat vysledek 
    53         int L_ut = L.add(RVut, "ut"); // Tady se rika jak velky vektor (pomoci obj. RV) se bude logovat  
    54                                                                                 // A jak se bude jsmenovat vysledek 
    55         int L_mean = L.add(RVstav, "odh_xt"); // Tady se rika jak velky vektor (pomoci obj. RV) se bude logovat  
    56                                                                                 // A jak se bude jsmenovat vysledek 
    57  
     50        // Definovat co se bude logovat 
     51        Efix.log_add(&L,"E"); 
    5852        L.init(); // <<==== allocate memory for results 
    59         // Priprava poli pro simulaci 
    60         vec ut(RVut.count());  
    61         vec xt(RVstav.count());  
    62         vec dt(RVpozor.count());  
    63         // minuly stav 
    64         vec xtm=zeros(RVstav.count()); // nulovy pocatecni stav 
    65         for ( int t=1;t<Ndat;t++ ) { 
    66                 // Nastaveni vstupu 
    67                 ut(0) = 1+sin((double)t/10); // V ut jsou same jednicky 
    68                 ut(1) = 1+cos((double)t/10); // V ut jsou same jednicky 
    69                  
    70                 // Generovani DAT modelem 
    71                 xt = fxu.eval(xtm,ut); 
    72                 dt = hxu.eval(xt,ut); 
    73                 xtm = xt; //save xt for the next step 
    74  
    75                 //ESTIMATE 
    76                 Efix.bayes(concat(dt,ut)); 
     53         
     54        vec dt; 
     55        for ( int t=1;t<ndat;t++ ) { 
     56                DS.getdata(dt);                 // dt is allocated 
     57                Efix.bayes(dt);                 //ESTIMATE 
    7758 
    7859                //LOG results 
    79                 L.logit(L_mean, Efix.posterior().mean() );  
    80                 L.logit(L_xt, xt );  
    81                 L.logit(L_ut, ut );  
     60                Efix.logit(&L);  
    8261                 
    8362                L.step(); 
     63                DS.step(); 
    8464        } 
    8565        L.finalize(); 
    86         L.itsave("k1.it"); 
     66        L.itsave(resfile.c_str()); 
    8767        return 0; 
    8868} 
  • doprava/model.h

    r278 r283  
    55 
    66using namespace bdm; 
    7  
    8 //Tady se naplni "popis" jednotlivych nahodnych velicin na kterych se pracuje 
    9 // Moznosti je velmi mnoho (viz doc/html/index.html): napriklad 
    10 RV RVstav ( "{stav }", "4");  // Vyrabim stav velikosti 4 
    11 RV RVut ( "{ut }", "2");     // Vstup velikosti 2 
    12 RV RVpozor ( "{I1 O1 }");     //Vystup je intenzita a obsazenost 
    137 
    148//! Model stredni hodnoty vyvoje stavu pro k1  
     
    1913public: 
    2014        //! Constructor 
    21         IMk1() :diffbifn (RVstav.count(), RVstav, RVut ) {};  
     15        IMk1() :diffbifn () {dimy=4; dimx=3; dimu=1;};  
    2216        //! set CONSTANT parameters 
    2317        void set_parameters ( double alp10,  double alp20) {alp1=alp10; alp2=alp20;} 
     
    2519        vec eval ( const vec &x0, const vec &u0 ) { 
    2620                // napln stav nulami 
    27                 vec xk=zeros ( RVstav.count() ); 
     21                vec xk=zeros ( dimy ); 
    2822 
    2923                xk ( 0 ) = 0.2* x0(1) - 0.1* x0(2)+ u0(0);  // vycucane z prstu 
     
    3933 
    4034                if (full) { // priznak full se nastavi na zacatku => je treba naplnit celou matici 
    41                         A = eye(RVstav.count()); 
     35                        A = eye(dimy); 
    4236                        A(0,1) = 0.2; 
    4337                        A(0,2) = -0.1; 
     
    5448public: 
    5549        //! Constructor 
    56         OMk1() :diffbifn (RVpozor.count(), RVstav, RVut ) {};  
     50        OMk1() :diffbifn ( ) {dimy=2;dimx=3;dimu=2;}; //<======= TODO  
    5751        // Model pozorovani  je trivialni jen se zkopiruji stavy 
    5852        vec eval(const vec &x0, const vec &u0 ){ 
    59                 vec dt(RVpozor.count()); 
     53                vec dt(dimy); 
    6054                // Pozoruji pouze prvni dva stavy 
    6155                dt(0) = x0(0); 
     
    6862 
    6963                if (full) { // priznak full se nastavi na zacatku => je treba naplnit celou matici 
    70                         A = zeros(RVpozor.count(),RVstav.count()); 
     64                        A = zeros(dimy,dimx); 
    7165                        A(0,0)=1.0; 
    7266                        A(1,1)=1.0;