Changeset 787

Show
Ignore:
Timestamp:
01/14/10 21:37:57 (14 years ago)
Author:
smidl
Message:

arena experiment + numerical fixes

Files:
5 modified

Legend:

Unmodified
Added
Removed
  • applications/bdmtoolbox/tutorial/mpdm/dist_ctrl_acc.m

    r786 r787  
    5050%P1.merger.dbg_file = 'mp.it'; 
    5151P1.merger.ncoms = 20; 
     52P1.merger.stop_niter= 5; 
    5253P1.neighbours = {};%{'P2'}; 
    5354 
     
    8889    Y = [M.DS_y1 M.DS_y2 M.DS_y3]; 
    8990    Yreq = ones(size(M.DS_y1))*[0 1 0]; 
    90     loss_non_coop(i) = trace((Y-Yreq)'*0.01*(Y-Yreq)) + M.DS_u1'*C1.Qu*M.DS_u1 + M.DS_u2'*C1.Qu*M.DS_u2; 
     91    loss_coop(i) = trace((Y-Yreq)'*0.01*(Y-Yreq)) + M.DS_u1'*C1.Qu*M.DS_u1 + M.DS_u2'*C1.Qu*M.DS_u2; 
    9192    if loss_coop(i)>100 
    9293        %keyboard 
  • applications/bdmtoolbox/tutorial/mpdm/dist_ctrl_example.m

    r781 r787  
    3131C1.Qy = 1*eye(1); 
    3232C1.yreq = 1; 
    33 C1.horizon = 5; 
     33C1.horizon = 1; 
    3434 
    3535C2=C1; 
     
    4444%P1.merger.dbg_file = 'mp.it'; 
    4545P1.merger.ncoms = 20; 
     46P1.merger.stop_niter= 5; 
    4647P1.neighbours = {};%{'P2'}; 
    4748 
     
    6061%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% MONTE CARLO %%%%%%%%%%%%%%%%%%% 
    6162 
    62 Ntrials = 100; 
     63Ntrials = 3; 
    6364loss_non_coop = zeros(1,Ntrials); 
    6465for i=1:Ntrials 
    6566    M= arena(DS,{P1,P2},exper); 
    6667 
    67     loss_non_coop(i) = M.DS_y'*C1.Qy*M.DS_y + M.DS_u1'*C1.Qu*M.DS_u1 + M.DS_u2'*C1.Qu*M.DS_u2; 
     68    loss_non_coop(i) = (M.DS_y-C1.yreq)'*C1.Qy*(M.DS_y-C1.yreq) + M.DS_u1'*C1.Qu*M.DS_u1 + M.DS_u2'*C1.Qu*M.DS_u2; 
    6869    if loss_non_coop(i)>100 
    6970        %keyboard 
     
    7879    M= arena(DS,{P1,P2},exper); 
    7980 
    80     loss_coop(i) = M.DS_y'*C1.Qy*M.DS_y + M.DS_u1'*C1.Qu*M.DS_u1 + M.DS_u2'*C1.Qu*M.DS_u2; 
     81    loss_coop(i) = (M.DS_y-C1.yreq)'*C1.Qy*(M.DS_y-C1.yreq) + M.DS_u1'*C1.Qu*M.DS_u1 + M.DS_u2'*C1.Qu*M.DS_u2; 
    8182    if loss_coop(i)>100 
    8283        %keyboard 
  • library/bdm/itpp_ext.cpp

    r766 r787  
    390390void triu ( mat &A ) { 
    391391        for ( int i = 1; i < A.rows(); i++ ) { // row cycle 
    392                 for ( int j = 0; j < i; j++ ) { 
     392                for ( int j = 0; (j < i) && (j<A.cols()); j++ ) { 
    393393                        A ( i, j ) = 0; 
    394394                } 
  • library/bdm/mpdm/arx_agent.h

    r776 r787  
    6565                } 
    6666                void adapt(const vec &glob_dt){                  
    67                         dlDt.filldown(glob_dt, dt); 
     67                        dlDt.filldown(glob_dt, dt);  
     68                        dlDt.store_data(glob_dt); // do not ever use dlDt again!  
     69                         
    6870                        lqg_arx->adapt(dt); 
    6971                        // remove old predictors 
     
    8082                                merger->merge(); 
    8183                                enorm<chmat> joint_pred;  
    82                                 joint_pred.set_parameters(merger->mean(), merger->covariance()); 
     84                                mat Cov=merger->covariance(); 
     85                                if (sumsum(Cov)==0.0){ 
     86                                        bdm_error("merging failed"); 
     87                                } 
     88                                joint_pred.set_parameters(merger->mean(), Cov); 
    8389                                joint_pred.set_rv(merger->_rv()); 
    8490                                 
     
    96102                        ut=lqg_arx->ctrlaction(dt); 
    97103                        dlU.filldown(ut,glob_ut); 
    98                         // save dat for next time 
    99                         dlDt.store_data(dt); 
    100104                } 
    101105                virtual void ds_register(const DS &ds){ 
  • library/bdm/stat/merger.cpp

    r773 r787  
    163163        mat Tmp = zeros ( dim, dim ); 
    164164        for ( int i = 0; i < Npoints; i++ ) { 
    165                 Tmp += w ( i ) * outer_product ( S ( i ), S ( i ) ); 
    166         } 
    167         return Tmp - outer_product ( mea, mea ); 
     165                vec tmp=S ( i )-mea; //inefficient but numerically stable 
     166                Tmp += w ( i ) * outer_product (tmp , tmp ); 
     167        } 
     168        return Tmp; 
    168169} 
    169170 
     
    174175void merger_mix::merge ( ) { 
    175176        if(Npoints<1){ 
    176                 set_support(enorm<fsqmat>(zeros(dim), eye(dim)), 100); 
     177                set_support(enorm<fsqmat>(zeros(dim), eye(dim)), 1000); 
    177178        } 
    178179