Show
Ignore:
Timestamp:
12/09/11 17:53:36 (12 years ago)
Author:
sindj
Message:

Update hlavnich casti z Thinkeru. JS

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • applications/robust/main.cpp

    r1412 r1413  
    3131const int max_model_order         = 2; 
    3232const double apriorno             = 0.01; 
    33 const int max_window_size         = 40; 
     33const int max_window_size         = 30; 
    3434const int utility_order           = 25; 
    3535const int prediction_time         = 30; 
    3636const double min_utility_argument = 0.001; 
    3737const double max_investment       = 10.0; 
    38 const char* commodity                 = "CL\\"; 
     38const int sample_size                     = 5000; 
     39const char* commodity                 = "BP\\"; 
    3940 
    4041/* 
     
    9192} 
    9293 
    93 double valueCRRAUtility(const double &position, const vec &samples, const int order) 
     94double valueCRRAUtility(const double &position, const pair<vec,vec> &samples, const int order) 
    9495{ 
    9596        double value = 0; 
     97        set<double> values; 
    9698                         
    97         for(int i=0;i<samples.length();i++) 
    98         { 
    99                 double sample = samples.get(i); 
     99        for(int i=0;i<samples.first.length();i++) 
     100        { 
     101                double sample      = samples.second.get(i); 
     102                double probability = samples.first.get(i); 
    100103                if((position*sample+1)>min_utility_argument) 
    101104                { 
    102                         value += sample/pow(position*sample+1,order+1); 
     105                        values.insert(probability*sample/pow(position*sample+1,order+1)); 
    103106                } 
    104107                else 
    105108                { 
    106                         value += (min_utility_argument-1)/position/pow(min_utility_argument,order+1); 
     109                        values.insert(probability*(min_utility_argument-1)/position/pow(min_utility_argument,order+1)); 
    107110                } 
    108111        }        
    109112         
     113        for(set<double>::iterator val_ref = values.begin();val_ref!=values.end();val_ref++) 
     114        { 
     115                value+=(*val_ref); 
     116        } 
     117 
    110118        return value; 
    111119} 
    112120 
    113 double gradientCRRAUtility(const double &position, const vec &samples, const int order) 
     121double gradientCRRAUtility(const double &position, const pair<vec,vec> &samples, const int order) 
    114122{        
    115123        double value = 0; 
    116          
    117         for(int i=0;i<samples.length();i++) 
    118         { 
    119                 double sample = samples.get(i); 
     124        set<double> values; 
     125 
     126        for(int i=0;i<samples.first.length();i++) 
     127        { 
     128                double sample      = samples.second.get(i); 
     129                double probability = samples.first.get(i); 
    120130                if((position*sample+1)>min_utility_argument) 
    121131                { 
    122                         value += (-(order+1)*pow(sample,2))/pow(position*sample+1,order+2); 
    123                 } 
     132                        values.insert((-(order+1)*pow(sample,2)*probability)/pow(position*sample+1,order+2)); 
     133                } 
     134        } 
     135 
     136        for(set<double>::iterator val_ref = values.begin();val_ref!=values.end();val_ref++) 
     137        { 
     138                value+=(*val_ref); 
    124139        } 
    125140 
     
    127142} 
    128143 
    129 double newtonRaphson(double startingPoint, double epsilon, vec samples, int order) 
     144double newtonRaphson(double startingPoint, double epsilon, pair<vec,vec> samples, int order) 
    130145{ 
     146        /* 
    131147        if(samples.length()>800) 
    132148        { 
    133149                samples.del(801,samples.size()-1); 
    134150        } 
     151        */ 
    135152         
    136153        int count = 0; 
     
    309326                if(my_rarx!=NULL) 
    310327                { 
    311                         pair<vec,mat> imp_samples = my_rarx->posterior->sample(sample_size,true); 
     328                        pair<vec,mat> imp_samples = my_rarx->posterior->sample(sample_size,false); 
    312329 
    313330                        //cout << imp_samples.first << endl;                     
     
    502519                        if(time == max_model_order) 
    503520                        {  
    504                                  
     521                                /* 
    505522                                myfilew.open(rfstring,ios::app); 
    506                                 for(int i = 0;i<models.size();i++) 
     523                                for(int i = 0;models.size();i++) 
    507524                                { 
    508525                                        for(set<pair<int,int>>::iterator ar_ref = models[i]->ar_components.begin();ar_ref != models[i]->ar_components.end();ar_ref++) 
     
    536553                                myfilew << "888" << endl; 
    537554                                myfilew.close(); 
     555                                */ 
    538556                        } 
    539557                 
     
    543561                        int  prev_samples_nr; 
    544562                        bool previous_switch = true; 
    545                         for(vector<model*>::iterator model_ref = models.begin();model_ref!=models.end();model_ref++) 
     563                        for(vector<model*>::iterator model_ref = models.begin();model_ref!=models.end();model_ref++) //.begin()+1;model_ref++) 
    546564                        {//posuvam s apo models, co je pole modelov urobene o cyklus vyssie. Teda som v case time a robim to tam pre vsetky typy modelov, kombinace regresorov 
    547565                                (*model_ref)->data_update(time); //pozret sa preco je toto tu nutne 
     
    627645                                        if(previous_switch) 
    628646                                        { 
    629                                                 samples_nr = 10000; 
     647                                                samples_nr = sample_size; 
    630648                                        } 
    631649                                        else 
     
    663681                                        previous_switch = !previous_switch; 
    664682 
    665                                         double optimalInvestment = newtonRaphson(0,0.00001,predictions.second,utility_order); 
     683                                        double optimalInvestment = newtonRaphson(0,0.00001,predictions,utility_order); 
    666684 
    667685                                        if(abs(optimalInvestment)>max_investment)