Changeset 744 for applications

Show
Ignore:
Timestamp:
11/28/09 14:38:48 (15 years ago)
Author:
smidl
Message:

Working unitsteps and controlloop + corresponding fixes

Location:
applications
Files:
1 added
9 modified

Legend:

Unmodified
Added
Removed
  • applications/bdmtoolbox/Doxyfile

    r613 r744  
    2626INLINE_INHERITED_MEMB  = YES 
    2727FULL_PATH_NAMES        = NO 
    28 STRIP_FROM_PATH        = /home/smidl/ 
     28STRIP_FROM_PATH        = /home/smidl/work/git/mixpp 
    2929STRIP_FROM_INC_PATH    =  
    3030SHORT_NAMES            = NO 
     
    246246# configuration options related to the XML output 
    247247#--------------------------------------------------------------------------- 
    248 GENERATE_XML           = yes 
     248GENERATE_XML           = NO 
    249249XML_OUTPUT             = xml 
    250250XML_SCHEMA             =  
  • applications/bdmtoolbox/mex/controlloop.cpp

    r723 r744  
    77digraph estimation{ 
    88        node [shape=box]; 
    9         {rank="same"; "Data Source"; "Bayesian Model"} 
    10         "Data Source" -> "Bayesian Model" [label="data"]; 
    11         "Bayesian Model" -> "Result Logger" [label="estimated\n statistics"]; 
     9        subgraph cl0 { 
     10        "Data Source" -> "Controller" [label="observations"]; 
     11        "Controller" -> "Data Source" [label="actions"]; 
     12        } 
     13        {rank="same"; "Controller"; "Result Logger"} 
     14        "Controller" -> "Result Logger" [label="internals"]; 
    1215        "Data Source" -> "Result Logger" [label="Simulated\n data"]; 
    1316} 
     
    8790                if ( n_input>3 ) { 
    8891                        Cfg.addGroup ( input[3],"logger" ); 
    89                 }/*else{ 
    90                 // define logger as mexlog 
    91                 Setting &S=Cfg.getRoot(); 
    92                 S.add("logger",Setting::TypeGroup); 
    93                 S["logger"].add("class",Setting::TypeString); 
    94                 S["logger"]["class"]="mexlog"; 
    95                 S["logger"].add("maxlen",Setting::TypeInt); 
    96                 int maxlen; 
    97                 S["experiment"].lookupValue("ndat",maxlen); 
    98                 S["logger"]["maxlen"]=maxlen; 
    99         }*/ 
     92                } 
    10093        } catch ( SettingException e ) { 
    10194                it_error ( "error: "+string ( e.getPath() ) ); 
     
    116109#endif 
    117110 
     111        RNG_randomize(); 
     112         
    118113        shared_ptr<DS> Ds = UI::build<DS> ( Cfg, "system" ); 
    119114        Array<shared_ptr<Controller> > Cs; 
    120115        UI::get ( Cs,Cfg, "controllers" ); 
    121116        int Ndat=100; 
     117        int burnin=10; 
    122118        if ( Cfg.exists ( "experiment" ) ) { 
    123119                if ( Cfg.getRoot().lookupValue ( "experiment.ndat",Ndat ) ) { 
     
    178174        } 
    179175 
     176        vec ut(Ds->_urv()._dsize()); 
    180177        for ( int tK=0;tK<Ndat;tK++ ) { 
    181178                Ds->getdata ( dt );                                     // read data 
     
    186183                                Cs(i) -> redesign(); 
    187184                                Cs(i) -> adapt( Dlsc(i) ->pushdown(dt)); 
    188                                 vec ut=Cs ( i )->ctrlaction ( Dlsc(i) ->pushdown(dt) );         // update estimates 
    189                                 Ds->write(ut, vec_1(0)); 
     185                        } 
     186                        if (tK > burnin){ 
     187                                vec uti=Cs ( i )->ctrlaction ( Dlsc(i) ->pushdown(dt) );                // update estimates 
     188                                Dlsu(i)->filldown(uti, ut); 
    190189                        } else { 
    191                                 Ds->write(0.001*randn(Ds->_urv()._dsize())); 
     190                                ut = 0.1*randn(Ds->_urv()._dsize()); 
    192191                        } 
    193192                         
    194193                        Cs ( i )->log_write (); 
    195194                } 
     195                Ds->write(ut); 
    196196                 
    197197                L->step(); 
  • applications/bdmtoolbox/tutorial/merging/merge_frag.m

    r706 r744  
    1616Merger.ncoms=20; 
    1717Merger.stop_niter=50; 
    18 Merger.effss_coef=1; 
     18Merger.effss_coef=0.9; 
    1919%Merger.dbg_file='merger_mix_dbg'; 
    2020 
     
    3232    'R',1); 
    3333% 2D support 
    34 support2.grid={[-5,5],[0.001,9]}; 
    35 support2.nbins=[30,30]; 
     34support2.class='rectangular_support'; 
     35support2.ranges={[-5,5],[0.001,9]}; 
     36support2.gridsizes=[30,30]; 
    3637 
    3738% 2D 
  • applications/bdmtoolbox/tutorial/userguide/arx_ctrl_example.m

    r724 r744  
    11% name random variables 
    22y = RV({'y'},1); 
    3 u = RV({'u'},1); 
     3u1 = RV({'u1'},1); 
     4u2 = RV({'u2'},1); 
    45 
    56% create f(y_t| y_{t-3}, u_{t-1}) 
    67fy.class = 'mlnorm<ldmat>'; 
    78fy.rv    = y; 
    8 fy.rvc   = RVtimes([y,u], [-3, -1]); 
    9 fy.A     = [0.5, -0.9]; 
     9fy.rvc   = RVtimes([y,u1,u2], [-3, 0, 0]); 
     10fy.A     = [0.5, -0.9, 0.9]; 
    1011fy.const = 0; 
    1112fy.R     = 1e-2; 
     
    1718A1.class = 'ARX'; 
    1819A1.rv = y; 
    19 A1.rgr = RVtimes([y,u],[-3,-1]) ; % correct structure is {y,y} 
     20A1.rgr = RVtimes([y,u1,u2],[-3,0,0]) ; % correct structure is {y,y} 
    2021A1.options ='logbounds,logll'; 
    2122 
    2223C1.class = 'LQG_ARX'; 
    2324C1.ARX = A1; 
    24 C1.Qu = 0.1*eye(1); 
     25C1.Qu = 0.1*eye(2); 
    2526C1.Qy = eye(1); 
    2627C1.yreq = 1; 
    2728C1.horizon = 100; 
    2829 
     30% participant 1 
     31Cp1. 
     32 
    2933M= controlloop(DS,{C1}); 
  • applications/pmsm/CMakeLists.txt

    r654 r744  
    3333#EXEC (sim_var pmsmsim) 
    3434 
    35 #add_subdirectory (TR2245) 
     35add_subdirectory (TR2245) 
  • applications/pmsm/TR2245/CMakeLists.txt

    r294 r744  
    22EXEC (unitsteps pmsmsim) 
    33EXEC (wishart pmsmsim) 
    4 EXEC (pmsm_wishart pmsmsim) 
     4#EXEC (pmsm_wishart pmsmsim) 
  • applications/pmsm/TR2245/unitsteps.cfg

    r294 r744  
    11ndat = 9000; 
    2 Npart = 1000; 
     2Npart = 100; 
    33 
    44//simulator  
    55profile = [1,2,4,9,4,2,0,-4,-9,-16,-4,0,0]; 
    66 
    7 logger = {type="dirfilelog"; dirname="exp/unitstep"; maxlen=100;}; 
     7logger = {class="dirfilelog"; dirname="kst/unitstep"; maxlen=100;}; 
    88 
    9 Qrw = {type="migamma_ref"; 
    10         ref = [1e-6, 1e-6, 1e-3, 1e-4]; 
     9Qrw = {class="migamma_ref"; 
     10        ref = [1e-4, 1e-4, 1e-3, 1e-4]; 
    1111        l = 0.999; 
    12         k = 0.1; 
     12        k = 0.06; 
    1313}; 
    1414// For EKF 
    1515dQ=[1e-5, 1e-5, 1e-4, 1e-5]; 
    16 dR=[1e-8, 1e-8]; 
     16dR=[1e-10, 1e-10]; 
    1717 
  • applications/pmsm/TR2245/unitsteps.cpp

    r706 r744  
    1515#include <estim/particles.h> 
    1616#include <estim/ekf_template.h> 
    17 #include <stat/functions.h> 
     17#include <base/loggers.h> 
    1818 
    1919 
     
    2121#include "simulator.h" 
    2222#include "../sim_profiles.h" 
    23 #include "user_info.h" 
    24 #include "stat/loggers.h" 
    2523 
    2624using namespace bdm; 
     
    4139        F.lookupValue ( "ndat", Ndat ); 
    4240        F.lookupValue ( "Npart",Npart ); 
    43         pdf* evolQ = UI::build<pdf>( F, "Qrw" ); 
     41        shared_ptr<pdf> evolQ = UI::build<pdf>( F, "Qrw" ); 
    4442        vec Qdiag; 
    4543        vec Rdiag; 
     
    4947        // internal model 
    5048 
    51 IMpmsm fxu; 
     49        shared_ptr<IMpmsm> fxu= new IMpmsm; 
    5250//                  Rs    Ls        dt       Fmag(Ypm)    kp   p    J     Bf(Mz) 
    53 fxu.set_parameters ( 0.28, 0.003465, Nsimstep*h, 0.1989, 1.5 ,4.0, 0.04, 0.0 ); 
     51        fxu->set_parameters ( 0.28, 0.003465, Nsimstep*h, 0.1989, 1.5 ,4.0, 0.04, 0.0 ); 
    5452        // observation model 
    55         OMpmsm hxu; 
     53        shared_ptr<OMpmsm> hxu=new OMpmsm; 
    5654 
    5755        vec mu0= "0.0 0.0 0.0 0.0"; 
     
    5957        chmat R ( Rdiag ); 
    6058        EKFCh KFE ; 
    61         KFE.set_parameters ( &fxu,&hxu,Q,R ); 
    62         KFE.set_est ( mu0, chmat ( zeros ( 4 ) ) ); 
     59        KFE.set_parameters ( fxu,hxu,Q,R ); 
     60        KFE.set_statistics ( mu0, chmat ( zeros ( 4 ) ) ); 
    6361        KFE.set_rv ( rx ); 
     62        KFE.validate(); 
    6463 
    6564        RV rQ ( "{Q }","4" ); 
     65        RV rU ("{u }","2"); 
     66        RV rY ("{y }","2"); 
    6667        EKFCh_dQ KFEp ; 
    67         KFEp.set_parameters ( &fxu,&hxu,Q,R ); 
    68         KFEp.set_est ( mu0, chmat ( zeros ( 4 ) ) ); 
     68        KFEp.set_parameters ( fxu,hxu,Q,R ); 
     69        KFEp.set_statistics ( mu0, chmat ( zeros ( 4 ) ) ); 
     70        KFEp.set_rv(rx); 
     71        KFEp.set_yrv(rY);  
     72        KFEp.set_rvc(concat(rU, rQ));  
     73        KFEp.validate(); 
    6974 
    70         MPF<EKFCh_dQ> M; 
    71         M.set_parameters ( evolQ,evolQ,Npart ); 
    72         // initialize 
    73         evolQ->condition ( 10*Qdiag ); //Zdenek default 
    74         M.set_statistics ( evolQ->_e() , &KFEp ); 
    75         // 
     75        MPF M; 
     76        evolQ->set_rv(rQ); 
     77        M.set_pf ( evolQ,Npart ); 
     78        M._pf().set_statistics(ones(Npart), euni(zeros(4),2*Qdiag)); 
     79        M.set_BM(KFEp); 
     80        M.set_yrv ( rY   ); 
     81        M.set_rvc ( rU   ); 
     82        M.validate(); 
    7683 
    77         M.set_rv ( concat ( rQ,rx ) ); 
    78  
    79         dirfilelog *L = UI::build<dirfilelog>( F, "logger" );// ( "exp/mpf_test",100 ); 
    80         int l_X = L->add ( rx, "xt" ); 
    81         int l_D = L->add ( concat ( ry,ru ), "" ); 
    82         int l_Q= L->add ( rQ, "" ); 
     84        shared_ptr<dirfilelog> L = UI::build<dirfilelog>( F, "logger" );// ( "exp/mpf_test",100 ); 
     85        int l_X = L->add_vector ( rx, "xt" ); 
     86        int l_D = L->add_vector ( concat ( ry,ru ), "" ); 
     87        int l_Q= L->add_vector ( rQ, "" ); 
    8388 
    8489        KFE.set_options ( "logbounds" ); 
    85         KFE.log_add ( *L,"KF" ); 
     90        KFE.log_register ( *L,"KF" ); 
    8691        M.set_options ( "logbounds" ); 
    87         M.log_add ( *L,"M" ); 
     92        M.log_register ( *L,"M" ); 
    8893        L->init(); 
    8994 
     
    107112                ut ( 0 ) = KalmanObs[4]; 
    108113                ut ( 1 ) = KalmanObs[5]; 
    109                 xt = fxu.eval ( xtm,ut ) + diag ( sqrt ( Qdiag ) ) *randn ( 4 ); 
    110                 dt = hxu.eval ( xt,ut ); 
     114                xt = fxu->eval ( xtm,ut ) + diag ( sqrt ( Qdiag ) ) *randn ( 4 ); 
     115                dt = hxu->eval ( xt,ut ) + diag(sqrt(Rdiag))*randn(2); 
    111116                xtm = xt; 
    112117 
     
    122127 
    123128                //estimator 
    124                 KFE.bayes ( concat ( dt,ut ) ); 
    125                 M.bayes ( concat ( dt,ut ) ); 
     129                KFE.bayes (  dt,ut ); 
     130                M.bayes ( dt,ut ); 
    126131 
    127                 L->logit ( l_X,xt ); 
    128                 L->logit ( l_D,concat ( dt,ut ) ); 
    129                 L->logit ( l_Q,Qdiag ); 
     132                L->log_vector ( l_X,xt ); 
     133                L->log_vector ( l_D,concat ( dt,ut ) ); 
     134                L->log_vector ( l_Q,Qdiag ); 
    130135 
    131                 KFE.logit ( *L ); 
    132                 M.logit ( *L ); 
     136                KFE.log_write ( ); 
     137                M.log_write ( ); 
    133138                L->step(); 
    134139        } 
     
    136141        //Exit program: 
    137142 
    138         delete L; 
    139143        return 0; 
    140144} 
  • applications/pmsm/pmsmDS.h

    r686 r744  
    118118    void log_register ( logger &L ) 
    119119    { 
    120         L_x = L.add ( rx, "x" ); 
    121         L_oy = L.add ( ry, "o" ); 
    122         L_ou = L.add ( ru, "o" ); 
    123         L_iu = L.add ( ru, "t" ); 
     120        L_x = L.add_vector ( rx, "x" ); 
     121        L_oy = L.add_vector ( ry, "o" ); 
     122        L_ou = L.add_vector ( ru, "o" ); 
     123        L_iu = L.add_vector ( ru, "t" ); 
    124124        // log differences 
    125125        if ( opt_modu ) 
    126126        { 
    127             L_optu = L.add ( ru, "model" ); 
     127            L_optu = L.add_vector ( ru, "model" ); 
    128128        } 
    129129    } 
     
    131131    void log_write ( logger &L ) 
    132132    { 
    133         L.logit ( L_x, vec ( x,4 )      ); 
    134         L.logit ( L_oy, vec_2 ( KalmanObs[2],KalmanObs[3] ) ); 
    135         L.logit ( L_ou, vec_2 ( KalmanObs[0],KalmanObs[1] ) ); 
    136         L.logit ( L_iu, vec_2 ( KalmanObs[4],KalmanObs[5] ) ); 
     133        L.log_vector ( L_x, vec ( x,4 ) ); 
     134        L.log_vector ( L_oy, vec_2 ( KalmanObs[2],KalmanObs[3] ) ); 
     135        L.log_vector ( L_ou, vec_2 ( KalmanObs[0],KalmanObs[1] ) ); 
     136        L.log_vector ( L_iu, vec_2 ( KalmanObs[4],KalmanObs[5] ) ); 
    137137        if ( opt_modu ) 
    138138        { 
     
    151151            ua = ( 2.0* ( u1-du1 )- ( u2-du2 )- ( u3-du3 ) ) /3.0; 
    152152            ub = ( ( u2-du2 )- ( u3-du3 ) ) /sq3; 
    153             L.logit ( L_optu , vec_2 ( ua,ub ) ); 
     153            L.log_vector ( L_optu , vec_2 ( ua,ub ) ); 
    154154        } 
    155155 
     
    238238    void log_add(logger &L, const string &name="" ) 
    239239    { 
    240         L_CRB=L.add(rx,"crb"); 
    241         L_err=L.add(rx,"err"); 
    242         L_sec=L.add(rx,"d2"); 
     240        L_CRB=L.add_vector(rx,"crb"); 
     241        L_err=L.add_vector(rx,"err"); 
     242        L_sec=L.add_vector(rx,"d2"); 
    243243    } 
    244244    void logit(logger &L) 
    245245    { 
    246         L.logit(L_err, interr); 
    247         L.logit(L_CRB,diag(_R())); 
    248         L.logit(L_sec,secder); 
     246        L.log_vector(L_err, interr); 
     247        L.log_vector(L_CRB,diag(_R())); 
     248        L.log_vector(L_sec,secder); 
    249249    } 
    250250 
     
    322322    void log_add(logger &L, const string &name="" ) 
    323323    { 
    324         L_CRB=L.add(concat(rx,RV("Mz",1,0)),"crbz"); 
     324        L_CRB=L.add_vector(concat(rx,RV("Mz",1,0)),"crbz"); 
    325325    } 
    326326    void logit(logger &L) 
    327327    { 
    328         L.logit(L_CRB,diag(_R())); 
     328        L.log_vector(L_CRB,diag(_R())); 
    329329    } 
    330330