Changeset 1413 for applications

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

Update hlavnich casti z Thinkeru. JS

Location:
applications/robust
Files:
2 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) 
  • applications/robust/robustlib.h

    r1405 r1413  
    437437                start_poly = new polyhedron(); 
    438438        }; 
    439  
    440         ~c_statistic() 
    441         { 
    442                 delete end_poly; 
    443                 delete start_poly; 
    444         } 
    445439 
    446440        void append_polyhedron(int row, polyhedron* appended_start, polyhedron* appended_end) 
     
    11031097 
    11041098                this->condition_order = condition_order; 
     1099        } 
     1100 
     1101        ~emlig() 
     1102        { 
     1103                for(int i = 0;i<statistic.size();i++) 
     1104                { 
     1105                        polyhedron* current_polyhedron; 
     1106                        while(statistic.rows[i]!=statistic.end_poly) 
     1107                        { 
     1108                                current_polyhedron = statistic.rows[i]; 
     1109                                statistic.delete_polyhedron(i,statistic.rows[i]); 
     1110                                delete current_polyhedron; 
     1111                        } 
     1112                } 
     1113                 
     1114                delete statistic.end_poly; 
     1115                delete statistic.start_poly; 
     1116 
     1117                for(list<condition*>::reverse_iterator c_ref = conditions.rbegin();c_ref!=conditions.rend();c_ref++) 
     1118                { 
     1119                        delete *c_ref; 
     1120                } 
     1121 
     1122                cout << "Emlig deleted." << endl; 
    11051123        } 
    11061124 
     
    23022320                        pair<double,double> probability_and_sigma = choose_sigma(condition_and_simplex.second); 
    23032321 
     2322                        /* 
     2323                        if(samples.cols()<10) 
     2324                        { 
     2325                                cout << "S-P:" << probability_and_sigma.first << ", "; 
     2326                                pause(0.3); 
     2327                        }*/ 
     2328 
    23042329                        int dimension = condition_and_simplex.second->vertices.size(); 
    23052330 
     
    23362361 
    23372362                        double exponent = extended_coords*condition_and_simplex.first; 
    2338                         double sample_prob = 1*condition_and_simplex.second->volume/condition_and_simplex.second->probability/pow(2*probability_and_sigma.second,condition_order)*exp(-exponent/probability_and_sigma.second);//*probability_and_sigma.first;                    
     2363                        double sample_prob = 1*condition_and_simplex.second->volume/condition_and_simplex.second->probability/pow(2*probability_and_sigma.second,condition_order)*exp(-exponent/probability_and_sigma.second)*probability_and_sigma.first;                       
     2364 
     2365                        /* 
     2366                        if(samples.cols()<20) 
     2367                        { 
     2368                                cout << "prob:" << sample_prob << endl; 
     2369                                pause(0.2); 
     2370                        } 
     2371                        */                       
    23392372 
    23402373                        sample_coords.ins(sample_coords.size(),probability_and_sigma.second); 
     
    27362769        }; 
    27372770 
     2771        ~RARX() 
     2772        { 
     2773                delete posterior; 
     2774        } 
     2775 
    27382776        void bayes(itpp::vec yt) 
    27392777        {