Show
Ignore:
Timestamp:
04/27/11 19:00:36 (13 years ago)
Author:
sindj
Message:

Zacatky experimentovani v robustlib. Zacleneni vypoctu polynomialni rovnice pro optimalni akci s vyuzitim funkce itpp::roots(). Odstranovani zbylych chyb. JS

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • applications/trading_models/trading_models_main.cpp

    r1266 r1338  
    77 */ 
    88 
     9//<<<<<<< .mine 
     10#include "trading_models_lib.h" 
     11#include <iostream>  
     12#include "estim/arx.h" 
     13//======= 
    914#include "trading_models_lib.h" 
    1015#include "estim/arx.h" 
     16#include <vector> 
     17#include <string> 
     18#include <sstream> 
     19#include <fstream> 
     20 
     21 
     22//>>>>>>> .r1284 
    1123using namespace bdm; 
    1224 
    13  
    14  
    15 int main ( int argc, char* argv[] ) { 
    16  
    17         for(int i=0;i<10000;i++) 
     25/* 
     26string cislo(string s)   // tato procedura spracova tie cisla z toho textoveho suboru tak aby sa odstranilo to e-001 a boli v spravnom  
     27                                                //formate. Lebo predtym to vyhadyovalo divne cisla, nevedel som ci je to zato, ze bayes si  stym neporadi, ale yjavne nepomohlo 
     28{ 
     29        int b=s.find('e'); 
     30        string t=s.substr(0,b); 
     31        string poz=s.substr(b+1,s.size()); 
     32 
     33        istringstream g(poz); 
     34        int pozc; 
     35        g>>pozc; 
     36        istringstream k(t); 
     37        double csl; 
     38        k>>csl; 
     39        if (pozc<0) //pozc moze byt niekedy aj kladne 
    1840        { 
    19                 cout << i; 
     41                for(int i=1;i<=-pozc;i++) 
     42                csl/=10; 
     43        } else 
     44        {  
     45                for(int j=1;j<=pozc;j++) 
     46                csl*=10; 
    2047        } 
    21          //prior 
    22     mat V0 = 0.00001 * eye ( 2 ); 
    23     V0 ( 0, 0 ) = 0.1; // 
    24     ARX Ar; 
    25     Ar.set_statistics ( 1, V0 ); //nu is default (set to have finite moments) 
    26     Ar.set_constant ( true ); 
    27     Ar.validate(); 
    28     // forgetting is default: 1.0 
    29     mat Data = concat_vertical ( randn ( 1, 100 ), ones ( 1, 100 ) ); 
    30     Ar.bayes_batch ( Data ); 
    31  
    32  
    33 } 
    34  
     48         
     49        ostringstream o; 
     50        o<<csl; 
     51        return o.str(); 
     52} */ 
     53 
     54double sumastlpec(int k,vector<vec> pole,vector<vec> pravd) {  //robi sumu k-teho stlpca, pouzivam na konci pri ratani pravdepodobnosti 
     55        double r=0; 
     56        for (int i=0;i<pole.size();i++) 
     57        { 
     58                r+=pole[i][k]*pravd[i][k]; 
     59        } 
     60        return r; 
     61                } 
     62 
     63int main () { 
     64        vector<vector<string>> ADdata;     //nacitavanie dat do pola ADdata -funguje spravne 
     65                ifstream myfile("C:\\AD_dataupravene.txt"); 
     66                if (myfile.is_open()) 
     67                { 
     68                        while ( myfile.good() ) 
     69                        { 
     70                                string line; 
     71                                getline(myfile,line); 
     72                                vector<string> parsed_line;                               
     73                                while(line.find(' ') != string::npos) //jeden kanal je jeden riadok, na zaciatku a na konci {,}, data oddelene ciarkou a medzerou. 
     74                                { 
     75                                        line.erase(0,1);   //toto nie je yrovna peknz sposob,ale pri poslednom nacitani cisla v riadku sme uz nemali ziadnu medyeru a cyklus by sa posledny krat nevykonal, tak tu medzeru odstranujeme vzdy tu 
     76                                        int loc = line.find(',');   //ale pri poslednom cisla to nenajde ziadnu ciaarku, tak potom co prida do parsed_line? 
     77                                        parsed_line.push_back(line.substr(0,loc));       
     78                                        line.erase(0,loc+1);                            //odstranujeme ciarku za kazdym cislom 
     79                                }                                
     80                                ADdata.push_back(parsed_line); //3927 dat v riadku, 6 riadkov 
     81                        } 
     82                } 
     83                myfile.close();  //konec nacitavania dat 
     84 
     85                vector<vec> norm; //do norm zapisujeme normalizacne faktory 
     86                for (int h=1;h<=2;h++) //cyklus ktory ovplzvnuje konstantu h=1- model s konstantou, h=2, bez konstanty 
     87                {  
     88                        bool b;                 //b pouzivame pri set_constant 
     89                        if(h==2) 
     90                                b=false;    
     91                        else 
     92                                b=true; 
     93                        int g=2; 
     94                        while (g<=4)  //cyklus co meni rozmery matice V 
     95                        { 
     96                                mat V0 = 0.0001 * eye ( g ); // aj tato matica ma vplyv na normalizacny faktor, nemoze byt aj preto taky velky, ako inak by sa dala zvolit? 
     97                                 
     98                                int p=0; 
     99                                while (p<=1)  //tento cyklus prechadza vacsinou len raz, vtedy p=0 a nic to neovplvni, ale pri AR(2) modely to bude vykonavat 2 krat aj pre p=1, ked bude brat do condition aj rozne kanale z toho isteho casu  
     100                                { 
     101                                        int i=0; 
     102                                        while(i < ADdata.size()-p) //niekedy sa ten cyklus ma vykonat len raz, preto nepouzivam for cyklus 
     103                                        {        
     104                                                int j=p*(i+1); //j=0 alebo j=i+1 
     105                                         
     106                                                while(j < ADdata.size()) 
     107                                                { 
     108                                                        ARX Ar; 
     109                                                        Ar.set_statistics ( 1, V0 ); //nu is default (set to have finite moments) 
     110                                                        Ar.set_constant ( b ); 
     111                                                        Ar.validate();  // forgetting is default: 1.0 
     112                                                        vec pomocka;  //pri kazdej jednej hypoteze zapisujeme normalizacne faktory do pomocky, tu potom ako riadok pridame do norm 
     113                                                        for(int k = 0;k<341;k++) //prechadyame "po riadkoch", teda v case. Nejake hodnoty su len po index 340, dalej uz #INF000 
     114                                                        { 
     115                                                                vec condition;   
     116                                                                vec predikce; 
     117                                                                predikce.ins(0,ADdata[3][k+2]);                 //predpovede nacitavame a zadavame do Bayes zvlast 
     118                                                                condition.ins(0,ADdata[i][k+1]);                                         
     119                                                                condition.ins(0,ADdata[j][k+p]);//zmena i -> j aby to bralo regresory z roznych riadkov, ak p=1 bereme data z toho isteho casu 
     120                                                                 
     121                                                                cout << "Pred:" << predikce << ", "; 
     122                                                                cout << "Cond:" << condition << endl; 
     123                                                                 
     124                                                                Ar.bayes(predikce,condition.right(g+h-3));      //z condition berem len urcity pocet prvkov, bud 0, 1,alebo 2, lebo nepotrebujem vzdy vsetky (AR(1) model)                                       
     125                                                                pomocka.ins(pomocka.size(),Ar.posterior().lognc()); //nie je tu exponenciala! -aby to bolo mensie 
     126                                                        }                                        
     127                                                        norm.push_back(pomocka);   
     128                                                        if ((g==3 && h==2) || (g==4))  //tento cyklus sa bude opakovat, len ak mame maticu V0 roymeru 4x4, to je AR(2) model s konst, alebo podobne len g=3, h=2, teda AR(2)bez kons 
     129                                                        { 
     130                                                                j++; 
     131                                                        } else 
     132                                                        { 
     133                                                                j=ADdata.size();        //priradenim tejto hodnoty do j sa cyklus uz viac krat nevykona 
     134                                                        } 
     135                                                } 
     136                                                if (b==true && g==2) //pre model AR(0) s konstantou robi tento cyklus len raz, v ostatnych pripadoch viac-krat 
     137                                                { 
     138                                                        i=ADdata.size(); 
     139                                                } else 
     140                                                { 
     141                                                        i++; 
     142                                                } 
     143                                        } 
     144                                        if ((g==3 && h==2) || (g==4) ) 
     145                                        {p++;} else {p=2;} 
     146                                } 
     147                                if (h==2 && g==3) //pripad g=4, a konstanta zaroven nas uz nezaujima, vtedy to ukoncime 
     148                                { 
     149                                        g=5; //ak priradime takuto hodnotu, cyklus while sa uz nevykona 
     150                                } else 
     151                                { 
     152                                        g++; 
     153                                } 
     154                        } 
     155                } 
     156 
     157                /*  //tu je to povodne 
     158                mat V0 = 0.0001 * eye ( 2 );  //pre pripad samotnej konstanty 
     159                ARX Ar; 
     160                Ar.set_statistics ( 1, V0 ); //nu is default (set to have finite moments) 
     161                Ar.set_constant ( true ); 
     162                Ar.validate();                  // forgetting is default: 1.0 
     163                vector<double> pom1; 
     164                for(int k = 0;k<140;k++) //prechadyame "po riadkoch"  
     165                        { 
     166                                vec predikce; 
     167                                vec cond; 
     168                                cond.ins(0,ADdata[3][3]); 
     169                                predikce.ins(0,ADdata[3][k+2]);                 //predpovede nacitavame a zadavame do Bayes zvlast 
     170                                Ar.bayes(predikce,cond.right(0));                                        
     171                                pom1.push_back(exp(Ar.posterior().lognc())); 
     172                        }   
     173                norm.push_back(pom1);   
     174                 
     175                for (int a=2;a<=3;a++)  //AR(1) bez a potom s konstantou 
     176                { 
     177                        bool b=false;                   //b pouzivame pri set_constant 
     178                        if(a==3) 
     179                                b=true; 
     180                        mat V0 = 0.0001 * eye ( a );  //pre pripad samotnej konstanty 
     181                         
     182                        for (int p=0;p < ADdata.size();p++) 
     183                        { 
     184                                ARX Ar; 
     185                                Ar.set_statistics ( 1, V0 ); //nu is default (set to have finite moments) 
     186                                Ar.set_constant ( b ); 
     187                                Ar.validate();                  // forgetting is default: 1.0 
     188                                vector<double> pom1; 
     189                                for(int k = 0;k<140;k++) //prechadyame "po riadkoch"  
     190                                { 
     191                                        vec predikce; 
     192                                        vec condition; 
     193                                        condition.ins(0,ADdata[p][k]); 
     194                                        predikce.ins(0,ADdata[3][k+1]);                 //predpovede nacitavame a zadavame do Bayes zvlast 
     195                                        Ar.bayes(predikce,condition);                                    
     196                                        pom1.push_back(exp(Ar.posterior().lognc())); 
     197                                }   
     198                                norm.push_back(pom1);  //normalizacne faktory pre urcitu kombinaciu regresorov(teda po kazdom riadku) ulozi do pola norm 
     199                        } 
     200                } 
     201                 
     202                 
     203                for (int g=3;g<=4;g++)  //tento cyklus je az do konca, raz to robime s konstantou, raz bez. 
     204                { 
     205                        bool b;                 //b pouzivame pri set_constant 
     206                        if(g==3) 
     207                                b=false;    
     208                        else 
     209                                b=true; 
     210                        mat V0 = 0.0001 * eye ( g ); 
     211                        for(int i = 0;i < ADdata.size();i++) //po pocet riadkov, co bz malo byt 6 
     212                        { 
     213                                for(int j = i+1; j<ADdata.size();j++) 
     214                                { 
     215                                        ARX Ar; 
     216                                        Ar.set_statistics ( 1, V0 ); //nu is default (set to have finite moments) 
     217                                        Ar.set_constant ( b ); 
     218                                        Ar.validate(); 
     219                                                        // forgetting is default: 1.0 
     220                                        vector<double> pomocka; 
     221                                        for(int k = 0;k<140;k++) //prechadyame "po riadkoch"  
     222                                        { 
     223                                                vec condition;   
     224                                                vec predikce; 
     225                                                predikce.ins(0,ADdata[3][k+1]);                 //predpovede nacitavame a zadavame do Bayes zvlast 
     226                                                condition.ins(0,ADdata[i][k]);                                           
     227                                                condition.ins(0,ADdata[j][k]);//zmena i -> j qby to bralo regresory z roznych riadkov                    
     228                                                Ar.bayes(predikce,condition);                                    
     229                                                pomocka.push_back(exp(Ar.posterior().lognc())); 
     230                                        }                                        
     231                                        norm.push_back(pomocka);   
     232                                } 
     233                        }                
     234                        for(int i = 0;i < ADdata.size();i++) //po pocet riadkov, co bz malo byt 6 
     235                        { 
     236                                for(int j = 0; j<ADdata.size();j++) 
     237                                { 
     238                                        ARX Ar; 
     239                                        Ar.set_statistics ( 1, V0 ); //nu is default (set to have finite moments) 
     240                                        Ar.set_constant ( b ); 
     241                                        Ar.validate(); 
     242                                                        // forgetting is default: 1.0 
     243                                        vector<double> pomocka; 
     244                                        for(int k = 0;k<140;k++) //prechadyame "po riadkoch"  
     245                                        { 
     246                                                vec condition;   
     247                                                vec predikce; 
     248                                                predikce.ins(0,ADdata[3][k+2]);                 //predpovede nacitavame a zadavame do Bayes zvlast 
     249                                                condition.ins(0,ADdata[i][k]);  
     250                                                 
     251                                                condition.ins(0,ADdata[j][k+1]);//zmena i -> j qby to bralo regresory z roznych riadkov                  
     252                                                Ar.bayes(predikce,condition);                                    
     253                                                pomocka.push_back(Ar.posterior().lognc()); 
     254                                        }   
     255                                         
     256                                        norm.push_back(pomocka);   
     257                                } 
     258                        } 
     259                }*/ 
     260                        vector<vec> prsti; //hypotez je 85 
     261                        int m,n,p; 
     262                        for(p=0;p<115;p++) //inicializuem apriorne pravdepodobnosti 
     263                        { 
     264                                vec k; 
     265                                k.ins(0,1/115.); 
     266                                prsti.push_back(k); 
     267                        } 
     268                        // v ramci riadku v poli norm su hodnoty pre jednu hypotezu v roznych casoch, pocitanie pravdepodobnosti z norm. faktorov 
     269                        for (m=0;m<norm[1].size();m++)  
     270                        {       double k=sumastlpec(m,norm,prsti); 
     271                                for(n=0;n < norm.size();n++) 
     272                                { 
     273                                        prsti[n].ins(prsti[n].size(),norm[n][m]*prsti[n][m]/k);                          
     274                                } 
     275                        }                
     276                        ofstream file;  //zapis pravdepodobnosti do suboru 
     277                        file.open("prsti_hypot.txt"); 
     278                        for(int i=0;i < prsti.size();i++) 
     279                        { 
     280                                for(int j=0;j < prsti[i].size();j++) 
     281                                { 
     282                                        if(j!=prsti[i].size()-1) 
     283                                        { 
     284                                                file << prsti[i][j]<<" "; 
     285                                        }else 
     286                                        { 
     287                                                file<<prsti[i][j]<<endl; 
     288                                        }                                        
     289                                } 
     290                        } 
     291                        file<<endl; 
     292                        file.close(); 
     293                 
     294        } 
     295 
     296 
     297